11#include <userver/dynamic_config/source.hpp>
12#include <userver/logging/level.hpp>
13#include <userver/utils/statistics/entry.hpp>
14#include <userver/utils/token_bucket.hpp>
16#include <userver/server/handlers/exceptions.hpp>
17#include <userver/server/handlers/formatted_error_data.hpp>
18#include <userver/server/handlers/handler_base.hpp>
19#include <userver/server/http/http_request.hpp>
20#include <userver/server/http/http_response.hpp>
21#include <userver/server/http/http_response_body_stream_fwd.hpp>
23#include <userver/tracing/span.hpp>
25USERVER_NAMESPACE_BEGIN
28class HttpMiddlewareBase;
34namespace server::handlers {
36class HttpHandlerStatistics;
37class HttpRequestStatistics;
38class HttpHandlerMethodStatistics;
39class HttpHandlerStatisticsScope;
62 const components::ComponentContext& component_context,
63 bool is_monitor =
false
66 ~HttpHandlerBase()
override;
72 virtual const std::string& HandlerName()
const;
78 HttpHandlerStatistics& GetHandlerStatistics()
const;
81 HttpRequestStatistics& GetRequestStatistics()
const;
90 std::string GetResponseDataForLoggingChecked(
91 const http::HttpRequest& request,
92 request::RequestContext& context,
93 const std::string& response_data
96 std::string GetUrlForLoggingChecked(
const http::HttpRequest& request,
request::RequestContext& context)
const;
101 const http::HttpRequest& request,
102 request::RequestContext& context,
109 const http::HttpRequest& request,
110 request::RequestContext& context,
111 const std::exception& ex
120 static yaml_config::Schema GetStaticConfigSchema();
123 [[
noreturn]]
void ThrowUnsupportedHttpMethod(
const http::HttpRequest& request)
const;
155 virtual bool IsStreamed()
const {
return is_body_streamed_; }
172 const http::HttpRequest& request,
173 request::RequestContext& context,
174 const std::string& request_body
179 const http::HttpRequest& request,
180 request::RequestContext& context,
181 const std::string& response_data
191 virtual std::string GetMetaType(
const http::HttpRequest&)
const;
197 void HandleHttpRequest(
http::HttpRequest& request,
request::RequestContext& context)
const;
199 void HandleRequestStream(
http::HttpRequest& http_request,
request::RequestContext& context)
const;
201 std::string GetRequestBodyForLoggingChecked(
202 const http::HttpRequest& request,
203 request::RequestContext& context,
204 const std::string& request_body
207 template <
typename HttpStatistics>
208 void FormatStatistics(utils::statistics::Writer result,
const HttpStatistics& stats);
210 void SetResponseServerHostname(
http::HttpResponse& response)
const;
212 void BuildMiddlewarePipeline(
const components::ComponentConfig&,
const components::ComponentContext&);
214 const dynamic_config::Source config_source_;
216 const std::string handler_name_;
217 utils::statistics::Entry statistics_holder_;
219 std::unordered_map<
int,
logging::
Level> log_level_for_status_codes_;
221 std::unique_ptr<HttpHandlerStatistics> handler_statistics_;
222 std::unique_ptr<HttpRequestStatistics> request_statistics_;
224 bool set_response_server_hostname_;
225 bool is_body_streamed_;
227 std::unique_ptr<
middlewares::HttpMiddlewareBase> first_middleware_;