123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- #pragma once
- #include <library/cpp/monlib/dynamic_counters/percentile/percentile.h>
- #include <library/cpp/monlib/dynamic_counters/counters.h>
- #include <util/generic/ptr.h>
- namespace NGrpc {
- struct ICounterBlock : public TThrRefBase {
- virtual void CountNotOkRequest() = 0;
- virtual void CountNotOkResponse() = 0;
- virtual void CountNotAuthenticated() = 0;
- virtual void CountResourceExhausted() = 0;
- virtual void CountRequestBytes(ui32 requestSize) = 0;
- virtual void CountResponseBytes(ui32 responseSize) = 0;
- virtual void StartProcessing(ui32 requestSize) = 0;
- virtual void FinishProcessing(ui32 requestSize, ui32 responseSize, bool ok, ui32 status, TDuration requestDuration) = 0;
- virtual void CountRequestsWithoutDatabase() {}
- virtual void CountRequestsWithoutToken() {}
- virtual void CountRequestWithoutTls() {}
- virtual TIntrusivePtr<ICounterBlock> Clone() { return this; }
- virtual void UseDatabase(const TString& database) { Y_UNUSED(database); }
- };
- using ICounterBlockPtr = TIntrusivePtr<ICounterBlock>;
- class TCounterBlock final : public ICounterBlock {
- NMonitoring::TDynamicCounters::TCounterPtr TotalCounter;
- NMonitoring::TDynamicCounters::TCounterPtr InflyCounter;
- NMonitoring::TDynamicCounters::TCounterPtr NotOkRequestCounter;
- NMonitoring::TDynamicCounters::TCounterPtr NotOkResponseCounter;
- NMonitoring::TDynamicCounters::TCounterPtr RequestBytes;
- NMonitoring::TDynamicCounters::TCounterPtr InflyRequestBytes;
- NMonitoring::TDynamicCounters::TCounterPtr ResponseBytes;
- NMonitoring::TDynamicCounters::TCounterPtr NotAuthenticated;
- NMonitoring::TDynamicCounters::TCounterPtr ResourceExhausted;
- bool Percentile = false;
- NMonitoring::TPercentileTracker<4, 512, 15> RequestHistMs;
- std::array<NMonitoring::TDynamicCounters::TCounterPtr, 2> GRpcStatusCounters;
- public:
- TCounterBlock(NMonitoring::TDynamicCounters::TCounterPtr totalCounter,
- NMonitoring::TDynamicCounters::TCounterPtr inflyCounter,
- NMonitoring::TDynamicCounters::TCounterPtr notOkRequestCounter,
- NMonitoring::TDynamicCounters::TCounterPtr notOkResponseCounter,
- NMonitoring::TDynamicCounters::TCounterPtr requestBytes,
- NMonitoring::TDynamicCounters::TCounterPtr inflyRequestBytes,
- NMonitoring::TDynamicCounters::TCounterPtr responseBytes,
- NMonitoring::TDynamicCounters::TCounterPtr notAuthenticated,
- NMonitoring::TDynamicCounters::TCounterPtr resourceExhausted,
- TIntrusivePtr<NMonitoring::TDynamicCounters> group)
- : TotalCounter(std::move(totalCounter))
- , InflyCounter(std::move(inflyCounter))
- , NotOkRequestCounter(std::move(notOkRequestCounter))
- , NotOkResponseCounter(std::move(notOkResponseCounter))
- , RequestBytes(std::move(requestBytes))
- , InflyRequestBytes(std::move(inflyRequestBytes))
- , ResponseBytes(std::move(responseBytes))
- , NotAuthenticated(std::move(notAuthenticated))
- , ResourceExhausted(std::move(resourceExhausted))
- {
- if (group) {
- RequestHistMs.Initialize(group, "event", "request", "ms", {0.5f, 0.9f, 0.99f, 0.999f, 1.0f});
- Percentile = true;
- }
- }
- void CountNotOkRequest() override {
- NotOkRequestCounter->Inc();
- }
- void CountNotOkResponse() override {
- NotOkResponseCounter->Inc();
- }
- void CountNotAuthenticated() override {
- NotAuthenticated->Inc();
- }
- void CountResourceExhausted() override {
- ResourceExhausted->Inc();
- }
- void CountRequestBytes(ui32 requestSize) override {
- *RequestBytes += requestSize;
- }
- void CountResponseBytes(ui32 responseSize) override {
- *ResponseBytes += responseSize;
- }
- void StartProcessing(ui32 requestSize) override {
- TotalCounter->Inc();
- InflyCounter->Inc();
- *RequestBytes += requestSize;
- *InflyRequestBytes += requestSize;
- }
- void FinishProcessing(ui32 requestSize, ui32 responseSize, bool ok, ui32 status,
- TDuration requestDuration) override
- {
- Y_UNUSED(status);
- InflyCounter->Dec();
- *InflyRequestBytes -= requestSize;
- *ResponseBytes += responseSize;
- if (!ok) {
- NotOkResponseCounter->Inc();
- }
- if (Percentile) {
- RequestHistMs.Increment(requestDuration.MilliSeconds());
- }
- }
- ICounterBlockPtr Clone() override {
- return this;
- }
- void Update() {
- if (Percentile) {
- RequestHistMs.Update();
- }
- }
- };
- using TCounterBlockPtr = TIntrusivePtr<TCounterBlock>;
- /**
- * Creates new instance of ICounterBlock implementation which does nothing.
- *
- * @return new instance
- */
- ICounterBlockPtr FakeCounterBlock();
- } // namespace NGrpc
|