Skip to content

Commit 4fc04db

Browse files
author
vansokol
committed
feat token-bucket: add statistics
Tests: добавлена метрика commit_hash:eb84472a15f607b97087ebd49a542d70078ac9be
1 parent 06b730e commit 4fc04db

File tree

4 files changed

+18
-1
lines changed

4 files changed

+18
-1
lines changed

.mapping.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2079,7 +2079,6 @@
20792079
"core/src/utils/statistics/impl/histogram_view_utils.hpp":"taxi/uservices/userver/core/src/utils/statistics/impl/histogram_view_utils.hpp",
20802080
"core/src/utils/statistics/impl/rate_serialization.hpp":"taxi/uservices/userver/core/src/utils/statistics/impl/rate_serialization.hpp",
20812081
"core/src/utils/statistics/json.cpp":"taxi/uservices/userver/core/src/utils/statistics/json.cpp",
2082-
"core/src/utils/statistics/labels.cpp":"taxi/uservices/userver/core/src/utils/statistics/labels.cpp",
20832082
"core/src/utils/statistics/metadata.cpp":"taxi/uservices/userver/core/src/utils/statistics/metadata.cpp",
20842083
"core/src/utils/statistics/metric_value.cpp":"taxi/uservices/userver/core/src/utils/statistics/metric_value.cpp",
20852084
"core/src/utils/statistics/metrics_storage.cpp":"taxi/uservices/userver/core/src/utils/statistics/metrics_storage.cpp",
@@ -5649,6 +5648,7 @@
56495648
"universal/src/utils/small_string_benchmark.cpp":"taxi/uservices/userver/universal/src/utils/small_string_benchmark.cpp",
56505649
"universal/src/utils/small_string_test.cpp":"taxi/uservices/userver/universal/src/utils/small_string_test.cpp",
56515650
"universal/src/utils/span_test.cpp":"taxi/uservices/userver/universal/src/utils/span_test.cpp",
5651+
"universal/src/utils/statistics/labels.cpp":"taxi/uservices/userver/universal/src/utils/statistics/labels.cpp",
56525652
"universal/src/utils/statistics/rate.cpp":"taxi/uservices/userver/universal/src/utils/statistics/rate.cpp",
56535653
"universal/src/utils/statistics/rate_counter.cpp":"taxi/uservices/userver/universal/src/utils/statistics/rate_counter.cpp",
56545654
"universal/src/utils/statistics/request.cpp":"taxi/uservices/userver/universal/src/utils/statistics/request.cpp",

universal/include/userver/utils/token_bucket.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
#include <atomic>
77
#include <chrono>
88

9+
#include <userver/utils/statistics/rate_counter.hpp>
10+
911
USERVER_NAMESPACE_BEGIN
1012

1113
namespace utils {
@@ -88,15 +90,21 @@ class TokenBucket final {
8890
static double GetRatePs(Duration interval);
8991

9092
private:
93+
friend void DumpMetric(statistics::Writer& writer, const TokenBucket& bucket);
94+
9195
void Update();
9296

9397
std::atomic<size_t> max_size_;
9498
std::atomic<size_t> token_refill_amount_;
9599
std::atomic<Duration> token_refill_interval_;
96100
std::atomic<size_t> tokens_;
97101
std::atomic<TimePoint> last_update_;
102+
103+
statistics::RateCounter obtain_failed_;
98104
};
99105

106+
void DumpMetric(statistics::Writer& writer, const TokenBucket& bucket);
107+
100108
} // namespace utils
101109

102110
USERVER_NAMESPACE_END

universal/src/utils/token_bucket.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <stdexcept>
44

55
#include <userver/utils/mock_now.hpp>
6+
#include <userver/utils/statistics/writer.hpp>
67

78
USERVER_NAMESPACE_BEGIN
89

@@ -112,6 +113,7 @@ bool TokenBucket::Obtain() { return ObtainAll(1); }
112113
bool TokenBucket::ObtainAll(size_t count) {
113114
if (max_size_ < count) {
114115
// not satisfiable
116+
obtain_failed_.Add(statistics::Rate{count});
115117
return false;
116118
}
117119

@@ -125,6 +127,7 @@ bool TokenBucket::ObtainAll(size_t count) {
125127
auto expected = tokens_.load();
126128
do {
127129
if (expected < count) {
130+
obtain_failed_.Add(statistics::Rate{count});
128131
return false;
129132
}
130133
} while (!tokens_.compare_exchange_strong(expected, expected - count));
@@ -188,6 +191,12 @@ void TokenBucket::Update() {
188191
}
189192
}
190193

194+
void DumpMetric(statistics::Writer& writer, const TokenBucket& bucket) {
195+
const static std::string kObtainFailed = "obtain_failed";
196+
197+
writer[kObtainFailed] = bucket.obtain_failed_.Load();
198+
}
199+
191200
} // namespace utils
192201

193202
USERVER_NAMESPACE_END

0 commit comments

Comments
 (0)