Skip to content

Commit 88f3b91

Browse files
committed
Refactor metrics
1 parent ba00ef3 commit 88f3b91

File tree

27 files changed

+524
-303
lines changed

27 files changed

+524
-303
lines changed

include/ydb-cpp-sdk/client/extension_common/extension.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,9 @@ void TDriver::AddExtension(typename TExtension::TParams params) {
6565
typename TExtension::IApi* api = TExtension::IApi::Create(*this);
6666
auto extension = new TExtension(params, api);
6767
extension->SelfRegister(*this);
68-
if (api)
68+
if (api) {
6969
api->SelfRegister(*this);
70+
}
7071
}
7172

7273
} // namespace NYdb

include/ydb-cpp-sdk/client/extensions/solomon_stats/pull_client.h

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,22 @@ class TSolomonStatPullExtension: public NYdb::IExtension {
1818
friend class TSolomonStatPullExtension;
1919

2020
public:
21-
TParams(const std::string& host
22-
, ui16 port
23-
, const std::string& project
24-
, const std::string& service
25-
, const std::string& cluster
26-
, const std::vector<std::pair<std::string, std::string>>& labels = {});
21+
TParams(const std::string& host,
22+
std::uint16_t port,
23+
const std::string& project,
24+
const std::string& service,
25+
const std::string& cluster,
26+
const std::vector<std::pair<std::string, std::string>>& labels = {});
2727

2828
NMonitoring::TLabels GetLabels() const;
2929

3030
private:
3131
const std::string Host_;
32-
ui16 Port_;
32+
std::uint16_t Port_;
3333
NMonitoring::TLabels Labels_;
3434
};
3535

3636
TSolomonStatPullExtension(const TParams& params, IApi* api);
37-
~TSolomonStatPullExtension();
3837

