MCPcopy Create free account
hub / github.com/ByConity/ByConity / createHandlersFactoryFromConfig

Function createHandlersFactoryFromConfig

src/Server/HTTPHandlerFactory.cpp:66–110  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

64}
65
66static inline auto createHandlersFactoryFromConfig(
67 IServer & server, const std::string & name, const String & prefix, AsynchronousMetrics & async_metrics, ContextMutablePtr context)
68{
69 auto main_handler_factory = std::make_shared<HTTPRequestHandlerFactoryMain>(name);
70
71 Poco::Util::AbstractConfiguration::Keys keys;
72 server.config().keys(prefix, keys);
73
74 for (const auto & key : keys)
75 {
76 if (key == "defaults")
77 {
78 addDefaultHandlersFactory(*main_handler_factory, server, async_metrics, context);
79 }
80 else if (startsWith(key, "rule"))
81 {
82 const auto & handler_type = server.config().getString(prefix + "." + key + ".handler.type", "");
83
84 if (handler_type.empty())
85 throw Exception("Handler type in config is not specified here: " + prefix + "." + key + ".handler.type",
86 ErrorCodes::INVALID_CONFIG_PARAMETER);
87
88 if (handler_type == "static")
89 main_handler_factory->addHandler(createStaticHandlerFactory(server, prefix + "." + key));
90 else if (handler_type == "dynamic_query_handler")
91 main_handler_factory->addHandler(createDynamicHandlerFactory(server, prefix + "." + key));
92 else if (handler_type == "predefined_query_handler")
93 main_handler_factory->addHandler(createPredefinedHandlerFactory(server, prefix + "." + key));
94 else if (handler_type == "prometheus")
95 main_handler_factory->addHandler(createPrometheusHandlerFactory(server, async_metrics, prefix + "." + key, context));
96 else if (handler_type == "replicas_status")
97 main_handler_factory->addHandler(createReplicasStatusHandlerFactory(server, prefix + "." + key));
98 else if (handler_type == "api")
99 main_handler_factory->addHandler(createAPIRequestHandlerFactory(server, prefix + "." + key));
100 else
101 throw Exception("Unknown handler type '" + handler_type + "' in config here: " + prefix + "." + key + ".handler.type",
102 ErrorCodes::INVALID_CONFIG_PARAMETER);
103 }
104 else
105 throw Exception("Unknown element in config: " + prefix + "." + key + ", must be 'rule' or 'defaults'",
106 ErrorCodes::UNKNOWN_ELEMENT_IN_CONFIG);
107 }
108
109 return main_handler_factory;
110}
111
112static inline HTTPRequestHandlerFactoryPtr
113createHTTPHandlerFactory(IServer & server, const std::string & name, AsynchronousMetrics & async_metrics, ContextMutablePtr context)

Callers 1

createHTTPHandlerFactoryFunction · 0.85

Calls 14

startsWithFunction · 0.50
ExceptionClass · 0.50
keysMethod · 0.45
configMethod · 0.45
getStringMethod · 0.45

Tested by

no test coverage detected