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

Function createHandlersFactoryFromConfig

src/Server/HTTPHandlerFactory.cpp:125–290  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

123}
124
125static inline auto createHandlersFactoryFromConfig(
126 IServer & server,
127 const Poco::Util::AbstractConfiguration & config,
128 const std::string & name,
129 const String & prefix,
130 AsynchronousMetrics & async_metrics)
131{
132 auto main_handler_factory = std::make_shared<HTTPRequestHandlerFactoryMain>(name);
133
134 Poco::Util::AbstractConfiguration::Keys keys;
135 config.keys(prefix, keys);
136
137 std::unordered_map<String, String> common_headers_override;
138
139 if (std::find(keys.begin(), keys.end(), "common_http_response_headers") != keys.end())
140 {
141 auto common_headers_prefix = prefix + ".common_http_response_headers";
142 Poco::Util::AbstractConfiguration::Keys headers_keys;
143 config.keys(common_headers_prefix, headers_keys);
144 for (const auto & header_key : headers_keys)
145 {
146 common_headers_override[header_key] = config.getString(common_headers_prefix + "." + header_key);
147 }
148 }
149
150 for (const auto & key : keys)
151 {
152 if (key == "defaults")
153 {
154 addDefaultHandlersFactory(*main_handler_factory, server, config, async_metrics);
155 }
156 else if (startsWith(key, "rule"))
157 {
158 const auto & handler_type = config.getString(prefix + "." + key + ".handler.type", "");
159
160 if (handler_type.empty())
161 throw Exception(ErrorCodes::INVALID_CONFIG_PARAMETER, "Handler type in config is not specified here: "
162 "{}.{}.handler.type", prefix, key);
163
164 if (handler_type == "static")
165 {
166 main_handler_factory->addHandler(createStaticHandlerFactory(server, config, prefix + "." + key, common_headers_override));
167 }
168 else if (handler_type == "redirect")
169 {
170 main_handler_factory->addHandler(createRedirectHandlerFactory(config, prefix + "." + key, common_headers_override));
171 }
172 else if (handler_type == "dynamic_query_handler")
173 {
174 main_handler_factory->addHandler(createDynamicHandlerFactory(server, config, prefix + "." + key, common_headers_override));
175 }
176 else if (handler_type == "predefined_query_handler")
177 {
178 main_handler_factory->addHandler(createPredefinedHandlerFactory(server, config, prefix + "." + key, common_headers_override));
179 }
180 else if (handler_type.starts_with("prometheus"))
181 {
182 main_handler_factory->addHandler(

Callers 1

createHTTPHandlerFactoryFunction · 0.70

Calls 15

createPingHandlerFactoryFunction · 0.85
keysMethod · 0.80
addFiltersFromConfigMethod · 0.80
findFunction · 0.50
startsWithFunction · 0.50

Tested by

no test coverage detected