3938
private:
4039
class TSolomonStatPage: public NMonitoring::IMonPage {

include/ydb-cpp-sdk/client/extensions/solomon_stats/pull_connector.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,24 +45,30 @@ class TMetricRegistryConnector: public NYdb::IExtension {
4545
};
4646

4747
inline void AddMetricRegistry(NYdb::TDriver& driver, NMonitoring::IMetricRegistry* ptr) {
48-
if (!ptr)
48+
if (!ptr) {
4949
return;
50+
}
51+
5052
using TConnector = TMetricRegistryConnector<NMonitoring::IMetricRegistry*>;
5153

5254
driver.AddExtension<TConnector>(TConnector::TParams(ptr));
5355
}
5456

5557
inline void AddMetricRegistry(NYdb::TDriver& driver, std::shared_ptr<NMonitoring::IMetricRegistry> ptr) {
56-
if (!ptr)
58+
if (!ptr) {
5759
return;
60+
}
61+
5862
using TConnector = TMetricRegistryConnector<std::shared_ptr<NMonitoring::IMetricRegistry>>;
5963

6064
driver.AddExtension<TConnector>(TConnector::TParams(ptr));
6165
}
6266

6367
inline void AddMetricRegistry(NYdb::TDriver& driver, TAtomicSharedPtr<NMonitoring::IMetricRegistry> ptr) {
64-
if (!ptr)
68+
if (!ptr) {
6569
return;
70+
}
71+
6672
using TConnector = TMetricRegistryConnector<TAtomicSharedPtr<NMonitoring::IMetricRegistry>>;
6773

6874
driver.AddExtension<TConnector>(TConnector::TParams(ptr));

src/client/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ add_subdirectory(iam)
1212
add_subdirectory(iam_private)
1313
add_subdirectory(impl)
1414
add_subdirectory(import)
15+
add_subdirectory(metrics_providers)
1516
add_subdirectory(monitoring)
1617
add_subdirectory(operation)
1718
add_subdirectory(params)

src/client/extension_common/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ _ydb_sdk_add_library(client-extension_common)
33
target_link_libraries(client-extension_common PUBLIC
44
yutil
55
monlib-metrics
6+
client-metrics_providers-monlib
67
client-ydb_driver
78
)
89

src/client/extension_common/extension.cpp

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
#define INCLUDE_YDB_INTERNAL_H
44
#include <src/client/impl/internal/grpc_connections/grpc_connections.h>
5-
#include <src/client/impl/internal/stats_extractor/extractor.h>
65
#undef INCLUDE_YDB_INTERNAL_H
76

7+
#include <src/client/metrics_providers/monlib/provider.h>
8+
9+
810
namespace NYdb::inline V3 {
911

1012
void IExtension::SelfRegister(TDriver driver) {
@@ -15,6 +17,34 @@ void IExtensionApi::SelfRegister(TDriver driver) {
1517
CreateInternalInterface(driver)->RegisterExtensionApi(this);
1618
}
1719

20+
class TStatsExtractor: public NSdkStats::IStatApi {
21+
public:
22+
TStatsExtractor(std::shared_ptr<IInternalClient> client)
23+
: Client_(client)
24+
{}
25+
26+
virtual void SetMetricRegistry(::NMonitoring::IMetricRegistry* sensorsRegistry) override {
27+
auto strong = Client_.lock();
28+
if (strong) {
29+
strong->StartStatCollecting(NMetrics::CreateMonlibMetricsProvider(sensorsRegistry));
30+
}
31+
}
32+
33+
void Accept(NMonitoring::IMetricConsumer* consumer) const override {
34+
auto strong = Client_.lock();
35+
if (strong) {
36+
auto sensorsRegistry = strong->GetMetricRegistry();
37+
auto monlibRegistry = NMetrics::TryGetUnderlyingMetricsRegistry(sensorsRegistry);
38+
Y_ABORT_UNLESS(monlibRegistry, "IMetricRegistry is not a TMonlibMetricsProvider in Stats Extractor");
39+
monlibRegistry->Accept(TInstant::Zero(), consumer);
40+
} else {
41+
throw NSdkStats::DestroyedClientException();
42+
}
43+
}
44+
private:
45+
std::weak_ptr<IInternalClient> Client_;
46+
};
47+
1848
namespace NSdkStats {
1949

2050
IStatApi* IStatApi::Create(TDriver driver) {

src/client/extensions/solomon_stats/pull_client.cpp

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,32 @@
22

33
namespace NSolomonStatExtension::inline V3 {
44

5-
TSolomonStatPullExtension::TParams::TParams(const std::string& host
6-
, ui16 port
7-
, const std::string& project
8-
, const std::string& service
9-
, const std::string& cluster
10-
, const std::vector<std::pair<std::string, std::string>>& labels)
11-
: Host_(host), Port_(port), Labels_()
5+
TSolomonStatPullExtension::TParams::TParams(const std::string& host,
6+
std::uint16_t port,
7+
const std::string& project,
8+
const std::string& service,
9+
const std::string& cluster,
10+
const std::vector<std::pair<std::string, std::string>>& labels)
11+
: Host_(host)
12+
, Port_(port)
13+
, Labels_()
1214
{
1315
Labels_.Add("project", project);
1416
Labels_.Add("service", service);
1517
Labels_.Add("cluster", cluster);
1618
for (const auto& label: labels) {
17-
Labels_.Add(label.first, label.second);
19+
Labels_.Add(label.first, label.second);
1820
}
1921
}
2022

2123
NMonitoring::TLabels TSolomonStatPullExtension::TParams::GetLabels() const {
2224
return Labels_;
2325
}
2426

25-
2627
TSolomonStatPullExtension::TSolomonStatPage::TSolomonStatPage(const std::string& title, const std::string& path, IApi* api)
27-
: NMonitoring::IMonPage(TString(title), TString(path)), Api_(api)
28-
{ }
28+
: NMonitoring::IMonPage(TString(title), TString(path))
29+
, Api_(api)
30+
{}
2931

3032
void TSolomonStatPullExtension::TSolomonStatPage::Output(NMonitoring::IMonHttpRequest& request) {
3133
request.Output() << NMonitoring::HTTPOKJSON;
@@ -35,13 +37,12 @@ void TSolomonStatPullExtension::TSolomonStatPage::Output(NMonitoring::IMonHttpRe
3537

3638
TSolomonStatPullExtension::TSolomonStatPullExtension(const TSolomonStatPullExtension::TParams& params, IApi* api)
3739
: MetricRegistry_(new NMonitoring::TMetricRegistry(params.GetLabels()))
38-
, MonService_(params.Port_, TString(params.Host_), 0), Page_( new TSolomonStatPage("stats", "Statistics", api) ) {
39-
api->SetMetricRegistry(MetricRegistry_.get());
40-
MonService_.Register(Page_);
41-
MonService_.StartOrThrow();
42-
}
43-
44-
TSolomonStatPullExtension::~TSolomonStatPullExtension()
45-
{ }
40+
, MonService_(params.Port_, TString(params.Host_), 0)
41+
, Page_(new TSolomonStatPage("stats", "Statistics", api))
42+
{
43+
api->SetMetricRegistry(MetricRegistry_.get());
44+
MonService_.Register(Page_);
45+
MonService_.StartOrThrow();
46+
}
4647

4748
} // NSolomonStatExtension

src/client/impl/endpoints/endpoints.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include "endpoints.h"
22

3-
#include <library/cpp/monlib/metrics/metric_registry.h>
43
#include <library/cpp/string_utils/quote/quote.h>
54

65
#include <util/random/random.h>
@@ -80,7 +79,7 @@ std::vector<std::string> TEndpointElectorSafe::SetNewState(std::vector<TEndpoint
8079
}
8180
}
8281

83-
Sort(uniqRec.begin(), uniqRec.end());
82+
std::sort(uniqRec.begin(), uniqRec.end());
8483

8584
auto bestK = GetBestK(uniqRec);
8685

@@ -176,7 +175,7 @@ void TEndpointElectorSafe::PessimizeEndpoint(const std::string& endpoint) {
176175
}
177176
}
178177
}
179-
Sort(Records_.begin(), Records_.end());
178+
std::sort(Records_.begin(), Records_.end());
180179
BestK_ = GetBestK(Records_);
181180
}
182181

src/client/impl/endpoints/endpoints.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
#pragma once
22

3+
#include <src/client/impl/stats/stats.h>
4+
35
#include <atomic>
46
#include <shared_mutex>
57
#include <unordered_map>
68
#include <vector>
79
#include <string>
8-
#include <src/client/impl/stats/stats.h>
910

1011
namespace NYdb::inline V3 {
1112

@@ -124,9 +125,10 @@ class TEndpointElectorSafe {
124125
std::unordered_map<ui64, TKnownEndpoint> KnownEndpointsByNodeId_;
125126
std::int32_t BestK_ = -1;
126127
std::atomic_int PessimizationRatio_ = 0;
127-
NSdkStats::TAtomicCounter<::NMonitoring::TIntGauge> EndpointCountGauge_;
128-
NSdkStats::TAtomicCounter<::NMonitoring::TIntGauge> PessimizationRatioGauge_;
129-
NSdkStats::TAtomicCounter<::NMonitoring::TIntGauge> EndpointActiveGauge_;
128+
129+
NSdkStats::TAtomicCounter<NMetrics::IIntGauge> EndpointCountGauge_;
130+
NSdkStats::TAtomicCounter<NMetrics::IIntGauge> PessimizationRatioGauge_;
131+
NSdkStats::TAtomicCounter<NMetrics::IIntGauge> EndpointActiveGauge_;
130132
};
131133

132134
// Used to track object

src/client/impl/internal/db_driver_state/state.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ NThreading::TFuture<void> TDbDriverStateTracker::SendNotification(
271271
return NThreading::WaitExceptionOrAll(results);
272272
}
273273

274-
void TDbDriverStateTracker::SetMetricRegistry(NMonitoring::TMetricRegistry *sensorsRegistry) {
274+
void TDbDriverStateTracker::SetMetricRegistry(std::shared_ptr<NMetrics::IMetricsProvider> sensorsRegistry) {
275275
std::vector<std::weak_ptr<TDbDriverState>> states;
276276
{
277277
std::shared_lock lock(Lock_);

0 commit comments

Comments
 (0)