Skip to content

Commit 50cf352

Browse files
authored
add more sort options for nodes handler (#9481)
1 parent 467adcd commit 50cf352

File tree

2 files changed

+68
-10
lines changed

2 files changed

+68
-10
lines changed

ydb/core/viewer/json_handlers_viewer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ void InitViewerHealthCheckJsonHandler(TJsonHandlers& handlers) {
243243
}
244244

245245
void InitViewerNodesJsonHandler(TJsonHandlers& handlers) {
246-
handlers.AddHandler("/viewer/nodes", new TJsonHandler<TJsonNodes>(TJsonNodes::GetSwagger()), 3);
246+
handlers.AddHandler("/viewer/nodes", new TJsonHandler<TJsonNodes>(TJsonNodes::GetSwagger()), 4);
247247
}
248248

249249
void InitViewerACLJsonHandler(TJsonHandlers &jsonHandlers) {

ydb/core/viewer/viewer_nodes.h

Lines changed: 67 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ class TJsonNodes : public TViewerPipeClient {
155155
TString Database;
156156
ui32 MissingDisks = 0;
157157
float DiskSpaceUsage = 0; // the highest
158+
float CpuUsage = 0; // total, normalized
159+
float LoadAverage = 0; // normalized
158160
bool Problems = false;
159161
bool Connected = false;
160162
bool Disconnected = false;
@@ -252,6 +254,22 @@ class TJsonNodes : public TViewerPipeClient {
252254
}
253255
}
254256

257+
void CalcCpuUsage() {
258+
float usage = 0;
259+
int threads = 0;
260+
for (const auto& pool : SystemState.GetPoolStats()) {
261+
usage += pool.GetUsage() * pool.GetThreads();
262+
threads += pool.GetThreads();
263+
}
264+
CpuUsage = usage / threads;
265+
}
266+
267+
void CalcLoadAverage() {
268+
if (SystemState.GetNumberOfCpus() && SystemState.LoadAverageSize() > 0) {
269+
LoadAverage = SystemState.GetLoadAverage(0) / SystemState.GetNumberOfCpus();
270+
}
271+
}
272+
255273
void DisconnectNode() {
256274
Problems = true;
257275
Disconnected = true;
@@ -434,6 +452,14 @@ class TJsonNodes : public TViewerPipeClient {
434452
return {};
435453
}
436454
}
455+
456+
void MergeFrom(const NKikimrWhiteboard::TSystemStateInfo& systemState) {
457+
SystemState.MergeFrom(systemState);
458+
Cleanup();
459+
CalcDatabase();
460+
CalcCpuUsage();
461+
CalcLoadAverage();
462+
}
437463
};
438464

439465
struct TNodeGroup {
@@ -494,6 +520,10 @@ class TJsonNodes : public TViewerPipeClient {
494520
{ ENodeFields::Uptime, TFieldsType().set(+ENodeFields::SystemState) },
495521
{ ENodeFields::Version, TFieldsType().set(+ENodeFields::SystemState) },
496522
{ ENodeFields::NodeName, TFieldsType().set(+ENodeFields::SystemState) },
523+
{ ENodeFields::CPU, TFieldsType().set(+ENodeFields::SystemState) },
524+
{ ENodeFields::Memory, TFieldsType().set(+ENodeFields::SystemState) },
525+
{ ENodeFields::LoadAverage, TFieldsType().set(+ENodeFields::SystemState) },
526+
{ ENodeFields::Database, TFieldsType().set(+ENodeFields::SystemState) },
497527
{ ENodeFields::Missing, TFieldsType().set(+ENodeFields::PDisks) },
498528
};
499529

@@ -996,43 +1026,69 @@ class TJsonNodes : public TViewerPipeClient {
9961026
switch (SortBy) {
9971027
case ENodeFields::NodeId:
9981028
SortCollection(NodeView, [](const TNode* node) { return node->GetNodeId(); }, ReverseSort);
1029+
NeedSort = false;
9991030
break;
10001031
case ENodeFields::HostName:
10011032
SortCollection(NodeView, [](const TNode* node) { return node->GetHostName(); }, ReverseSort);
1033+
NeedSort = false;
10021034
break;
10031035
case ENodeFields::NodeName:
10041036
SortCollection(NodeView, [](const TNode* node) { return node->GetNodeName(); }, ReverseSort);
1037+
NeedSort = false;
10051038
break;
10061039
case ENodeFields::DC:
10071040
SortCollection(NodeView, [](const TNode* node) { return node->NodeInfo.Location.GetDataCenterId(); }, ReverseSort);
1041+
NeedSort = false;
10081042
break;
10091043
case ENodeFields::Rack:
10101044
SortCollection(NodeView, [](const TNode* node) { return node->NodeInfo.Location.GetRackId(); }, ReverseSort);
1045+
NeedSort = false;
10111046
break;
10121047
case ENodeFields::Version:
10131048
SortCollection(NodeView, [](const TNode* node) { return node->SystemState.GetVersion(); }, ReverseSort);
1049+
NeedSort = false;
10141050
break;
10151051
case ENodeFields::Uptime:
10161052
SortCollection(NodeView, [](const TNode* node) { return node->SystemState.GetStartTime(); }, ReverseSort);
1053+
NeedSort = false;
10171054
break;
10181055
case ENodeFields::Memory:
1056+
SortCollection(NodeView, [](const TNode* node) { return node->SystemState.GetMemoryUsed(); }, ReverseSort);
1057+
NeedSort = false;
1058+
break;
10191059
case ENodeFields::CPU:
1060+
SortCollection(NodeView, [](const TNode* node) { return node->CpuUsage; }, ReverseSort);
1061+
NeedSort = false;
1062+
break;
10201063
case ENodeFields::LoadAverage:
1064+
SortCollection(NodeView, [](const TNode* node) { return node->LoadAverage; }, ReverseSort);
1065+
NeedSort = false;
1066+
break;
10211067
case ENodeFields::Missing:
1068+
SortCollection(NodeView, [](const TNode* node) { return node->MissingDisks; }, ReverseSort);
1069+
NeedSort = false;
1070+
break;
10221071
case ENodeFields::DiskSpaceUsage:
1072+
SortCollection(NodeView, [](const TNode* node) { return node->DiskSpaceUsage; }, ReverseSort);
1073+
NeedSort = false;
1074+
break;
1075+
case ENodeFields::Database:
1076+
SortCollection(NodeView, [](const TNode* node) { return node->Database; }, ReverseSort);
1077+
NeedSort = false;
1078+
break;
10231079
case ENodeFields::NodeInfo:
10241080
case ENodeFields::SystemState:
10251081
case ENodeFields::PDisks:
10261082
case ENodeFields::VDisks:
10271083
case ENodeFields::Tablets:
10281084
case ENodeFields::SubDomainKey:
1029-
case ENodeFields::Database:
10301085
case ENodeFields::DisconnectTime:
10311086
case ENodeFields::COUNT:
10321087
break;
10331088
}
1034-
NeedSort = false;
1035-
InvalidateNodes();
1089+
if (!NeedSort) {
1090+
InvalidateNodes();
1091+
}
10361092
}
10371093
}
10381094

@@ -1637,9 +1693,7 @@ class TJsonNodes : public TViewerPipeClient {
16371693
TNodeId nodeId = systemInfo.GetNodeId();
16381694
TNode* node = FindNode(nodeId);
16391695
if (node) {
1640-
node->SystemState.MergeFrom(systemInfo);
1641-
node->Cleanup();
1642-
node->CalcDatabase();
1696+
node->MergeFrom(systemInfo);
16431697
if (Database && node->Database) {
16441698
if (node->Database != Database && (!SharedDatabase || node->Database != SharedDatabase)) {
16451699
removeNodes.insert(nodeId);
@@ -1655,9 +1709,7 @@ class TJsonNodes : public TViewerPipeClient {
16551709
if (systemState.SystemStateInfoSize() > 0) {
16561710
TNode* node = FindNode(nodeId);
16571711
if (node) {
1658-
node->SystemState.MergeFrom(systemState.GetSystemStateInfo(0));
1659-
node->Cleanup();
1660-
node->CalcDatabase();
1712+
node->MergeFrom(systemState.GetSystemStateInfo(0));
16611713
if (Database && node->Database) {
16621714
if (node->Database != Database && (!SharedDatabase || node->Database != SharedDatabase)) {
16631715
removeNodes.insert(nodeId);
@@ -2260,6 +2312,12 @@ class TJsonNodes : public TViewerPipeClient {
22602312
* `Rack`
22612313
* `Version`
22622314
* `Uptime`
2315+
* `Memory`
2316+
* `CPU`
2317+
* `LoadAverage`
2318+
* `Missing`
2319+
* `DiskSpaceUsage`
2320+
* `Database`
22632321
required: false
22642322
type: string
22652323
- name: group

0 commit comments

Comments
 (0)