userver: userver/server/congestion_control/sensor.hpp Source File
Loading...
Searching...
No Matches
sensor.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/server/congestion_control/sensor.hpp
4/// @brief @copybrief server::congestion_control::Sensor
5
6#include <cstdint>
7
8#include <userver/congestion_control/sensor.hpp>
9#include <userver/engine/task/task_processor_fwd.hpp>
10#include <userver/rcu/rcu.hpp>
11#include <userver/utils/statistics/recentperiod.hpp>
12
13USERVER_NAMESPACE_BEGIN
14
15namespace server::congestion_control {
16
18public:
19 virtual ~RequestsSource() = default;
20
21 virtual std::uint64_t GetTotalRequests() const = 0;
22};
23
24/// @brief HTTP server congestion control sensor
25class Sensor final : public USERVER_NAMESPACE::congestion_control::Sensor {
26public:
27 explicit Sensor(engine::TaskProcessor& tp);
28
29 Data FetchCurrent() override;
30
31 void RegisterRequestsSource(RequestsSource& source);
32
33private:
34 engine::TaskProcessor& tp_;
35 rcu::Variable<std::vector<RequestsSource*>> requests_sources_;
36
37 std::chrono::steady_clock::time_point last_fetch_tp_;
38 std::uint64_t last_overloads_{0};
39 std::uint64_t last_no_overloads_{0};
40 std::uint64_t last_requests_{0};
41};
42
43} // namespace server::congestion_control
44
45USERVER_NAMESPACE_END