diff options
author | hcpp <hcpp@ydb.tech> | 2023-04-04 19:49:21 +0300 |
---|---|---|
committer | hcpp <hcpp@ydb.tech> | 2023-04-04 19:49:21 +0300 |
commit | 040e137dff5be81d7864d3693348d8e0bde6ac5d (patch) | |
tree | 2cc3794d8bc99783274303026bfb07781900cc8b | |
parent | 9d31ea24ce581b956d47f14fb7d86912cd24294a (diff) | |
download | ydb-040e137dff5be81d7864d3693348d8e0bde6ac5d.tar.gz |
status counters have been added to db pool
-rw-r--r-- | ydb/library/db_pool/db_pool.cpp | 48 |
1 files changed, 37 insertions, 11 deletions
diff --git a/ydb/library/db_pool/db_pool.cpp b/ydb/library/db_pool/db_pool.cpp index 50cd703059..be35320825 100644 --- a/ydb/library/db_pool/db_pool.cpp +++ b/ydb/library/db_pool/db_pool.cpp @@ -15,15 +15,40 @@ using namespace NActors; using namespace NYql; class TDbPoolActor : public NActors::TActor<TDbPoolActor> { + + struct TCounters { + const ::NMonitoring::TDynamicCounterPtr Counters; + const NMonitoring::THistogramPtr QueueSize; + const ::NMonitoring::TDynamicCounters::TCounterPtr TotalInFlight; + const NMonitoring::THistogramPtr RequestsTime; + const ::NMonitoring::TDynamicCounterPtr StatusSubgroup; + TMap<TString, ::NMonitoring::TDynamicCounters::TCounterPtr> Status; + + TCounters(const ::NMonitoring::TDynamicCounterPtr& counters) + : Counters(counters) + , QueueSize(counters->GetSubgroup("subcomponent", "DbPool")->GetHistogram("InFlight", NMonitoring::ExponentialHistogram(10, 2, 10))) + , TotalInFlight(counters->GetSubgroup("subcomponent", "DbPool")->GetCounter("TotalInflight")) + , RequestsTime(counters->GetSubgroup("subcomponent", "DbPool")->GetHistogram("RequestTimeMs", NMonitoring::ExponentialHistogram(6, 3, 100))) + , StatusSubgroup(counters->GetSubgroup("subcomponent", "DbPool")->GetSubgroup("component", "status")) + {} + + ::NMonitoring::TDynamicCounters::TCounterPtr GetStatus(const NYdb::TStatus& status) { + const TString statusStr = ToString(status.GetStatus()); + auto& counter = Status[statusStr]; + if (counter) { + return counter; + } + return counter = StatusSubgroup->GetCounter(statusStr, true); + } + }; + public: TDbPoolActor( const NYdb::NTable::TTableClient& tableClient, const ::NMonitoring::TDynamicCounterPtr& counters) : TActor(&TThis::WorkingState) , TableClient(tableClient) - , QueueSize(counters->GetSubgroup("subcomponent", "DbPool")->GetHistogram("InFlight", NMonitoring::ExponentialHistogram(10, 2, 10))) - , TotalInFlight(counters->GetSubgroup("subcomponent", "DbPool")->GetCounter("TotalInflight")) - , RequestsTime(counters->GetSubgroup("subcomponent", "DbPool")->GetHistogram("RequestTimeMs", NMonitoring::ExponentialHistogram(6, 3, 100))) + , Counters(counters) {} static constexpr char ActorName[] = "YQ_DB_POOL"; @@ -53,11 +78,11 @@ public: } void ProcessQueue() { - QueueSize->Collect(Requests.size()); + Counters.QueueSize->Collect(Requests.size()); if (Requests.empty() || RequestInProgress) { return; } - TotalInFlight->Inc(); + Counters.TotalInFlight->Inc(); RequestInProgress = true; RequestInProgressTimestamp = TInstant::Now(); @@ -112,15 +137,16 @@ public: void PopFromQueueAndProcess() { RequestInProgress = false; - RequestsTime->Collect(TInstant::Now().MilliSeconds() - RequestInProgressTimestamp.MilliSeconds()); + Counters.RequestsTime->Collect(TInstant::Now().MilliSeconds() - RequestInProgressTimestamp.MilliSeconds()); Requests.pop_front(); - TotalInFlight->Dec(); + Counters.TotalInFlight->Dec(); ProcessQueue(); } void HandleResponse(TEvents::TEvDbResponse::TPtr& ev) { LOG_T("TDbPoolActor: TEvDbResponse " << SelfId() << " Queue size = " << Requests.size()); const auto& request = Requests.front(); + Counters.GetStatus(ev.Get()->Get()->Status)->Inc(); TActivationContext::Send(ev->Forward(std::visit([](const auto& arg) { return arg.Sender; }, request))); PopFromQueueAndProcess(); } @@ -135,6 +161,7 @@ public: void HandleResponse(TEvents::TEvDbFunctionResponse::TPtr& ev) { LOG_T("TDbPoolActor: TEvDbFunctionResponse " << SelfId() << " Queue size = " << Requests.size()); const auto& request = Requests.front(); + Counters.GetStatus(ev.Get()->Get()->Status)->Inc(); TActivationContext::Send(ev->Forward(std::visit([](const auto& arg) { return arg.Sender; }, request))); PopFromQueueAndProcess(); } @@ -172,13 +199,12 @@ private: }; NYdb::NTable::TTableClient TableClient; + TCounters Counters; TDeque<std::variant<TRequest, TFunctionRequest>> Requests; bool RequestInProgress = false; TInstant RequestInProgressTimestamp = TInstant::Now(); std::shared_ptr<int> State = std::make_shared<int>(); - const NMonitoring::THistogramPtr QueueSize; - const ::NMonitoring::TDynamicCounters::TCounterPtr TotalInFlight; - const NMonitoring::THistogramPtr RequestsTime; + }; TDbPool::TDbPool( @@ -344,4 +370,4 @@ void TDbRequest::OnUndelivered(NActors::TEvents::TEvUndelivered::TPtr&) { Send(DbPool->GetNextActor(), new TEvents::TEvDbFunctionRequest(Handler), IEventHandle::FlagTrackDelivery); } -} // namespace NDbPool
\ No newline at end of file +} // namespace NDbPool |