userver: userver/server/congestion_control/limiter.hpp Source File
Loading...
Searching...
No Matches
limiter.hpp
1#pragma once
2
3#include <optional>
4#include <vector>
5
6#include <userver/concurrent/variable.hpp>
7#include <userver/congestion_control/limiter.hpp>
8#include <userver/utils/not_null.hpp>
9
10USERVER_NAMESPACE_BEGIN
11
12namespace server::congestion_control {
13
14class Limitee {
15public:
16 virtual void SetLimit(std::optional<size_t> new_limit) = 0;
17
18 virtual std::size_t GetLimitableHandlersCount() const = 0;
19};
20
21class Limiter final : public USERVER_NAMESPACE::congestion_control::Limiter {
22public:
23 void SetLimit(const USERVER_NAMESPACE::congestion_control::Limit& new_limit) override;
24
25 std::size_t GetLimitableHandlersCount() const;
26
27 void RegisterLimitee(Limitee& limitee);
28
29private:
30 concurrent::Variable<std::vector<utils::NotNull<Limitee*>>, std::mutex> limitees_;
31};
32
33} // namespace server::congestion_control
34
35USERVER_NAMESPACE_END