Skip to content

Commit 6379577

Browse files
feat(TenantOverview): add columns to memory table (#593)
1 parent eb3592d commit 6379577

File tree

4 files changed

+98
-14
lines changed

4 files changed

+98
-14
lines changed

src/containers/Nodes/getNodesColumns.tsx

Lines changed: 57 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ const NODES_COLUMNS_IDS = {
2828
Tablets: 'Tablets',
2929
TopNodesLoadAverage: 'TopNodesLoadAverage',
3030
TopNodesMemory: 'TopNodesMemory',
31+
SharedCacheUsage: 'SharedCacheUsage',
32+
MemoryUsedInAlloc: 'MemoryUsedInAlloc',
33+
TotalSessions: 'TotalSessions',
3134
};
3235

3336
interface GetNodesColumnsProps {
@@ -184,23 +187,61 @@ const topNodesLoadAverageColumn: NodesColumn = {
184187

185188
const topNodesMemoryColumn: NodesColumn = {
186189
name: NODES_COLUMNS_IDS.TopNodesMemory,
187-
header: 'Memory',
188-
render: ({row}) =>
189-
row.MemoryUsed ? (
190-
<ProgressViewer
191-
value={row.MemoryUsed}
192-
capacity={row.MemoryLimit}
193-
formatValues={formatStorageValuesToGb}
194-
colorizeProgress={true}
195-
/>
196-
) : (
197-
'—'
198-
),
190+
header: 'Process',
191+
render: ({row}) => (
192+
<ProgressViewer
193+
value={row.MemoryUsed}
194+
capacity={row.MemoryLimit}
195+
formatValues={formatStorageValuesToGb}
196+
colorizeProgress={true}
197+
/>
198+
),
199+
align: DataTable.LEFT,
200+
width: 140,
201+
sortable: false,
202+
};
203+
204+
const sharedCacheUsageColumn: NodesColumn = {
205+
name: NODES_COLUMNS_IDS.SharedCacheUsage,
206+
header: 'Tablet Cache',
207+
render: ({row}) => (
208+
<ProgressViewer
209+
value={row.SharedCacheUsed}
210+
capacity={row.SharedCacheLimit}
211+
formatValues={formatStorageValuesToGb}
212+
colorizeProgress={true}
213+
/>
214+
),
215+
align: DataTable.LEFT,
216+
width: 140,
217+
sortable: false,
218+
};
219+
220+
const memoryUsedInAllocColumn: NodesColumn = {
221+
name: NODES_COLUMNS_IDS.MemoryUsedInAlloc,
222+
header: 'Query Runtime',
223+
render: ({row}) => (
224+
<ProgressViewer
225+
value={row.MemoryUsedInAlloc}
226+
capacity={row.MemoryLimit}
227+
formatValues={formatStorageValuesToGb}
228+
colorizeProgress={true}
229+
/>
230+
),
199231
align: DataTable.LEFT,
200232
width: 140,
201233
sortable: false,
202234
};
203235

236+
const sessionsColumn: NodesColumn = {
237+
name: NODES_COLUMNS_IDS.TotalSessions,
238+
header: 'Sessions',
239+
render: ({row}) => row.TotalSessions ?? '—',
240+
align: DataTable.RIGHT,
241+
width: 100,
242+
sortable: false,
243+
};
244+
204245
export function getNodesColumns({tabletsPath, getNodeRef}: GetNodesColumnsProps): NodesColumn[] {
205246
return [
206247
nodeIdColumn,
@@ -241,8 +282,11 @@ export function getTopNodesByMemoryColumns({
241282
nodeIdColumn,
242283
getHostColumn(getNodeRef),
243284
uptimeColumn,
244-
topNodesMemoryColumn,
245285
topNodesLoadAverageColumn,
286+
topNodesMemoryColumn,
287+
sharedCacheUsageColumn,
288+
memoryUsedInAllocColumn,
289+
sessionsColumn,
246290
getTabletsColumn(tabletsPath),
247291
];
248292
}

src/store/reducers/nodes/types.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,25 @@ export interface NodesPreparedEntity {
3030
DataCenter?: string;
3131
Rack?: string;
3232
Version?: string;
33+
TenantName?: string;
34+
3335
StartTime?: string;
3436
Uptime: string;
37+
DisconnectTime?: string;
38+
3539
MemoryUsed?: string;
40+
MemoryUsedInAlloc?: string;
3641
MemoryLimit?: string;
42+
43+
SharedCacheUsed?: string;
44+
SharedCacheLimit?: string | number;
45+
3746
PoolStats?: TPoolStats[];
3847
LoadAverage?: number[];
3948
Tablets?: TFullTabletStateInfo[] | TComputeTabletStateInfo[];
40-
TenantName?: string;
4149
Endpoints?: TEndpoint[];
50+
51+
TotalSessions?: number;
4252
}
4353

4454
export interface NodesState {

src/store/reducers/nodes/utils.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,18 @@ export const prepareNodesData = (data: TNodesInfo): NodesHandledResponse => {
5050
const rawNodes = data.Nodes || [];
5151

5252
const preparedNodes = rawNodes.map((node) => {
53+
// 0 limit means that limit is not set, so it should be undefined
54+
const sharedCacheLimit = Number(node.SystemState.SharedCacheStats?.LimitBytes) || undefined;
55+
5356
return {
5457
...node.SystemState,
5558
Tablets: node.Tablets,
5659
NodeId: node.NodeId,
5760
Uptime: calcUptime(node.SystemState?.StartTime),
5861
TenantName: node.SystemState?.Tenants?.[0],
62+
63+
SharedCacheUsed: node.SystemState.SharedCacheStats?.UsedBytes,
64+
SharedCacheLimit: sharedCacheLimit,
5965
};
6066
});
6167

src/types/api/nodes.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ export interface TNodeInfo {
2626
Tablets?: TTabletStateInfo[];
2727
}
2828

29+
/**
30+
* source: https://github.com/ydb-platform/ydb/blob/main/ydb/core/protos/node_whiteboard.proto
31+
*/
2932
export interface TSystemStateInfo {
3033
/** uint64 */
3134
StartTime?: string;
@@ -62,6 +65,20 @@ export interface TSystemStateInfo {
6265
/** double */
6366
MaxDiskUsage?: number;
6467
Location?: TNodeLocation;
68+
69+
/**
70+
* int64
71+
*
72+
* a positive value means the peer is ahead in time; a negative value means it's behind
73+
*/
74+
MaxClockSkewWithPeerUs?: string;
75+
MaxClockSkewPeerId?: number;
76+
77+
/** uint64 */
78+
DisconnectTime?: string;
79+
80+
SharedCacheStats?: TNodeSharedCache;
81+
TotalSessions?: number;
6582
}
6683

6784
export interface TPoolStats {
@@ -97,6 +114,13 @@ interface TNodeLocation {
97114
Unit?: string;
98115
}
99116

117+
interface TNodeSharedCache {
118+
/** uint64 */
119+
UsedBytes: string;
120+
/** uint64 */
121+
LimitBytes: string;
122+
}
123+
100124
enum EConfigState {
101125
'Consistent' = 'Consistent',
102126
'Outdated' = 'Outdated',

0 commit comments

Comments
 (0)