9#include <userver/formats/json_fwd.hpp>
10#include <userver/formats/parse/to.hpp>
11#include <userver/utils/statistics/rate_counter.hpp>
12#include <userver/yaml_config/yaml_config.hpp>
14USERVER_NAMESPACE_BEGIN
22struct RetryBudgetSettings
final {
24 float max_tokens{100.0f};
27 float token_ratio{0.1f};
34class RetryBudget
final {
37 explicit RetryBudget(
const RetryBudgetSettings& settings);
54 friend void DumpMetric(statistics::Writer& writer,
const RetryBudget& budget);
56 std::atomic<std::uint32_t> max_tokens_;
57 std::atomic<std::uint32_t> token_ratio_;
58 std::atomic<std::int32_t> token_count_;
59 std::atomic<
bool> enabled_{
false};
62 utils::statistics::RateCounter ok_rate_counter_;
64 utils::statistics::RateCounter fail_rate_counter_;
67RetryBudgetSettings Parse(
const formats::json::Value& elem, formats::parse::To<RetryBudgetSettings>);
69RetryBudgetSettings Parse(
const yaml_config::Value& elem, formats::parse::To<RetryBudgetSettings>);