Skip to content

Commit 314268b

Browse files
Fix cluster nodes to use exported getPDisksColumn and prepareStorageNodesResponse
Co-authored-by: artemmufazalov <[email protected]>
1 parent f4a2b10 commit 314268b

File tree

8 files changed

+62
-96
lines changed

8 files changed

+62
-96
lines changed

src/containers/Nodes/Nodes.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
} from '../../components/nodesColumns/constants';
99
import type {NodesColumnId} from '../../components/nodesColumns/constants';
1010
import {useBridgeModeEnabled} from '../../store/reducers/capabilities/hooks';
11-
import type {NodesPreparedEntity} from '../../store/reducers/nodes/types';
11+
import type {PreparedStorageNode} from '../../store/reducers/storage/types';
1212
import type {AdditionalNodesProps} from '../../types/additionalProps';
1313
import type {NodesGroupByField} from '../../types/api/nodes';
1414
import {
@@ -33,7 +33,7 @@ export interface NodesProps {
3333
scrollContainerRef: React.RefObject<HTMLElement>;
3434
additionalNodesProps?: AdditionalNodesProps;
3535
withPeerRoleFilter?: boolean;
36-
columns?: Column<NodesPreparedEntity>[];
36+
columns?: Column<PreparedStorageNode>[];
3737
defaultColumnsIds?: NodesColumnId[];
3838
requiredColumnsIds?: NodesColumnId[];
3939
selectedColumnsKey?: string;

src/containers/Nodes/NodesTable.tsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import React from 'react';
33
import {Illustration} from '../../components/Illustration';
44
import {ResizeablePaginatedTable} from '../../components/PaginatedTable';
55
import {NODES_COLUMNS_WIDTH_LS_KEY} from '../../components/nodesColumns/constants';
6-
import type {NodesFilters, NodesPreparedEntity} from '../../store/reducers/nodes/types';
6+
import type {PreparedStorageNode} from '../../store/reducers/storage/types';
77
import type {ProblemFilterValue} from '../../store/reducers/settings/types';
88
import type {NodesGroupByField, NodesPeerRole} from '../../types/api/nodes';
99
import {NodesUptimeFilterValues} from '../../utils/nodes';
@@ -14,6 +14,18 @@ import {getNodes} from './getNodes';
1414
import i18n from './i18n';
1515
import {getRowClassName} from './shared';
1616

17+
// Define filters type for consistency with storage nodes
18+
interface NodesFilters {
19+
searchValue?: string;
20+
problemFilter?: ProblemFilterValue;
21+
uptimeFilter?: NodesUptimeFilterValues;
22+
peerRoleFilter?: NodesPeerRole;
23+
path?: string;
24+
database?: string;
25+
filterGroup?: string;
26+
filterGroupBy?: NodesGroupByField;
27+
}
28+
1729
interface NodesTableProps {
1830
path?: string;
1931
database?: string;
@@ -26,7 +38,7 @@ interface NodesTableProps {
2638
filterGroup?: string;
2739
filterGroupBy?: NodesGroupByField;
2840

29-
columns: Column<NodesPreparedEntity>[];
41+
columns: Column<PreparedStorageNode>[];
3042
scrollContainerRef: React.RefObject<HTMLElement>;
3143

3244
initialEntitiesCount?: number;

src/containers/Nodes/PaginatedNodes/GroupedNodesComponent.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {PaginatedTableWithLayout} from '../../../components/PaginatedTable/Pagin
66
import {NODES_COLUMNS_TITLES} from '../../../components/nodesColumns/constants';
77
import type {NodesColumnId} from '../../../components/nodesColumns/constants';
88
import {nodesApi} from '../../../store/reducers/nodes/nodes';
9-
import type {NodesPreparedEntity} from '../../../store/reducers/nodes/types';
9+
import type {PreparedStorageNode} from '../../../store/reducers/storage/types';
1010
import type {NodesGroupByField, NodesPeerRole} from '../../../types/api/nodes';
1111
import {useAutoRefreshInterval} from '../../../utils/hooks';
1212
import {useSelectedColumns} from '../../../utils/hooks/useSelectedColumns';
@@ -28,7 +28,7 @@ interface NodeGroupProps {
2828
searchValue: string;
2929
peerRoleFilter?: NodesPeerRole;
3030
groupByParam?: NodesGroupByField;
31-
columns: Column<NodesPreparedEntity>[];
31+
columns: Column<PreparedStorageNode>[];
3232
scrollContainerRef: React.RefObject<HTMLElement>;
3333
onIsExpandedChange: (name: string, isExpanded: boolean) => void;
3434
}
@@ -85,7 +85,7 @@ interface GroupedNodesComponentProps {
8585
database?: string;
8686
scrollContainerRef: React.RefObject<HTMLElement>;
8787
withPeerRoleFilter?: boolean;
88-
columns: Column<NodesPreparedEntity>[];
88+
columns: Column<PreparedStorageNode>[];
8989
defaultColumnsIds: NodesColumnId[];
9090
requiredColumnsIds: NodesColumnId[];
9191
selectedColumnsKey: string;

src/containers/Nodes/PaginatedNodes/NodesComponent.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {PaginatedTableWithLayout} from '../../../components/PaginatedTable/Pagin
55
import {NODES_COLUMNS_TITLES} from '../../../components/nodesColumns/constants';
66
import type {NodesColumnId} from '../../../components/nodesColumns/constants';
77
import {useViewerNodesHandlerHasGrouping} from '../../../store/reducers/capabilities/hooks';
8-
import type {NodesPreparedEntity} from '../../../store/reducers/nodes/types';
8+
import type {PreparedStorageNode} from '../../../store/reducers/storage/types';
99
import {useProblemFilter} from '../../../store/reducers/settings/hooks';
1010
import type {NodesGroupByField} from '../../../types/api/nodes';
1111
import {useSelectedColumns} from '../../../utils/hooks/useSelectedColumns';
@@ -19,7 +19,7 @@ interface NodesComponentProps {
1919
database?: string;
2020
scrollContainerRef: React.RefObject<HTMLElement>;
2121
withPeerRoleFilter?: boolean;
22-
columns: Column<NodesPreparedEntity>[];
22+
columns: Column<PreparedStorageNode>[];
2323
defaultColumnsIds: NodesColumnId[];
2424
requiredColumnsIds: NodesColumnId[];
2525
selectedColumnsKey: string;

src/containers/Nodes/PaginatedNodes/PaginatedNodes.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
useCapabilitiesLoaded,
88
useViewerNodesHandlerHasGrouping,
99
} from '../../../store/reducers/capabilities/hooks';
10-
import type {NodesPreparedEntity} from '../../../store/reducers/nodes/types';
10+
import type {PreparedStorageNode} from '../../../store/reducers/storage/types';
1111
import {useProblemFilter} from '../../../store/reducers/settings/hooks';
1212
import type {NodesGroupByField} from '../../../types/api/nodes';
1313
import {NodesUptimeFilterValues} from '../../../utils/nodes';
@@ -23,7 +23,7 @@ export interface PaginatedNodesProps {
2323
database?: string;
2424
scrollContainerRef: React.RefObject<HTMLElement>;
2525
withPeerRoleFilter?: boolean;
26-
columns: Column<NodesPreparedEntity>[];
26+
columns: Column<PreparedStorageNode>[];
2727
defaultColumnsIds: NodesColumnId[];
2828
requiredColumnsIds: NodesColumnId[];
2929
selectedColumnsKey: string;

src/containers/Nodes/columns/columns.tsx

Lines changed: 19 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import DataTable from '@gravity-ui/react-data-table';
2-
31
import {
42
getCpuColumn,
53
getDataCenterColumn,
@@ -16,85 +14,29 @@ import {
1614
getUptimeColumn,
1715
getVersionColumn,
1816
} from '../../../components/nodesColumns/columns';
19-
import {
20-
NODES_COLUMNS_IDS,
21-
NODES_COLUMNS_TITLES,
22-
isSortableNodesColumn,
23-
} from '../../../components/nodesColumns/constants';
17+
import {isSortableNodesColumn} from '../../../components/nodesColumns/constants';
2418
import type {GetNodesColumnsParams} from '../../../components/nodesColumns/types';
25-
import type {NodesPreparedEntity} from '../../../store/reducers/nodes/types';
26-
import type {TPDiskStateInfo} from '../../../types/api/pdisk';
27-
import type {TVDiskStateInfo} from '../../../types/api/vdisk';
28-
import {cn} from '../../../utils/cn';
29-
import {
30-
prepareWhiteboardPDiskData,
31-
prepareWhiteboardVDiskData,
32-
} from '../../../utils/disks/prepareDisks';
19+
import type {PreparedStorageNode} from '../../../store/reducers/storage/types';
3320
import type {Column} from '../../../utils/tableUtils/types';
34-
import {PDisk} from '../../Storage/PDisk/PDisk';
35-
36-
const b = cn('ydb-nodes-columns');
37-
38-
// Extended type for nodes that may have disk information
39-
type NodeWithDisks = NodesPreparedEntity & {
40-
PDisks?: TPDiskStateInfo[];
41-
VDisks?: TVDiskStateInfo[];
42-
};
43-
44-
function getPDisksColumn(): Column<NodesPreparedEntity> {
45-
return {
46-
name: NODES_COLUMNS_IDS.PDisks,
47-
header: NODES_COLUMNS_TITLES.PDisks,
48-
className: b('pdisks-column'),
49-
width: 500,
50-
resizeMinWidth: 500,
51-
render: ({row}) => {
52-
const nodeWithDisks = row as NodeWithDisks;
53-
return (
54-
<div className={b('pdisks-wrapper')}>
55-
{nodeWithDisks.PDisks?.map((pDisk) => {
56-
const preparedPDisk = prepareWhiteboardPDiskData(pDisk);
57-
const vDisks = nodeWithDisks.VDisks?.filter(
58-
(vdisk) => vdisk.PDiskId === pDisk.PDiskId,
59-
);
60-
const preparedVDisks = vDisks?.map(prepareWhiteboardVDiskData);
61-
62-
return (
63-
<div className={b('pdisks-item')} key={pDisk.PDiskId}>
64-
<PDisk
65-
data={preparedPDisk}
66-
vDisks={preparedVDisks}
67-
viewContext={{}}
68-
/>
69-
</div>
70-
);
71-
})}
72-
</div>
73-
);
74-
},
75-
align: DataTable.CENTER,
76-
sortable: false,
77-
resizeable: false,
78-
};
79-
}
21+
import {getPDisksColumn} from '../../Storage/PaginatedStorageNodesTable/columns/columns';
8022

81-
export function getNodesColumns(params: GetNodesColumnsParams): Column<NodesPreparedEntity>[] {
23+
export function getNodesColumns(params: GetNodesColumnsParams): Column<PreparedStorageNode>[] {
8224
const columns = [
83-
getNodeIdColumn<NodesPreparedEntity>(),
84-
getHostColumn<NodesPreparedEntity>(params),
85-
getNodeNameColumn<NodesPreparedEntity>(),
86-
getDataCenterColumn<NodesPreparedEntity>(),
87-
getPileNameColumn<NodesPreparedEntity>(),
88-
getRackColumn<NodesPreparedEntity>(),
89-
getUptimeColumn<NodesPreparedEntity>(),
90-
getCpuColumn<NodesPreparedEntity>(),
91-
getPoolsColumn<NodesPreparedEntity>(),
92-
getRAMColumn<NodesPreparedEntity>(),
93-
getMemoryColumn<NodesPreparedEntity>(),
94-
getLoadAverageColumn<NodesPreparedEntity>(),
95-
getVersionColumn<NodesPreparedEntity>(),
96-
getPDisksColumn(),
97-
getTabletsColumn<NodesPreparedEntity>(params),
25+
getNodeIdColumn<PreparedStorageNode>(),
26+
getHostColumn<PreparedStorageNode>(params),
27+
getNodeNameColumn<PreparedStorageNode>(),
28+
getDataCenterColumn<PreparedStorageNode>(),
29+
getPileNameColumn<PreparedStorageNode>(),
30+
getRackColumn<PreparedStorageNode>(),
31+
getUptimeColumn<PreparedStorageNode>(),
32+
getCpuColumn<PreparedStorageNode>(),
33+
getPoolsColumn<PreparedStorageNode>(),
34+
getRAMColumn<PreparedStorageNode>(),
35+
getMemoryColumn<PreparedStorageNode>(),
36+
getLoadAverageColumn<PreparedStorageNode>(),
37+
getVersionColumn<PreparedStorageNode>(),
38+
getPDisksColumn({viewContext: {}, columnsSettings: undefined}),
39+
getTabletsColumn<PreparedStorageNode>(params),
9840
];
9941

10042
return columns.map((column) => {

src/containers/Nodes/getNodes.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,27 @@ import {
33
NODES_COLUMNS_TO_DATA_FIELDS,
44
getNodesColumnSortField,
55
} from '../../components/nodesColumns/constants';
6-
import type {NodesFilters, NodesPreparedEntity} from '../../store/reducers/nodes/types';
7-
import {prepareNodesData} from '../../store/reducers/nodes/utils';
6+
import type {PreparedStorageNode} from '../../store/reducers/storage/types';
7+
import {prepareStorageNodesResponse} from '../../store/reducers/storage/utils';
88
import type {NodesRequestParams} from '../../types/api/nodes';
99
import {prepareSortValue} from '../../utils/filters';
1010
import {getProblemParamValue, getUptimeParamValue} from '../../utils/nodes';
1111
import {getRequiredDataFields} from '../../utils/tableUtils/getRequiredDataFields';
1212

13+
// Define filters type for consistency with PreparedStorageNode
14+
interface NodesFilters {
15+
searchValue?: string;
16+
problemFilter?: string;
17+
uptimeFilter?: string;
18+
peerRoleFilter?: string;
19+
path?: string;
20+
database?: string;
21+
filterGroup?: string;
22+
filterGroupBy?: string;
23+
}
24+
1325
export const getNodes: FetchData<
14-
NodesPreparedEntity,
26+
PreparedStorageNode,
1527
NodesFilters,
1628
Pick<NodesRequestParams, 'type' | 'storage'>
1729
> = async (params) => {
@@ -50,11 +62,11 @@ export const getNodes: FetchData<
5062
filter_group_by: filterGroupBy,
5163
fieldsRequired: dataFieldsRequired,
5264
});
53-
const preparedResponse = prepareNodesData(response);
65+
const preparedResponse = prepareStorageNodesResponse(response);
5466

5567
return {
56-
data: preparedResponse.Nodes || [],
57-
found: preparedResponse.FoundNodes || 0,
58-
total: preparedResponse.TotalNodes || 0,
68+
data: preparedResponse.nodes || [],
69+
found: preparedResponse.found || 0,
70+
total: preparedResponse.total || 0,
5971
};
6072
};

src/containers/Storage/PaginatedStorageNodesTable/columns/columns.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import './StorageNodesColumns.scss';
3636

3737
const b = cn('ydb-storage-nodes-columns');
3838

39-
const getPDisksColumn = ({
39+
export const getPDisksColumn = ({
4040
viewContext,
4141
columnsSettings,
4242
}: GetStorageNodesColumnsParams & {

0 commit comments

Comments
 (0)