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/congestion_control/sensor.hpp>
9#include <userver/server/handlers/fallback_handlers.hpp>
10#include <userver/server/handlers/http_handler_base.hpp>
11#include <userver/storages/secdist/component.hpp>
12#include <userver/utils/resource_scopes.hpp>
13#include <userver/utils/statistics/fwd.hpp>
14
15USERVER_NAMESPACE_BEGIN
16
17namespace server {
18
19namespace net {
20struct StatsAggregation;
21}
22
23namespace http {
24class HttpRequestHandler;
25}
26
27class RequestsView;
28
29class ServerImpl;
30struct ServerConfig;
31
32class Server final : public congestion_control::Limitee, public congestion_control::RequestsSource {
33public:
34 Server(
35 ServerConfig config,
36 const storages::secdist::SecdistConfig& secdist,
37 const components::ComponentContext& component_context
38 );
39 ~Server() override;
40
41 const ServerConfig& GetConfig() const;
42
43 std::vector<std::string> GetCommonMiddlewares() const;
44
45 void WriteMonitorData(utils::statistics::Writer& writer) const;
46
47 void WriteTotalHandlerStatistics(utils::statistics::Writer& writer) const;
48
49 net::StatsAggregation GetServerStats() const;
50
51 void AddHandler(const handlers::HttpHandlerBase& handler, engine::TaskProcessor& task_processor);
52
53 const http::HttpRequestHandler& GetHttpRequestHandler(bool is_monitor = false) const;
54
55 void StartMonitorPort();
56 void Start();
57
58 void Stop();
59
60 RequestsView& GetRequestsView();
61
62 void SetLimit(std::optional<size_t> new_limit) override;
63
64 size_t GetLimitableHandlersCount() const override;
65
66 void SetRpsRatelimit(std::optional<size_t> rps);
67
68 void SetRpsRatelimitStatusCode(http::HttpStatus status_code);
69
70 std::uint64_t GetTotalRequests() const override;
71
72 void WriteMetrics(utils::statistics::Writer& writer) const;
73
74private:
75 std::unique_ptr<ServerImpl> pimpl_;
76};
77
78} // namespace server
79
80USERVER_NAMESPACE_END