Skip to content

Commit 122f3c5

Browse files
refactor: rework columns group by and sorting (#1614)
1 parent 3e07ca5 commit 122f3c5

File tree

16 files changed

+224
-152
lines changed

16 files changed

+224
-152
lines changed

src/components/nodesColumns/columns.tsx

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -154,25 +154,6 @@ export function getRAMColumn<T extends {MemoryUsed?: string; MemoryLimit?: strin
154154
resizeMinWidth: 40,
155155
};
156156
}
157-
export function getSharedCacheUsageColumn<
158-
T extends {SharedCacheUsed?: string | number; SharedCacheLimit?: string | number},
159-
>(): Column<T> {
160-
return {
161-
name: NODES_COLUMNS_IDS.SharedCacheUsage,
162-
header: NODES_COLUMNS_TITLES.SharedCacheUsage,
163-
render: ({row}) => (
164-
<ProgressViewer
165-
value={row.SharedCacheUsed}
166-
capacity={row.SharedCacheLimit}
167-
formatValues={formatStorageValuesToGb}
168-
colorizeProgress={true}
169-
/>
170-
),
171-
align: DataTable.LEFT,
172-
width: 170,
173-
resizeMinWidth: 170,
174-
};
175-
}
176157
export function getMemoryColumn<
177158
T extends {MemoryStats?: TMemoryStats; MemoryUsed?: string; MemoryLimit?: string},
178159
>(): Column<T> {

src/components/nodesColumns/constants.ts

Lines changed: 83 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type {NodesRequiredField} from '../../types/api/nodes';
1+
import type {NodesGroupByField, NodesRequiredField, NodesSortValue} from '../../types/api/nodes';
22
import type {ValueOf} from '../../types/common';
33

44
import i18n from './i18n';
@@ -7,7 +7,6 @@ export const NODES_COLUMNS_WIDTH_LS_KEY = 'nodesTableColumnsWidth';
77

88
export const NODES_COLUMNS_IDS = {
99
NodeId: 'NodeId',
10-
SystemState: 'SystemState',
1110
Host: 'Host',
1211
Database: 'Database',
1312
NodeName: 'NodeName',
@@ -22,7 +21,6 @@ export const NODES_COLUMNS_IDS = {
2221
LoadAverage: 'LoadAverage',
2322
Load: 'Load',
2423
DiskSpaceUsage: 'DiskSpaceUsage',
25-
SharedCacheUsage: 'SharedCacheUsage',
2624
TotalSessions: 'TotalSessions',
2725
Missing: 'Missing',
2826
Tablets: 'Tablets',
@@ -37,9 +35,6 @@ export const NODES_COLUMNS_TITLES = {
3735
get NodeId() {
3836
return i18n('node-id');
3937
},
40-
get SystemState() {
41-
return i18n('system-state');
42-
},
4338
get Host() {
4439
return i18n('host');
4540
},
@@ -82,9 +77,6 @@ export const NODES_COLUMNS_TITLES = {
8277
get DiskSpaceUsage() {
8378
return i18n('disk-usage');
8479
},
85-
get SharedCacheUsage() {
86-
return i18n('caches');
87-
},
8880
get TotalSessions() {
8981
return i18n('sessions');
9082
},
@@ -99,11 +91,62 @@ export const NODES_COLUMNS_TITLES = {
9991
},
10092
} as const satisfies Record<NodesColumnId, string>;
10193

94+
const NODES_COLUMNS_GROUP_BY_TITLES = {
95+
get NodeId() {
96+
return i18n('node-id');
97+
},
98+
get Host() {
99+
return i18n('host');
100+
},
101+
get NodeName() {
102+
return i18n('node-name');
103+
},
104+
get Database() {
105+
return i18n('database');
106+
},
107+
get DiskSpaceUsage() {
108+
return i18n('disk-usage');
109+
},
110+
get DC() {
111+
return i18n('dc');
112+
},
113+
get Rack() {
114+
return i18n('rack');
115+
},
116+
get Missing() {
117+
return i18n('missing');
118+
},
119+
get Uptime() {
120+
return i18n('uptime');
121+
},
122+
get Version() {
123+
return i18n('version');
124+
},
125+
get SystemState() {
126+
return i18n('system-state');
127+
},
128+
get ConnectStatus() {
129+
return i18n('connect-status');
130+
},
131+
get NetworkUtilization() {
132+
return i18n('network-utilization');
133+
},
134+
get ClockSkew() {
135+
return i18n('clock-skew');
136+
},
137+
get PingTime() {
138+
return i18n('ping-time');
139+
},
140+
} as const satisfies Record<NodesGroupByField, string>;
141+
142+
export function getNodesGroupByFieldTitle(groupByField: NodesGroupByField) {
143+
return NODES_COLUMNS_GROUP_BY_TITLES[groupByField];
144+
}
145+
102146
// Although columns ids mostly similar to backend fields, there might be some difference
103147
// Also for some columns we may use more than one field
104148
export const NODES_COLUMNS_TO_DATA_FIELDS: Record<NodesColumnId, NodesRequiredField[]> = {
105149
NodeId: ['NodeId'],
106-
SystemState: ['SystemState'],
107150
Host: ['Host', 'Rack', 'Database', 'SystemState'],
108151
Database: ['Database'],
109152
NodeName: ['NodeName'],
@@ -118,9 +161,38 @@ export const NODES_COLUMNS_TO_DATA_FIELDS: Record<NodesColumnId, NodesRequiredFi
118161
LoadAverage: ['LoadAverage'],
119162
Load: ['LoadAverage'],
120163
DiskSpaceUsage: ['DiskSpaceUsage'],
121-
SharedCacheUsage: ['SystemState'],
122164
TotalSessions: ['SystemState'],
123165
Missing: ['Missing'],
124166
Tablets: ['Tablets', 'Database'],
125167
PDisks: ['PDisks'],
126168
};
169+
170+
const NODES_COLUMNS_TO_SORT_FIELDS: Record<NodesColumnId, NodesSortValue | undefined> = {
171+
NodeId: 'NodeId',
172+
Host: 'Host',
173+
Database: 'Database',
174+
NodeName: 'NodeName',
175+
DC: 'DC',
176+
Rack: 'Rack',
177+
Version: 'Version',
178+
Uptime: 'Uptime',
179+
Memory: 'Memory',
180+
RAM: 'Memory',
181+
CPU: 'CPU',
182+
Pools: 'CPU',
183+
LoadAverage: 'LoadAverage',
184+
Load: 'LoadAverage',
185+
DiskSpaceUsage: 'DiskSpaceUsage',
186+
TotalSessions: undefined,
187+
Missing: 'Missing',
188+
Tablets: undefined,
189+
PDisks: undefined,
190+
};
191+
192+
export function getNodesColumnSortField(columnId?: string) {
193+
return NODES_COLUMNS_TO_SORT_FIELDS[columnId as NodesColumnId];
194+
}
195+
196+
export function isSortableNodesColumn(columnId: string) {
197+
return Boolean(getNodesColumnSortField(columnId));
198+
}
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{
22
"node-id": "Node ID",
3-
"system-state": "System State",
43
"host": "Host",
54
"database": "Database",
65
"node-name": "Node Name",
@@ -12,14 +11,20 @@
1211
"ram": "RAM",
1312
"cpu": "CPU",
1413
"pools": "Pools",
15-
"disk-usage": "Disk usage",
14+
"disk-usage": "Disk Usage",
1615
"tablets": "Tablets",
1716
"load-average": "Load Average",
1817
"load": "Load",
19-
"caches": "Caches",
2018
"sessions": "Sessions",
2119
"missing": "Missing",
2220
"pdisks": "PDisks",
21+
2322
"field_memory-used": "Memory used",
24-
"field_memory-limit": "Memory limit"
23+
"field_memory-limit": "Memory limit",
24+
25+
"system-state": "System State",
26+
"connect-status": "Connect Status",
27+
"network-utilization": "Network Utilization",
28+
"clock-skew": "Clock Skew",
29+
"ping-time": "Ping Time"
2530
}

src/containers/Nodes/columns/columns.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ import {
1313
getUptimeColumn,
1414
getVersionColumn,
1515
} from '../../../components/nodesColumns/columns';
16+
import {isSortableNodesColumn} from '../../../components/nodesColumns/constants';
1617
import type {GetNodesColumnsParams} from '../../../components/nodesColumns/types';
1718
import type {NodesPreparedEntity} from '../../../store/reducers/nodes/types';
18-
import {isSortableNodesProperty} from '../../../utils/nodes';
1919
import type {Column} from '../../../utils/tableUtils/types';
2020

2121
export function getNodesColumns(params: GetNodesColumnsParams): Column<NodesPreparedEntity>[] {
@@ -36,6 +36,6 @@ export function getNodesColumns(params: GetNodesColumnsParams): Column<NodesPrep
3636
];
3737

3838
return columns.map((column) => {
39-
return {...column, sortable: isSortableNodesProperty(column.name)};
39+
return {...column, sortable: isSortableNodesColumn(column.name)};
4040
});
4141
}

src/containers/Nodes/columns/constants.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type {SelectOption} from '@gravity-ui/uikit';
22

3-
import {NODES_COLUMNS_TITLES} from '../../../components/nodesColumns/constants';
3+
import {getNodesGroupByFieldTitle} from '../../../components/nodesColumns/constants';
44
import type {NodesColumnId} from '../../../components/nodesColumns/constants';
55
import type {NodesGroupByField} from '../../../types/api/nodes';
66

@@ -43,7 +43,7 @@ export function getNodesGroupByOptions(withSystemStateGroupBy?: boolean): Select
4343
return getAvailableNodesGroupByParams(withSystemStateGroupBy).map((param) => {
4444
return {
4545
value: param,
46-
content: NODES_COLUMNS_TITLES[param],
46+
content: getNodesGroupByFieldTitle(param),
4747
};
4848
});
4949
}

src/containers/Nodes/getNodes.ts

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import type {FetchData} from '../../components/PaginatedTable';
2-
import {NODES_COLUMNS_TO_DATA_FIELDS} from '../../components/nodesColumns/constants';
2+
import {
3+
NODES_COLUMNS_TO_DATA_FIELDS,
4+
getNodesColumnSortField,
5+
} from '../../components/nodesColumns/constants';
36
import type {NodesFilters, NodesPreparedEntity} from '../../store/reducers/nodes/types';
47
import {prepareNodesData} from '../../store/reducers/nodes/utils';
58
import type {NodesRequestParams} from '../../types/api/nodes';
69
import {prepareSortValue} from '../../utils/filters';
7-
import {
8-
NODES_SORT_VALUE_TO_FIELD,
9-
getProblemParamValue,
10-
getUptimeParamValue,
11-
isSortableNodesProperty,
12-
} from '../../utils/nodes';
10+
import {getProblemParamValue, getUptimeParamValue} from '../../utils/nodes';
1311
import {getRequiredDataFields} from '../../utils/tableUtils/getRequiredDataFields';
1412

1513
export const getNodes: FetchData<
@@ -32,9 +30,8 @@ export const getNodes: FetchData<
3230
const {path, database, searchValue, problemFilter, uptimeFilter, filterGroup, filterGroupBy} =
3331
filters ?? {};
3432

35-
const sort = isSortableNodesProperty(columnId)
36-
? prepareSortValue(NODES_SORT_VALUE_TO_FIELD[columnId], sortOrder)
37-
: undefined;
33+
const sortField = getNodesColumnSortField(columnId);
34+
const sort = sortField ? prepareSortValue(sortField, sortOrder) : undefined;
3835

3936
const dataFieldsRequired = getRequiredDataFields(columnsIds, NODES_COLUMNS_TO_DATA_FIELDS);
4037

src/containers/Storage/StorageGroups/columns/columns.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,18 @@ import {valueIsDefined} from '../../../../utils';
1414
import {cn} from '../../../../utils/cn';
1515
import {EMPTY_DATA_PLACEHOLDER} from '../../../../utils/constants';
1616
import {formatNumber} from '../../../../utils/dataFormatters/dataFormatters';
17-
import {getSpaceUsageSeverity, isSortableStorageProperty} from '../../../../utils/storage';
17+
import {getSpaceUsageSeverity} from '../../../../utils/storage';
1818
import {formatToMs} from '../../../../utils/timeParsers';
1919
import {bytesToGB, bytesToSpeed} from '../../../../utils/utils';
2020
import {Disks} from '../../Disks/Disks';
2121
import {getDegradedSeverity, isVdiskActive} from '../../utils';
2222
import i18n from '../i18n';
2323

24-
import {STORAGE_GROUPS_COLUMNS_IDS, STORAGE_GROUPS_COLUMNS_TITLES} from './constants';
24+
import {
25+
STORAGE_GROUPS_COLUMNS_IDS,
26+
STORAGE_GROUPS_COLUMNS_TITLES,
27+
isSortableStorageGroupsColumn,
28+
} from './constants';
2529
import type {GetStorageColumnsData, StorageColumnsGetter, StorageGroupsColumn} from './types';
2630

2731
import './StorageGroupsColumns.scss';
@@ -297,6 +301,6 @@ export const getStorageGroupsColumns: StorageColumnsGetter = (data) => {
297301

298302
return columns.map((column) => ({
299303
...column,
300-
sortable: isSortableStorageProperty(column.name),
304+
sortable: isSortableStorageGroupsColumn(column.name),
301305
}));
302306
};

0 commit comments

Comments
 (0)