Skip to content

Commit d420599

Browse files
Copilotadameat
andcommitted
feat: add network tab to node page with peer connectivity visualization
Co-authored-by: adameat <[email protected]>
1 parent e96a344 commit d420599

File tree

10 files changed

+425
-111
lines changed

10 files changed

+425
-111
lines changed

src/components/FullNodeViewer/FullNodeViewer.tsx

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import {Flex} from '@gravity-ui/uikit';
2-
import {skipToken} from '@reduxjs/toolkit/query';
32

4-
import {nodeApi} from '../../store/reducers/node/node';
53
import type {PreparedNode} from '../../store/reducers/node/types';
64
import {cn} from '../../utils/cn';
75
import {useNodeDeveloperUIHref} from '../../utils/hooks/useNodeDeveloperUIHref';
@@ -12,7 +10,6 @@ import {PoolUsage} from '../PoolUsage/PoolUsage';
1210
import {ProgressViewer} from '../ProgressViewer/ProgressViewer';
1311
import {NodeUptime} from '../UptimeViewer/UptimeViewer';
1412

15-
import {NodeNetworkInfo} from './NodeNetworkInfo';
1613
import i18n from './i18n';
1714

1815
import './FullNodeViewer.scss';
@@ -22,20 +19,14 @@ const b = cn('full-node-viewer');
2219
interface FullNodeViewerProps {
2320
node?: PreparedNode;
2421
className?: string;
25-
database?: string;
2622
}
2723
const getLoadAverageIntervalTitle = (index: number) => {
2824
return [i18n('la-interval-1m'), i18n('la-interval-5m'), i18n('la-interval-15m')][index];
2925
};
3026

31-
export const FullNodeViewer = ({node, className, database}: FullNodeViewerProps) => {
27+
export const FullNodeViewer = ({node, className}: FullNodeViewerProps) => {
3228
const developerUIHref = useNodeDeveloperUIHref(node);
3329

34-
const nodeId = node?.NodeId?.toString();
35-
const {currentData: nodeNetworkInfo} = nodeApi.useGetNodeNetworkInfoQuery(
36-
nodeId && database ? {nodeId, database} : skipToken,
37-
);
38-
3930
const commonInfo: InfoViewerItem[] = [];
4031

4132
if (node?.Tenants?.length) {
@@ -95,14 +86,6 @@ export const FullNodeViewer = ({node, className, database}: FullNodeViewerProps)
9586
info={endpointsInfo}
9687
/>
9788
) : null}
98-
99-
{nodeNetworkInfo ? (
100-
<NodeNetworkInfo
101-
nodeNetworkInfo={nodeNetworkInfo}
102-
className={b('section')}
103-
database={database}
104-
/>
105-
) : null}
10689
</Flex>
10790

10891
<Flex direction="column" gap={2}>

src/components/FullNodeViewer/NodeNetworkInfo.tsx

Lines changed: 0 additions & 56 deletions
This file was deleted.

src/components/FullNodeViewer/i18n/en.json

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,5 @@
1717
"title.endpoints": "Endpoints",
1818
"title.roles": "Roles",
1919
"title.pools": "Pools",
20-
"title.load-average": "Load average",
21-
"title.network": "Network",
22-
23-
"network.connected-peers": "Connected peers",
24-
"network.total-peers": "Total peers",
25-
"network.peer-node-id": "Node ID",
26-
"network.peer-host": "Host",
27-
"network.peer-dc": "DC",
28-
"network.peer-rack": "Rack",
29-
"network.peer-connected": "Connected",
30-
"network.peer-status": "Status"
20+
"title.load-average": "Load average"
3121
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
.node-network {
2+
&__inner {
3+
padding: 20px;
4+
}
5+
6+
&__controls-wrapper {
7+
margin-bottom: 20px;
8+
}
9+
10+
&__controls {
11+
display: flex;
12+
align-items: center;
13+
gap: 16px;
14+
}
15+
16+
&__problem-filter {
17+
margin-right: 12px;
18+
}
19+
20+
&__checkbox-wrapper {
21+
display: flex;
22+
align-items: center;
23+
}
24+
25+
&__nodes-row {
26+
display: flex;
27+
gap: 32px;
28+
align-items: flex-start;
29+
}
30+
31+
&__left,
32+
&__right {
33+
flex: 1;
34+
}
35+
36+
&__section-title {
37+
font-size: 16px;
38+
font-weight: 500;
39+
margin-bottom: 16px;
40+
}
41+
42+
&__nodes-container {
43+
margin-bottom: 24px;
44+
}
45+
46+
&__nodes-title {
47+
font-size: 14px;
48+
font-weight: 500;
49+
margin-bottom: 12px;
50+
}
51+
52+
&__nodes {
53+
display: flex;
54+
flex-wrap: wrap;
55+
gap: 8px;
56+
}
57+
58+
&__rack-column {
59+
display: flex;
60+
flex-direction: column;
61+
align-items: center;
62+
margin-right: 16px;
63+
}
64+
65+
&__rack-index {
66+
font-size: 12px;
67+
margin-bottom: 8px;
68+
min-height: 16px;
69+
}
70+
71+
&__link {
72+
color: var(--g-color-text-primary);
73+
text-decoration: underline;
74+
75+
&:hover {
76+
color: var(--g-color-text-primary);
77+
}
78+
}
79+
80+
&__placeholder {
81+
display: flex;
82+
flex-direction: column;
83+
align-items: center;
84+
justify-content: center;
85+
padding: 40px;
86+
text-align: center;
87+
}
88+
89+
&__placeholder-img {
90+
margin-bottom: 16px;
91+
opacity: 0.5;
92+
}
93+
94+
&__placeholder-text {
95+
color: var(--g-color-text-secondary);
96+
font-size: 14px;
97+
}
98+
}

0 commit comments

Comments
 (0)