9#include <userver/utils/statistics/rate_counter.hpp>
11USERVER_NAMESPACE_BEGIN
18class TokenBucket
final {
20 using TimePoint = std::chrono::steady_clock::time_point;
21 using Duration = std::chrono::steady_clock::duration;
40 [[deprecated]]
TokenBucket(size_t max_size, Duration single_token_update_interval);
45 TokenBucket(
const TokenBucket&) =
delete;
46 TokenBucket(TokenBucket&&)
noexcept;
47 TokenBucket& operator=(
const TokenBucket&) =
delete;
48 TokenBucket& operator=(TokenBucket&&)
noexcept;
50 bool IsUnbounded()
const;
93 friend void DumpMetric(statistics::Writer& writer,
const TokenBucket& bucket);
97 std::atomic<size_t> max_size_;
98 std::atomic<size_t> token_refill_amount_;
99 std::atomic<Duration> token_refill_interval_;
100 std::atomic<size_t> tokens_;
101 std::atomic<TimePoint> last_update_;
103 statistics::RateCounter obtain_failed_;
106void DumpMetric(statistics::Writer& writer,
const TokenBucket& bucket);