Skip to content

Commit 7f5a783

Browse files
fix: fix disks developer UI links for paths with nodeId (#594)
1 parent 6379577 commit 7f5a783

File tree

4 files changed

+96
-33
lines changed

4 files changed

+96
-33
lines changed

src/containers/Node/NodeStructure/Pdisk.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ import {bytesToGB} from '../../../utils/utils';
1616
import {formatStorageValuesToGb} from '../../../utils/dataFormatters/dataFormatters';
1717
import {getPDiskType} from '../../../utils/pdisk';
1818
import {DEFAULT_TABLE_SETTINGS} from '../../../utils/constants';
19-
import {createPDiskDeveloperUILink, createVDiskDeveloperUILink} from '../../../utils/developerUI';
19+
import {
20+
createPDiskDeveloperUILink,
21+
createVDiskDeveloperUILink,
22+
} from '../../../utils/developerUI/developerUI';
2023
import EntityStatus from '../../../components/EntityStatus/EntityStatus';
2124
import InfoViewer, {type InfoViewerItem} from '../../../components/InfoViewer/InfoViewer';
2225
import {ProgressViewer} from '../../../components/ProgressViewer/ProgressViewer';

src/utils/developerUI.ts

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import {
2+
createDeveloperUILinkWithNodeId,
3+
createPDiskDeveloperUILink,
4+
createVDiskDeveloperUILink,
5+
} from '../developerUI';
6+
7+
describe('Developer UI links generators', () => {
8+
describe('createDeveloperUILinkWithNodeId', () => {
9+
it('should create relative link with no host', () => {
10+
expect(createDeveloperUILinkWithNodeId(1)).toBe('/node/1/');
11+
});
12+
it('should create relative link with existing relative path with nodeId', () => {
13+
expect(createDeveloperUILinkWithNodeId(1, '/node/3/')).toBe('/node/1/');
14+
});
15+
it('should create full link with host', () => {
16+
expect(
17+
createDeveloperUILinkWithNodeId(
18+
1,
19+
'http://ydb-vla-dev02-001.search.yandex.net:8765',
20+
),
21+
).toBe('http://ydb-vla-dev02-001.search.yandex.net:8765/node/1/');
22+
});
23+
it('should create full link with host with existing node path with nodeId', () => {
24+
expect(
25+
createDeveloperUILinkWithNodeId(
26+
1,
27+
'http://ydb-vla-dev02-001.search.yandex.net:8765/node/3',
28+
),
29+
).toBe('http://ydb-vla-dev02-001.search.yandex.net:8765/node/1/');
30+
});
31+
});
32+
describe('createPDiskDeveloperUILink', () => {
33+
it('should create link with pDiskId and nodeId', () => {
34+
expect(createPDiskDeveloperUILink({nodeId: 1, pDiskId: 1})).toBe(
35+
'/node/1/actors/pdisks/pdisk000000001',
36+
);
37+
});
38+
});
39+
describe('createVDiskDeveloperUILink', () => {
40+
it('should create link with pDiskId, vDiskSlotId nodeId', () => {
41+
expect(
42+
createVDiskDeveloperUILink({
43+
nodeId: 1,
44+
pDiskId: 1,
45+
vDiskSlotId: 1,
46+
}),
47+
).toBe('/node/1/actors/vdisks/vdisk000000001_000000001');
48+
});
49+
});
50+
});
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import {backend} from '../../store';
2+
import {pad9} from '../utils';
3+
4+
// Current node connects with target node by itself using nodeId
5+
export const createDeveloperUILinkWithNodeId = (nodeId: number | string, host = backend) => {
6+
const nodePathRegexp = /\/node\/\d+\/?$/g;
7+
8+
// In case current backend is already relative node path ({host}/node/{nodeId})
9+
// We replace existing nodeId path with new nodeId path
10+
if (nodePathRegexp.test(String(host))) {
11+
return String(host).replace(nodePathRegexp, `/node/${nodeId}/`);
12+
}
13+
14+
return `${host ?? ''}/node/${nodeId}/`;
15+
};
16+
17+
interface PDiskDeveloperUILinkParams {
18+
nodeId: number | string;
19+
pDiskId: number | string;
20+
host?: string;
21+
}
22+
23+
export const createPDiskDeveloperUILink = ({nodeId, pDiskId, host}: PDiskDeveloperUILinkParams) => {
24+
const pdiskPath = 'actors/pdisks/pdisk' + pad9(pDiskId);
25+
26+
return createDeveloperUILinkWithNodeId(nodeId, host) + pdiskPath;
27+
};
28+
29+
interface VDiskDeveloperUILinkParams extends PDiskDeveloperUILinkParams {
30+
vDiskSlotId: number | string;
31+
}
32+
33+
export const createVDiskDeveloperUILink = ({
34+
nodeId,
35+
pDiskId,
36+
vDiskSlotId,
37+
host,
38+
}: VDiskDeveloperUILinkParams) => {
39+
const vdiskPath = 'actors/vdisks/vdisk' + pad9(pDiskId) + '_' + pad9(vDiskSlotId);
40+
41+
return createDeveloperUILinkWithNodeId(nodeId, host) + vdiskPath;
42+
};

0 commit comments

Comments
 (0)