Skip to content

Commit 3cb78b9

Browse files
Evgenik2Gazizonoki
authored andcommitted
Collect metrics from isolated cluster (#25681)
1 parent c50acea commit 3cb78b9

File tree

6 files changed

+98
-1
lines changed

6 files changed

+98
-1
lines changed

.github/last_commit.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
51b66527943329176e027929f58092c77e94c2f8
1+
265bf81d86234be2a1f2d2834ef72e36b4f43e73

include/ydb-cpp-sdk/client/monitoring/monitoring.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Ydb {
66
namespace Monitoring {
77
class SelfCheckResult;
8+
class ClusterStateResult;
89
}
910
}
1011

@@ -34,6 +35,12 @@ struct TSelfCheckSettings : public TOperationRequestSettings<TSelfCheckSettings>
3435
FLUENT_SETTING_OPTIONAL(uint32_t, MaximumLevel);
3536
};
3637

38+
struct TClusterStateSettings : public TOperationRequestSettings<TClusterStateSettings> {
39+
FLUENT_SETTING_OPTIONAL(uint32_t, DurationSeconds);
40+
FLUENT_SETTING_OPTIONAL(uint32_t, PeriodSeconds);
41+
};
42+
43+
3744
class TSelfCheckResult : public TStatus {
3845
friend class NYdb::TProtoAccessor;
3946
public:
@@ -45,13 +52,26 @@ class TSelfCheckResult : public TStatus {
4552

4653
using TAsyncSelfCheckResult = NThreading::TFuture<TSelfCheckResult>;
4754

55+
class TClusterStateResult : public TStatus {
56+
friend class NYdb::TProtoAccessor;
57+
public:
58+
TClusterStateResult(TStatus&& status, Ydb::Monitoring::ClusterStateResult&& result);
59+
private:
60+
class TImpl;
61+
std::shared_ptr<TImpl> Impl_;
62+
};
63+
64+
using TAsyncClusterStateResult = NThreading::TFuture<TClusterStateResult>;
65+
4866
class TMonitoringClient {
4967
class TImpl;
5068

5169
public:
5270
TMonitoringClient(const TDriver& driver, const TCommonClientSettings& settings = TCommonClientSettings());
5371

5472
TAsyncSelfCheckResult SelfCheck(const TSelfCheckSettings& settings = TSelfCheckSettings());
73+
74+
TAsyncClusterStateResult ClusterState(const TClusterStateSettings& settings = TClusterStateSettings());
5575
private:
5676
std::shared_ptr<TImpl> Impl_;
5777
};

include/ydb-cpp-sdk/client/proto/accessor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class TProtoAccessor {
4949
static const Ydb::Topic::DescribeTopicResult& GetProto(const NYdb::NTopic::TTopicDescription& topicDescription);
5050
static const Ydb::Topic::DescribeConsumerResult& GetProto(const NYdb::NTopic::TConsumerDescription& consumerDescription);
5151
static const Ydb::Monitoring::SelfCheckResult& GetProto(const NYdb::NMonitoring::TSelfCheckResult& selfCheckResult);
52+
static const Ydb::Monitoring::ClusterStateResult& GetProto(const NYdb::NMonitoring::TClusterStateResult& clusterStateResult);
5253
static const Ydb::Coordination::DescribeNodeResult& GetProto(const NYdb::NCoordination::TNodeDescription& describeNodeResult);
5354
static const Ydb::Import::ListObjectsInS3ExportResult& GetProto(const NYdb::NImport::TListObjectsInS3ExportResult& result);
5455

src/api/grpc/ydb_monitoring_v1.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ service MonitoringService {
1010
rpc SelfCheck(Monitoring.SelfCheckRequest) returns (Monitoring.SelfCheckResponse);
1111
// Checks current node health
1212
rpc NodeCheck(Monitoring.NodeCheckRequest) returns (Monitoring.NodeCheckResponse);
13+
// Get cluster state
14+
rpc ClusterState(Monitoring.ClusterStateRequest) returns (Monitoring.ClusterStateResponse);
1315
}

src/api/protos/ydb_monitoring.proto

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,3 +234,18 @@ message SelfCheckResult {
234234
repeated DatabaseStatus database_status = 3;
235235
LocationNode location = 4;
236236
}
237+
238+
message ClusterStateRequest {
239+
Ydb.Operations.OperationParams operation_params = 1; // basic operation params, including timeout
240+
uint32 duration_seconds = 2;
241+
uint32 period_seconds = 3;
242+
}
243+
244+
message ClusterStateResponse {
245+
// After successfull completion must contain ClusterStateResult.
246+
Ydb.Operations.Operation operation = 1;
247+
}
248+
249+
message ClusterStateResult {
250+
string result = 1;
251+
}

src/client/monitoring/monitoring.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,24 @@ class TSelfCheckResult::TImpl {
2222
Ydb::Monitoring::SelfCheckResult Result;
2323
};
2424

25+
class TClusterStateResult::TImpl {
26+
public:
27+
TImpl(Ydb::Monitoring::ClusterStateResult&& result)
28+
: Result(std::move(result))
29+
{}
30+
Ydb::Monitoring::ClusterStateResult Result;
31+
};
32+
2533
TSelfCheckResult::TSelfCheckResult(TStatus&& status, Ydb::Monitoring::SelfCheckResult&& result)
2634
: TStatus(std::move(status))
2735
, Impl_(std::make_shared<TSelfCheckResult::TImpl>(std::move(result)))
2836
{}
2937

38+
TClusterStateResult::TClusterStateResult(TStatus&& status, Ydb::Monitoring::ClusterStateResult&& result)
39+
: TStatus(std::move(status))
40+
, Impl_(std::make_shared<TClusterStateResult::TImpl>(std::move(result)))
41+
{}
42+
3043
class TMonitoringClient::TImpl : public TClientImplCommon<TMonitoringClient::TImpl> {
3144
public:
3245
TImpl(std::shared_ptr<TGRpcConnectionsImpl>&& connections, const TCommonClientSettings& settings)
@@ -87,6 +100,45 @@ class TMonitoringClient::TImpl : public TClientImplCommon<TMonitoringClient::TIm
87100

88101
return promise.GetFuture();
89102
}
103+
104+
TAsyncClusterStateResult ClusterState(const TClusterStateSettings& settings) {
105+
auto request = MakeOperationRequest<Ydb::Monitoring::ClusterStateRequest>(settings);
106+
107+
if (settings.DurationSeconds_) {
108+
request.set_duration_seconds(settings.DurationSeconds_.value());
109+
}
110+
111+
if (settings.PeriodSeconds_) {
112+
request.set_period_seconds(settings.PeriodSeconds_.value());
113+
}
114+
auto promise = NThreading::NewPromise<TClusterStateResult>();
115+
116+
auto extractor = [promise]
117+
(google::protobuf::Any* any, TPlainStatus status) mutable {
118+
Ydb::Monitoring::ClusterStateResult result;
119+
if (any) {
120+
any->UnpackTo(&result);
121+
}
122+
TClusterStateResult val(
123+
TStatus(std::move(status)),
124+
std::move(result));
125+
126+
promise.SetValue(std::move(val));
127+
};
128+
129+
using Ydb::Monitoring::ClusterStateRequest;
130+
using Ydb::Monitoring::ClusterStateResponse;
131+
132+
Connections_->RunDeferred<Ydb::Monitoring::V1::MonitoringService, ClusterStateRequest, ClusterStateResponse>(
133+
std::move(request),
134+
extractor,
135+
&Ydb::Monitoring::V1::MonitoringService::Stub::AsyncClusterState,
136+
DbDriverState_,
137+
INITIAL_DEFERRED_CALL_DELAY,
138+
TRpcRequestSettings::Make(settings));
139+
140+
return promise.GetFuture();
141+
}
90142
};
91143

92144
TMonitoringClient::TMonitoringClient(const TDriver& driver, const TCommonClientSettings& settings)
@@ -97,10 +149,17 @@ TAsyncSelfCheckResult TMonitoringClient::SelfCheck(const TSelfCheckSettings& set
97149
return Impl_->SelfCheck(settings);
98150
}
99151

152+
TAsyncClusterStateResult TMonitoringClient::ClusterState(const TClusterStateSettings& settings) {
153+
return Impl_->ClusterState(settings);
154+
}
155+
100156
}
101157

102158
const Ydb::Monitoring::SelfCheckResult& TProtoAccessor::GetProto(const NYdb::NMonitoring::TSelfCheckResult& selfCheckResult) {
103159
return selfCheckResult.Impl_->Result;
104160
}
105161

162+
const Ydb::Monitoring::ClusterStateResult& TProtoAccessor::GetProto(const NYdb::NMonitoring::TClusterStateResult& clusterStateResult) {
163+
return clusterStateResult.Impl_->Result;
164+
}
106165
}

0 commit comments

Comments
 (0)