userver: userver/server/server.hpp Source File
Loading...
Searching...
No Matches
server.hpp
1#pragma once
2
3#include <userver/formats/json/value.hpp>
4
5#include <userver/components/component_context.hpp>
6#include <userver/engine/task/task_processor_fwd.hpp>
7#include <userver/server/congestion_control/limiter.hpp>
8#include <userver/server/handlers/fallback_handlers.hpp>
9#include <userver/server/handlers/http_handler_base.hpp>
10#include <userver/storages/secdist/component.hpp>
11#include <userver/utils/statistics/fwd.hpp>
12
13USERVER_NAMESPACE_BEGIN
14
15namespace server {
16
17namespace net {
18struct Stats;
19}
20
21namespace http {
22class HttpRequestHandler;
23}
24
25class RequestsView;
26
27class ServerImpl;
28struct ServerConfig;
29
30class Server final : public congestion_control::Limitee {
31 public:
32 Server(ServerConfig config, const storages::secdist::SecdistConfig& secdist,
33 const components::ComponentContext& component_context);
34 ~Server();
35
36 const ServerConfig& GetConfig() const;
37
38 void WriteMonitorData(utils::statistics::Writer& writer) const;
39
40 void WriteTotalHandlerStatistics(utils::statistics::Writer& writer) const;
41
42 net::Stats GetServerStats() const;
43
44 void AddHandler(const handlers::HttpHandlerBase& handler,
45 engine::TaskProcessor& task_processor);
46
47 size_t GetThrottlableHandlersCount() const;
48
49 const http::HttpRequestHandler& GetHttpRequestHandler(
50 bool is_monitor = false) const;
51
52 void Start();
53
54 void Stop();
55
56 RequestsView& GetRequestsView();
57
58 void SetLimit(std::optional<size_t> new_limit) override;
59
60 void SetRpsRatelimit(std::optional<size_t> rps);
61
62 void SetRpsRatelimitStatusCode(http::HttpStatus status_code);
63
64 private:
65 std::unique_ptr<ServerImpl> pimpl;
66};
67
68} // namespace server
69
70USERVER_NAMESPACE_END