Skip to content

Commit cc82dd9

Browse files
fix(Storage): get nodes hosts from /nodelist
1 parent 0a3e3cd commit cc82dd9

File tree

8 files changed

+42
-35
lines changed

8 files changed

+42
-35
lines changed

src/containers/Storage/PDiskPopup/PDiskPopup.tsx

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import cn from 'bem-cn-lite';
33

44
import {Popup, PopupProps} from '@gravity-ui/uikit';
55

6+
import type {NodesMap} from '../../../types/store/nodesList';
7+
68
import {InfoViewer, InfoViewerItem} from '../../../components/InfoViewer';
79

810
import {EFlag} from '../../../types/api/enums';
@@ -17,12 +19,7 @@ const b = cn('pdisk-storage-popup');
1719

1820
const errorColors = [EFlag.Orange, EFlag.Red, EFlag.Yellow];
1921

20-
export type NodesHosts = {
21-
// NodeId => Host
22-
[nodeId: number]: string;
23-
}
24-
25-
export const preparePDiskData = (data: TPDiskStateInfo, nodes?: NodesHosts) => {
22+
export const preparePDiskData = (data: TPDiskStateInfo, nodes?: NodesMap) => {
2623
const {AvailableSize, TotalSize, State, PDiskId, NodeId, Path, Realtime, Device} = data;
2724

2825
const pdiskData: InfoViewerItem[] = [
@@ -35,8 +32,8 @@ export const preparePDiskData = (data: TPDiskStateInfo, nodes?: NodesHosts) => {
3532
pdiskData.push({label: 'Node Id', value: NodeId});
3633
}
3734

38-
if (nodes && NodeId && nodes[NodeId]) {
39-
pdiskData.push({label: 'Host', value: nodes[NodeId]});
35+
if (nodes && NodeId && nodes.get(NodeId)) {
36+
pdiskData.push({label: 'Host', value: nodes.get(NodeId)});
4037
}
4138

4239
if (Path) {
@@ -61,7 +58,7 @@ export const preparePDiskData = (data: TPDiskStateInfo, nodes?: NodesHosts) => {
6158

6259
interface PDiskPopupProps extends PopupProps {
6360
data: TPDiskStateInfo;
64-
nodes?: NodesHosts;
61+
nodes?: NodesMap;
6562
}
6663

6764
export const PDiskPopup = ({data, nodes, ...props}: PDiskPopupProps) => {

src/containers/Storage/Storage.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import {
2222
setVisibleEntities,
2323
setStorageFilter,
2424
setUsageFilter,
25-
getNodesObject,
2625
StorageTypes,
2726
setStorageType,
2827
setNodesUptimeFilter,
@@ -32,7 +31,7 @@ import {
3231
getStorageNodesCount,
3332
getUsageFilterOptions,
3433
} from '../../store/reducers/storage';
35-
import {getNodesList} from '../../store/reducers/nodesList';
34+
import {getNodesList, selectNodesMap} from '../../store/reducers/nodesList';
3635
import StorageGroups from './StorageGroups/StorageGroups';
3736
import StorageNodes from './StorageNodes/StorageNodes';
3837
import {DEFAULT_TABLE_SETTINGS} from '../../utils/constants';
@@ -345,7 +344,7 @@ function mapStateToProps(state) {
345344
flatListStorageEntities: getFilteredEntities(state),
346345
groupsCount: getStoragePoolsGroupsCount(state),
347346
autorefresh: state.schema.autorefresh,
348-
nodes: getNodesObject(state),
347+
nodes: selectNodesMap(state),
349348
nodesCount: getStorageNodesCount(state),
350349
loading,
351350
wasLoaded,

src/containers/Storage/StorageGroups/StorageGroups.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import cn from 'bem-cn-lite';
33
import DataTable, {Column, Settings, SortOrder} from '@gravity-ui/react-data-table';
44
import {Icon, Label, Popover, PopoverBehavior} from '@gravity-ui/uikit';
55

6+
import type {NodesMap} from '../../../types/store/nodesList';
7+
68
import shieldIcon from '../../../assets/icons/shield.svg';
79

810
import {Stack} from '../../../components/Stack/Stack';
@@ -45,7 +47,7 @@ type TableColumnsIdsValues = typeof TableColumnsIds[TableColumnsIdsKeys];
4547

4648
interface StorageGroupsProps {
4749
data: any;
48-
nodes: any;
50+
nodes: NodesMap;
4951
tableSettings: Settings;
5052
visibleEntities: keyof typeof VisibleEntities;
5153
onShowAll?: VoidFunction;

src/containers/Storage/VDisk/VDisk.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import React, {useEffect, useState, useRef, useMemo} from 'react';
22
import cn from 'bem-cn-lite';
33

4+
import type {NodesMap} from '../../../types/store/nodesList';
5+
46
import {InternalLink} from '../../../components/InternalLink';
57

68
import routes, {createHref} from '../../../routes';
@@ -12,7 +14,6 @@ import {isFullVDiskData} from '../../../utils/storage';
1214
import {STRUCTURE} from '../../Node/NodePages';
1315

1416
import {DiskStateProgressBar, EDiskStateSeverity} from '../DiskStateProgressBar';
15-
import type {NodesHosts} from '../PDiskPopup';
1617
import {VDiskPopup} from '../VDiskPopup';
1718

1819
import type {IUnavailableDonor} from '../utils/types';
@@ -50,7 +51,7 @@ const getColorSeverity = (color?: EFlag) => {
5051
interface VDiskProps {
5152
data?: TVDiskStateInfo | IUnavailableDonor;
5253
poolName?: string;
53-
nodes?: NodesHosts;
54+
nodes?: NodesMap;
5455
compact?: boolean;
5556
}
5657

src/containers/Storage/VDiskPopup/VDiskPopup.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import cn from 'bem-cn-lite';
33

44
import {Label, Popup, PopupProps} from '@gravity-ui/uikit';
55

6+
import type {NodesMap} from '../../../types/store/nodesList';
7+
68
import {InfoViewer, InfoViewerItem} from '../../../components/InfoViewer';
79

810
import {EFlag} from '../../../types/api/enums';
@@ -13,7 +15,7 @@ import {isFullVDiskData} from '../../../utils/storage';
1315

1416
import type {IUnavailableDonor} from '../utils/types';
1517

16-
import {NodesHosts, preparePDiskData} from '../PDiskPopup';
18+
import {preparePDiskData} from '../PDiskPopup';
1719

1820
import './VDiskPopup.scss';
1921

@@ -128,7 +130,7 @@ const prepareVDiskData = (data: TVDiskStateInfo, poolName?: string) => {
128130
interface VDiskPopupProps extends PopupProps {
129131
data: TVDiskStateInfo | IUnavailableDonor;
130132
poolName?: string;
131-
nodes?: NodesHosts;
133+
nodes?: NodesMap;
132134
}
133135

134136
export const VDiskPopup = ({data, poolName, nodes, ...props}: VDiskPopupProps) => {

src/store/reducers/nodesList.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import type {Reducer} from 'redux';
22

3-
import type {NodesListState, NodesListAction} from '../../types/store/nodesList';
3+
import type {
4+
NodesListState,
5+
NodesListAction,
6+
NodesListRootStateSlice,
7+
NodesMap,
8+
} from '../../types/store/nodesList';
49
import '../../services/api';
510
import {createRequestActionTypes, createApiRequest} from '../utils';
611

@@ -39,13 +44,17 @@ const nodesList: Reducer<NodesListState, NodesListAction> = (state = initialStat
3944

4045
export function getNodesList() {
4146
return createApiRequest({
42-
request: window.api.getNodeInfo(),
47+
request: window.api.getNodesList(),
4348
actions: FETCH_NODES_LIST,
44-
dataHandler: (data) => {
45-
const {SystemStateInfo: nodes = []} = data;
46-
return nodes;
47-
},
4849
});
4950
}
5051

52+
export const selectNodesMap = (state: NodesListRootStateSlice) =>
53+
state.nodesList.data?.reduce<NodesMap>((nodesMap, node) => {
54+
if (node.Id && node.Host) {
55+
nodesMap.set(node.Id, node.Host);
56+
}
57+
return nodesMap;
58+
}, new Map());
59+
5160
export default nodesList;

src/store/reducers/storage.js

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -204,15 +204,6 @@ export const getUsageFilter = (state) => state.storage.usageFilter;
204204
export const getVisibleEntities = (state) => state.storage.visible;
205205
export const getNodesUptimeFilter = (state) => state.storage.nodesUptimeFilter;
206206
export const getStorageType = (state) => state.storage.type;
207-
export const getNodesObject = (state) =>
208-
_.reduce(
209-
state.nodesList?.data,
210-
(acc, el) => {
211-
acc[el.NodeId] = el.Host;
212-
return acc;
213-
},
214-
{},
215-
);
216207

217208
const FLAGS_POINTS = {
218209
Green: 1,

src/types/store/nodesList.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,23 @@ import {FETCH_NODES_LIST} from '../../store/reducers/nodesList';
22

33
import type {ApiRequestAction} from '../../store/utils';
44
import type {IResponseError} from '../api/error';
5-
import type {TSystemStateInfo} from '../api/nodes';
5+
import type {TEvNodesInfo} from '../api/nodesList';
66

77
export interface NodesListState {
88
loading: boolean;
99
wasLoaded: boolean;
10-
data?: TSystemStateInfo[];
10+
data?: TEvNodesInfo;
1111
error?: IResponseError;
1212
}
1313

1414
export type NodesListAction = ApiRequestAction<
1515
typeof FETCH_NODES_LIST,
16-
TSystemStateInfo[],
16+
TEvNodesInfo,
1717
IResponseError
1818
>;
19+
20+
export type NodesMap = Map<number, string>;
21+
22+
export interface NodesListRootStateSlice {
23+
nodesList: NodesListState;
24+
}

0 commit comments

Comments
 (0)