Skip to content

Commit ba797d3

Browse files
committed
Render tenant memory details
1 parent 122f3c5 commit ba797d3

File tree

6 files changed

+86
-46
lines changed

6 files changed

+86
-46
lines changed

src/components/MemoryViewer/MemoryViewer.tsx

Lines changed: 40 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -40,23 +40,22 @@ export interface MemoryProgressViewerProps {
4040
stats: TMemoryStats;
4141
className?: string;
4242
warningThreshold?: number;
43-
value?: number | string;
44-
capacity?: number | string;
4543
formatValues: FormatProgressViewerValues;
4644
percents?: boolean;
4745
dangerThreshold?: number;
4846
}
4947

5048
export function MemoryViewer({
5149
stats,
52-
value,
53-
capacity,
5450
percents,
5551
formatValues,
5652
className,
5753
warningThreshold = 60,
5854
dangerThreshold = 80,
5955
}: MemoryProgressViewerProps) {
56+
const value = stats.AnonRss;
57+
const capacity = stats.HardLimit;
58+
6059
const theme = useTheme();
6160
let fillWidth =
6261
Math.round((parseFloat(String(value)) / parseFloat(String(capacity))) * 100) || 0;
@@ -100,39 +99,7 @@ export function MemoryViewer({
10099

101100
return (
102101
<HoverPopup
103-
popupContent={
104-
<DefinitionList responsive>
105-
{memorySegments.map(
106-
({label, value: segmentSize, capacity: segmentCapacity, key}) => (
107-
<DefinitionList.Item
108-
key={label}
109-
name={
110-
<div className={b('container')}>
111-
<div className={b('legend', {type: key})}></div>
112-
<div className={b('name')}>{label}</div>
113-
</div>
114-
}
115-
>
116-
{segmentCapacity ? (
117-
<ProgressViewer
118-
value={segmentSize}
119-
capacity={segmentCapacity}
120-
formatValues={formatDetailedValues}
121-
colorizeProgress
122-
/>
123-
) : (
124-
formatBytes({
125-
value: segmentSize,
126-
size: 'gb',
127-
withSizeLabel: true,
128-
precision: 2,
129-
})
130-
)}
131-
</DefinitionList.Item>
132-
),
133-
)}
134-
</DefinitionList>
135-
}
102+
popupContent={<MemoryViewerComponents stats={stats} formatValues={formatValues} />}
136103
>
137104
<div className={b({theme, status}, className)}>
138105
<div className={b('progress-container')}>
@@ -167,3 +134,39 @@ export function MemoryViewer({
167134
</HoverPopup>
168135
);
169136
}
137+
138+
export function MemoryViewerComponents({stats}: MemoryProgressViewerProps) {
139+
const memorySegments = getMemorySegments(stats);
140+
141+
return (
142+
<DefinitionList responsive>
143+
{memorySegments.map(({label, value: segmentSize, capacity: segmentCapacity, key}) => (
144+
<DefinitionList.Item
145+
key={label}
146+
name={
147+
<div className={b('container')}>
148+
<div className={b('legend', {type: key})}></div>
149+
<div className={b('name')}>{label}</div>
150+
</div>
151+
}
152+
>
153+
{segmentCapacity ? (
154+
<ProgressViewer
155+
value={segmentSize}
156+
capacity={segmentCapacity}
157+
formatValues={formatDetailedValues}
158+
colorizeProgress
159+
/>
160+
) : (
161+
formatBytes({
162+
value: segmentSize,
163+
size: 'gb',
164+
withSizeLabel: true,
165+
precision: 2,
166+
})
167+
)}
168+
</DefinitionList.Item>
169+
))}
170+
</DefinitionList>
171+
);
172+
}

src/components/nodesColumns/columns.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -163,12 +163,7 @@ export function getMemoryColumn<
163163
defaultOrder: DataTable.DESCENDING,
164164
render: ({row}) => {
165165
return row.MemoryStats ? (
166-
<MemoryViewer
167-
capacity={row.MemoryLimit}
168-
value={row.MemoryStats.AnonRss}
169-
formatValues={formatStorageValuesToGb}
170-
stats={row.MemoryStats}
171-
/>
166+
<MemoryViewer formatValues={formatStorageValuesToGb} stats={row.MemoryStats} />
172167
) : (
173168
<ProgressViewer
174169
value={row.MemoryUsed}

src/containers/Tenant/Diagnostics/TenantOverview/TenantMemory/TenantMemory.tsx

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,47 @@
11
import React from 'react';
22

3+
import {MemoryViewerComponents} from '../../../../../components/MemoryViewer/MemoryViewer';
4+
import {ProgressViewer} from '../../../../../components/ProgressViewer/ProgressViewer';
5+
import type {TMemoryStats} from '../../../../../types/api/nodes';
6+
import {formatStorageValuesToGb} from '../../../../../utils/dataFormatters/dataFormatters';
37
import {TenantDashboard} from '../TenantDashboard/TenantDashboard';
8+
import {b} from '../utils';
49

510
import {TopNodesByMemory} from './TopNodesByMemory';
611
import {memoryDashboardConfig} from './memoryDashboardConfig';
712

813
interface TenantMemoryProps {
914
tenantName: string;
15+
memoryStats?: TMemoryStats;
16+
memoryUsed?: string;
17+
memoryLimit?: string;
1018
}
1119

12-
export function TenantMemory({tenantName}: TenantMemoryProps) {
20+
export function TenantMemory({
21+
tenantName,
22+
memoryStats,
23+
memoryUsed,
24+
memoryLimit,
25+
}: TenantMemoryProps) {
1326
return (
1427
<React.Fragment>
1528
<TenantDashboard database={tenantName} charts={memoryDashboardConfig} />
29+
<div className={b('title')}>{'Memory details'}</div>
30+
<div className={b('memory-info')}>
31+
{memoryStats ? (
32+
<MemoryViewerComponents
33+
formatValues={formatStorageValuesToGb}
34+
stats={memoryStats}
35+
/>
36+
) : (
37+
<ProgressViewer
38+
value={memoryUsed}
39+
capacity={memoryLimit}
40+
formatValues={formatStorageValuesToGb}
41+
colorizeProgress={true}
42+
/>
43+
)}
44+
</div>
1645
<TopNodesByMemory tenantName={tenantName} />
1746
</React.Fragment>
1847
);

src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,9 @@
6363
&__storage-info {
6464
margin-bottom: 36px;
6565
}
66+
67+
&__memory-info {
68+
width: 400px;
69+
margin-bottom: 36px;
70+
}
6671
}

src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,14 @@ export function TenantOverview({
123123
return <TenantStorage tenantName={tenantName} metrics={storageMetrics} />;
124124
}
125125
case TENANT_METRICS_TABS_IDS.memory: {
126-
return <TenantMemory tenantName={tenantName} />;
126+
return (
127+
<TenantMemory
128+
tenantName={tenantName}
129+
memoryUsed={tenantData.MemoryUsed}
130+
memoryLimit={tenantData.MemoryLimit}
131+
memoryStats={tenantData.MemoryStats}
132+
/>
133+
);
127134
}
128135
case TENANT_METRICS_TABS_IDS.healthcheck: {
129136
return <HealthcheckDetails tenantName={tenantName} />;

src/types/api/tenant.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type {EFlag} from './enums';
2-
import type {TPoolStats, TSystemStateInfo} from './nodes';
2+
import type {TMemoryStats, TPoolStats, TSystemStateInfo} from './nodes';
33
import type {TTabletStateInfo} from './tablet';
44

55
/**
@@ -50,6 +50,7 @@ export interface TTenant {
5050
MemoryUsed?: string; // Actual memory consumption
5151
/** uint64 */
5252
MemoryLimit?: string;
53+
MemoryStats?: TMemoryStats;
5354
/** double */
5455
CoresUsed?: number; // Actual cpu consumption
5556
/** uint64 */

0 commit comments

Comments
 (0)