@@ -28,6 +28,7 @@ enum class ENodeFields : ui8 {
28
28
Version,
29
29
Uptime,
30
30
Memory,
31
+ MemoryDetailed,
31
32
CPU,
32
33
LoadAverage,
33
34
Missing,
@@ -586,6 +587,7 @@ class TJsonNodes : public TViewerPipeClient {
586
587
{ ENodeFields::LoadAverage, TFieldsType ().set (+ENodeFields::SystemState) },
587
588
{ ENodeFields::Database, TFieldsType ().set (+ENodeFields::SystemState) },
588
589
{ ENodeFields::Missing, TFieldsType ().set (+ENodeFields::PDisks) },
590
+ { ENodeFields::MemoryDetailed, TFieldsType ().set (+ENodeFields::SystemState) },
589
591
};
590
592
591
593
bool FieldsNeeded (TFieldsType fields) const {
@@ -634,6 +636,8 @@ class TJsonNodes : public TViewerPipeClient {
634
636
result = ENodeFields::Uptime;
635
637
} else if (field == " Memory" ) {
636
638
result = ENodeFields::Memory;
639
+ } else if (field == " MemoryDetailed" ) {
640
+ result = ENodeFields::MemoryDetailed;
637
641
} else if (field == " CPU" ) {
638
642
result = ENodeFields::CPU;
639
643
} else if (field == " LoadAverage" ) {
@@ -1116,6 +1120,7 @@ class TJsonNodes : public TViewerPipeClient {
1116
1120
case ENodeFields::SubDomainKey:
1117
1121
case ENodeFields::COUNT:
1118
1122
case ENodeFields::Memory:
1123
+ case ENodeFields::MemoryDetailed:
1119
1124
case ENodeFields::CPU:
1120
1125
case ENodeFields::LoadAverage:
1121
1126
case ENodeFields::DisconnectTime:
@@ -1157,6 +1162,7 @@ class TJsonNodes : public TViewerPipeClient {
1157
1162
NeedSort = false ;
1158
1163
break ;
1159
1164
case ENodeFields::Memory:
1165
+ case ENodeFields::MemoryDetailed:
1160
1166
SortCollection (NodeView, [](const TNode* node) { return node->SystemState .GetMemoryUsed (); }, ReverseSort);
1161
1167
NeedSort = false ;
1162
1168
break ;
@@ -1709,6 +1715,20 @@ class TJsonNodes : public TViewerPipeClient {
1709
1715
}
1710
1716
}
1711
1717
1718
+ template <>
1719
+ void InitWhiteboardRequest (NKikimrWhiteboard::TEvSystemStateRequest* request) {
1720
+ if (AllWhiteboardFields) {
1721
+ request->AddFieldsRequired (-1 );
1722
+ } else {
1723
+ for (auto field : {1 , 2 , 4 , 5 , 6 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 30 , 31 , 36 , 37 }) { // node_whiteboard.proto
1724
+ request->AddFieldsRequired (field);
1725
+ }
1726
+ if (FieldsRequired.test (+ENodeFields::MemoryDetailed)) {
1727
+ request->AddFieldsRequired (38 );
1728
+ }
1729
+ }
1730
+ }
1731
+
1712
1732
void SendWhiteboardSystemAndTabletsBatch (TNodeBatch& batch) {
1713
1733
TNodeId nodeId = OffloadMerge ? batch.ChooseNodeId () : 0 ;
1714
1734
if (batch.HasStaticNodes && (FieldsNeeded (FieldsVDisks) || FieldsNeeded (FieldsPDisks))) {
@@ -1798,6 +1818,7 @@ class TJsonNodes : public TViewerPipeClient {
1798
1818
void ProcessWhiteboard () {
1799
1819
if (FieldsNeeded (FieldsSystemState)) {
1800
1820
TInstant now = TInstant::Now ();
1821
+ bool hasMemoryDetailed = false ;
1801
1822
std::unordered_set<TNodeId> removeNodes;
1802
1823
for (const auto & [responseNodeId, response] : SystemViewerResponse) {
1803
1824
if (response.IsOk ()) {
@@ -1818,6 +1839,7 @@ class TJsonNodes : public TViewerPipeClient {
1818
1839
}
1819
1840
}
1820
1841
}
1842
+ hasMemoryDetailed |= systemInfo.HasMemoryStats ();
1821
1843
}
1822
1844
for (auto nodeId : nodesWithoutData) {
1823
1845
TNode* node = FindNode (nodeId);
@@ -1845,6 +1867,7 @@ class TJsonNodes : public TViewerPipeClient {
1845
1867
}
1846
1868
}
1847
1869
}
1870
+ hasMemoryDetailed |= systemState.GetSystemStateInfo (0 ).HasMemoryStats ();
1848
1871
}
1849
1872
} else {
1850
1873
TNode* node = FindNode (nodeId);
@@ -1860,6 +1883,9 @@ class TJsonNodes : public TViewerPipeClient {
1860
1883
}
1861
1884
FieldsAvailable |= FieldsSystemState;
1862
1885
FieldsAvailable.set (+ENodeFields::Database);
1886
+ if (hasMemoryDetailed) {
1887
+ FieldsAvailable.set (+ENodeFields::MemoryDetailed);
1888
+ }
1863
1889
}
1864
1890
if (FieldsNeeded (FieldsTablets)) {
1865
1891
for (auto & [nodeId, response] : TabletViewerResponse) {
@@ -2477,7 +2503,7 @@ class TJsonNodes : public TViewerPipeClient {
2477
2503
* `Rack`
2478
2504
* `Version`
2479
2505
* `Uptime`
2480
- * `Memory`
2506
+ * `Memory` / `MemoryDetailed`
2481
2507
* `CPU`
2482
2508
* `LoadAverage`
2483
2509
* `Missing`
@@ -2538,6 +2564,7 @@ class TJsonNodes : public TViewerPipeClient {
2538
2564
* `Version`
2539
2565
* `Uptime`
2540
2566
* `Memory`
2567
+ * `MemoryDetailed`
2541
2568
* `CPU`
2542
2569
* `LoadAverage`
2543
2570
* `Missing`
0 commit comments