Skip to content

Commit ac89a5a

Browse files
committed
fix: if database pass name to query params and to backend handlers
1 parent 249011d commit ac89a5a

File tree

41 files changed

+286
-120
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+286
-120
lines changed

src/components/NodeHostWrapper/NodeHostWrapper.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import {getDefaultNodePath} from '../../containers/Node/NodePages';
44
import type {NodeAddress} from '../../types/additionalProps';
55
import type {TNodeInfo, TSystemStateInfo} from '../../types/api/nodes';
66
import {
7+
createBaseDeveloperUILinkWithNodeId,
78
createDeveloperUIInternalPageHref,
8-
createDeveloperUILinkWithNodeId,
99
} from '../../utils/developerUI/developerUI';
1010
import {isUnavailableNode} from '../../utils/nodes';
1111
import {CellWithPopover} from '../CellWithPopover/CellWithPopover';
@@ -46,11 +46,11 @@ export const NodeHostWrapper = ({
4646
if (getNodeRef) {
4747
const developerUIHref = getNodeRef(node);
4848
developerUIInternalHref = developerUIHref
49-
? createDeveloperUIInternalPageHref(developerUIHref)
49+
? createDeveloperUIInternalPageHref(developerUIHref, database)
5050
: undefined;
5151
} else if (node.NodeId) {
52-
const developerUIHref = createDeveloperUILinkWithNodeId(node.NodeId);
53-
developerUIInternalHref = createDeveloperUIInternalPageHref(developerUIHref);
52+
const developerUIHref = createBaseDeveloperUILinkWithNodeId(node.NodeId);
53+
developerUIInternalHref = createDeveloperUIInternalPageHref(developerUIHref, database);
5454
}
5555

5656
const nodePath = isNodeAvailable

src/components/PDiskInfo/PDiskInfo.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {cn} from '../../utils/cn';
77
import {formatStorageValuesToGb} from '../../utils/dataFormatters/dataFormatters';
88
import {createPDiskDeveloperUILink} from '../../utils/developerUI/developerUI';
99
import type {PreparedPDisk} from '../../utils/disks/types';
10+
import {useDatabaseFromQuery} from '../../utils/hooks/useDatabaseFromQuery';
1011
import {useIsUserAllowedToMakeChanges} from '../../utils/hooks/useIsUserAllowedToMakeChanges';
1112
import type {InfoViewerItem} from '../InfoViewer';
1213
import {InfoViewer} from '../InfoViewer/InfoViewer';
@@ -25,6 +26,7 @@ interface GetPDiskInfoOptions<T extends PreparedPDisk> {
2526
nodeId?: number | string | null;
2627
withPDiskPageLink?: boolean;
2728
isUserAllowedToMakeChanges?: boolean;
29+
database?: string;
2830
}
2931

3032
// eslint-disable-next-line complexity
@@ -33,6 +35,7 @@ function getPDiskInfo<T extends PreparedPDisk>({
3335
nodeId,
3436
withPDiskPageLink,
3537
isUserAllowedToMakeChanges,
38+
database,
3639
}: GetPDiskInfoOptions<T>) {
3740
const {
3841
PDiskId,
@@ -147,10 +150,11 @@ function getPDiskInfo<T extends PreparedPDisk>({
147150
valueIsDefined(nodeId);
148151

149152
if (shouldDisplayLinks) {
150-
const pDiskPagePath = getPDiskPagePath(PDiskId, nodeId);
153+
const pDiskPagePath = getPDiskPagePath(PDiskId, nodeId, {database});
151154
const pDiskInternalViewerPath = createPDiskDeveloperUILink({
152155
nodeId,
153156
pDiskId: PDiskId,
157+
database,
154158
});
155159

156160
additionalInfo.push({
@@ -189,12 +193,14 @@ export function PDiskInfo<T extends PreparedPDisk>({
189193
className,
190194
}: PDiskInfoProps<T>) {
191195
const isUserAllowedToMakeChanges = useIsUserAllowedToMakeChanges();
196+
const database = useDatabaseFromQuery();
192197

193198
const [generalInfo, statusInfo, spaceInfo, additionalInfo] = getPDiskInfo({
194199
pDisk,
195200
nodeId,
196201
withPDiskPageLink,
197202
isUserAllowedToMakeChanges,
203+
database,
198204
});
199205

200206
return (

src/components/PDiskPopup/PDiskPopup.tsx

+6-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
77
import {createPDiskDeveloperUILink} from '../../utils/developerUI/developerUI';
88
import type {PreparedPDisk} from '../../utils/disks/types';
99
import {useTypedSelector} from '../../utils/hooks';
10+
import {useDatabaseFromQuery} from '../../utils/hooks/useDatabaseFromQuery';
1011
import {useIsUserAllowedToMakeChanges} from '../../utils/hooks/useIsUserAllowedToMakeChanges';
1112
import {bytesToGB, isNumeric} from '../../utils/utils';
1213
import {InfoViewer} from '../InfoViewer';
@@ -19,6 +20,7 @@ export const preparePDiskData = (
1920
data: PreparedPDisk,
2021
nodeData?: {Host?: string; DC?: string},
2122
withDeveloperUILink?: boolean,
23+
database?: string,
2224
) => {
2325
const {
2426
AvailableSize,
@@ -76,6 +78,7 @@ export const preparePDiskData = (
7678
const pDiskInternalViewerPath = createPDiskDeveloperUILink({
7779
nodeId: NodeId,
7880
pDiskId: PDiskId,
81+
database,
7982
});
8083

8184
pdiskData.push({
@@ -92,12 +95,13 @@ interface PDiskPopupProps {
9295
}
9396

9497
export const PDiskPopup = ({data}: PDiskPopupProps) => {
98+
const database = useDatabaseFromQuery();
9599
const isUserAllowedToMakeChanges = useIsUserAllowedToMakeChanges();
96100
const nodesMap = useTypedSelector(selectNodesMap);
97101
const nodeData = valueIsDefined(data.NodeId) ? nodesMap?.get(data.NodeId) : undefined;
98102
const info = React.useMemo(
99-
() => preparePDiskData(data, nodeData, isUserAllowedToMakeChanges),
100-
[data, nodeData, isUserAllowedToMakeChanges],
103+
() => preparePDiskData(data, nodeData, isUserAllowedToMakeChanges, database),
104+
[data, nodeData, isUserAllowedToMakeChanges, database],
101105
);
102106

103107
return <InfoViewer title="PDisk" info={info} size="s" />;

src/components/TabletNameWrapper/TabletNameWrapper.tsx

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {DefinitionList, PopoverBehavior} from '@gravity-ui/uikit';
22

33
import {getTabletPagePath} from '../../routes';
44
import {createTabletDeveloperUIHref} from '../../utils/developerUI/developerUI';
5+
import {useDatabaseFromQuery} from '../../utils/hooks/useDatabaseFromQuery';
56
import {useIsUserAllowedToMakeChanges} from '../../utils/hooks/useIsUserAllowedToMakeChanges';
67
import {CellWithPopover} from '../CellWithPopover/CellWithPopover';
78
import {EntityStatus} from '../EntityStatus/EntityStatus';
@@ -11,11 +12,11 @@ import i18n from './i18n';
1112

1213
interface TabletNameWrapperProps {
1314
tabletId: string | number;
14-
database?: string;
1515
}
1616

17-
export function TabletNameWrapper({tabletId, database}: TabletNameWrapperProps) {
17+
export function TabletNameWrapper({tabletId}: TabletNameWrapperProps) {
1818
const isUserAllowedToMakeChanges = useIsUserAllowedToMakeChanges();
19+
const database = useDatabaseFromQuery();
1920

2021
const tabletPath = getTabletPagePath(tabletId, {database});
2122

@@ -28,7 +29,7 @@ export function TabletNameWrapper({tabletId, database}: TabletNameWrapperProps)
2829
<DefinitionList.Item name={i18n('field_links')}>
2930
<LinkWithIcon
3031
title={i18n('context_developer-ui')}
31-
url={createTabletDeveloperUIHref(tabletId)}
32+
url={createTabletDeveloperUIHref(tabletId, database)}
3233
/>
3334
</DefinitionList.Item>
3435
</DefinitionList>

src/components/VDisk/VDisk.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {cn} from '../../utils/cn';
22
import type {PreparedVDisk} from '../../utils/disks/types';
3+
import {useDatabaseFromQuery} from '../../utils/hooks/useDatabaseFromQuery';
34
import {DiskStateProgressBar} from '../DiskStateProgressBar/DiskStateProgressBar';
45
import {HoverPopup} from '../HoverPopup/HoverPopup';
56
import {InternalLink} from '../InternalLink';
@@ -34,7 +35,8 @@ export const VDisk = ({
3435
delayClose,
3536
delayOpen,
3637
}: VDiskProps) => {
37-
const vDiskPath = getVDiskLink(data);
38+
const database = useDatabaseFromQuery();
39+
const vDiskPath = getVDiskLink(data, database);
3840

3941
return (
4042
<HoverPopup

src/components/VDisk/utils.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {valueIsDefined} from '../../utils';
55
import {stringifyVdiskId} from '../../utils/dataFormatters/dataFormatters';
66
import {isFullVDiskData} from '../../utils/disks/helpers';
77

8-
export function getVDiskLink(data: TVDiskStateInfo | TVSlotId) {
8+
export function getVDiskLink(data: TVDiskStateInfo | TVSlotId, database?: string) {
99
let vDiskPath: string | undefined;
1010

1111
const isFullData = isFullVDiskData(data);
@@ -16,13 +16,14 @@ export function getVDiskLink(data: TVDiskStateInfo | TVSlotId) {
1616
valueIsDefined(data.PDiskId) &&
1717
valueIsDefined(data.NodeId)
1818
) {
19-
vDiskPath = getVDiskPagePath(VDiskSlotId, data.PDiskId, data.NodeId);
19+
vDiskPath = getVDiskPagePath(VDiskSlotId, data.PDiskId, data.NodeId, {database});
2020
} else if (valueIsDefined(data.NodeId) && isFullVDiskData(data)) {
2121
vDiskPath = getDefaultNodePath(
2222
data.NodeId,
2323
{
2424
pdiskId: data.PDiskId?.toString(),
2525
vdiskId: stringifyVdiskId(data.VDiskId),
26+
database,
2627
},
2728
'structure',
2829
);

src/components/VDiskInfo/VDiskInfo.tsx

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {formatStorageValuesToGb} from '../../utils/dataFormatters/dataFormatters
77
import {createVDiskDeveloperUILink} from '../../utils/developerUI/developerUI';
88
import {getSeverityColor} from '../../utils/disks/helpers';
99
import type {PreparedVDisk} from '../../utils/disks/types';
10+
import {useDatabaseFromQuery} from '../../utils/hooks/useDatabaseFromQuery';
1011
import {useIsUserAllowedToMakeChanges} from '../../utils/hooks/useIsUserAllowedToMakeChanges';
1112
import {bytesToSpeed} from '../../utils/utils';
1213
import {InfoViewer} from '../InfoViewer';
@@ -35,6 +36,7 @@ export function VDiskInfo<T extends PreparedVDisk>({
3536
...infoViewerProps
3637
}: VDiskInfoProps<T>) {
3738
const isUserAllowedToMakeChanges = useIsUserAllowedToMakeChanges();
39+
const database = useDatabaseFromQuery();
3840

3941
const {
4042
AllocatedSize,
@@ -152,7 +154,7 @@ export function VDiskInfo<T extends PreparedVDisk>({
152154
const links: React.ReactNode[] = [];
153155

154156
if (withVDiskPageLink) {
155-
const vDiskPagePath = getVDiskPagePath(VDiskSlotId, PDiskId, NodeId);
157+
const vDiskPagePath = getVDiskPagePath(VDiskSlotId, PDiskId, NodeId, {database});
156158
links.push(
157159
<LinkWithIcon
158160
key={vDiskPagePath}
@@ -168,6 +170,7 @@ export function VDiskInfo<T extends PreparedVDisk>({
168170
nodeId: NodeId,
169171
pDiskId: PDiskId,
170172
vDiskSlotId: VDiskSlotId,
173+
database,
171174
});
172175

173176
links.push(

src/components/VDiskPopup/VDiskPopup.tsx

+24-8
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {createVDiskDeveloperUILink} from '../../utils/developerUI/developerUI';
1111
import {isFullVDiskData} from '../../utils/disks/helpers';
1212
import type {PreparedVDisk, UnavailableDonor} from '../../utils/disks/types';
1313
import {useTypedSelector} from '../../utils/hooks';
14+
import {useDatabaseFromQuery} from '../../utils/hooks/useDatabaseFromQuery';
1415
import {useIsUserAllowedToMakeChanges} from '../../utils/hooks/useIsUserAllowedToMakeChanges';
1516
import {bytesToGB, bytesToSpeed} from '../../utils/utils';
1617
import type {InfoViewerItem} from '../InfoViewer';
@@ -24,7 +25,11 @@ import './VDiskPopup.scss';
2425

2526
const b = cn('vdisk-storage-popup');
2627

27-
const prepareUnavailableVDiskData = (data: UnavailableDonor, withDeveloperUILink?: boolean) => {
28+
const prepareUnavailableVDiskData = (
29+
data: UnavailableDonor,
30+
withDeveloperUILink?: boolean,
31+
database?: string,
32+
) => {
2833
const {NodeId, PDiskId, VSlotId, StoragePoolName} = data;
2934

3035
const vdiskData: InfoViewerItem[] = [{label: 'State', value: 'not available'}];
@@ -49,6 +54,7 @@ const prepareUnavailableVDiskData = (data: UnavailableDonor, withDeveloperUILink
4954
nodeId: NodeId,
5055
pDiskId: PDiskId,
5156
vDiskSlotId: VSlotId,
57+
database,
5258
});
5359

5460
vdiskData.push({
@@ -61,7 +67,11 @@ const prepareUnavailableVDiskData = (data: UnavailableDonor, withDeveloperUILink
6167
};
6268

6369
// eslint-disable-next-line complexity
64-
const prepareVDiskData = (data: PreparedVDisk, withDeveloperUILink?: boolean) => {
70+
const prepareVDiskData = (
71+
data: PreparedVDisk,
72+
withDeveloperUILink?: boolean,
73+
database?: string,
74+
) => {
6575
const {
6676
NodeId,
6777
PDiskId,
@@ -160,6 +170,7 @@ const prepareVDiskData = (data: PreparedVDisk, withDeveloperUILink?: boolean) =>
160170
nodeId: NodeId,
161171
pDiskId: PDiskId,
162172
vDiskSlotId: VDiskSlotId,
173+
database,
163174
});
164175

165176
vdiskData.push({
@@ -176,16 +187,17 @@ interface VDiskPopupProps {
176187
}
177188

178189
export const VDiskPopup = ({data}: VDiskPopupProps) => {
190+
const database = useDatabaseFromQuery();
179191
const isFullData = isFullVDiskData(data);
180192

181193
const isUserAllowedToMakeChanges = useIsUserAllowedToMakeChanges();
182194

183195
const vdiskInfo = React.useMemo(
184196
() =>
185197
isFullData
186-
? prepareVDiskData(data, isUserAllowedToMakeChanges)
187-
: prepareUnavailableVDiskData(data, isUserAllowedToMakeChanges),
188-
[data, isFullData, isUserAllowedToMakeChanges],
198+
? prepareVDiskData(data, isUserAllowedToMakeChanges, database)
199+
: prepareUnavailableVDiskData(data, isUserAllowedToMakeChanges, database),
200+
[data, isFullData, isUserAllowedToMakeChanges, database],
189201
);
190202

191203
const nodesMap = useTypedSelector(selectNodesMap);
@@ -194,8 +206,8 @@ export const VDiskPopup = ({data}: VDiskPopupProps) => {
194206
() =>
195207
isFullData &&
196208
data.PDisk &&
197-
preparePDiskData(data.PDisk, nodeData, isUserAllowedToMakeChanges),
198-
[data, nodeData, isFullData, isUserAllowedToMakeChanges],
209+
preparePDiskData(data.PDisk, nodeData, isUserAllowedToMakeChanges, database),
210+
[data, nodeData, isFullData, isUserAllowedToMakeChanges, database],
199211
);
200212

201213
const donorsInfo: InfoViewerItem[] = [];
@@ -204,7 +216,11 @@ export const VDiskPopup = ({data}: VDiskPopupProps) => {
204216
for (const donor of donors) {
205217
donorsInfo.push({
206218
label: 'VDisk',
207-
value: <InternalLink to={getVDiskLink(donor)}>{donor.StringifiedId}</InternalLink>,
219+
value: (
220+
<InternalLink to={getVDiskLink(donor, database)}>
221+
{donor.StringifiedId}
222+
</InternalLink>
223+
),
208224
});
209225
}
210226
}

src/containers/Header/Header.tsx

+5-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,11 @@ function Header({mainPage}: HeaderProps) {
7474

7575
if (isUserAllowedToMakeChanges) {
7676
elements.push(
77-
<Button view="flat" href={createDeveloperUIInternalPageHref()} target="_blank">
77+
<Button
78+
view="flat"
79+
href={createDeveloperUIInternalPageHref(undefined, database)}
80+
target="_blank"
81+
>
7882
{DEVELOPER_UI_TITLE}
7983
<Icon data={ArrowUpRightFromSquare} />
8084
</Button>,

src/containers/Node/Node.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export function Node() {
5353

5454
const [autoRefreshInterval] = useAutoRefreshInterval();
5555

56-
const params = nodeId ? {nodeId} : skipToken;
56+
const params = nodeId ? {nodeId, database: tenantNameFromQuery?.toString()} : skipToken;
5757
const {
5858
currentData: node,
5959
isLoading,

src/containers/PDiskPage/PDiskPage.tsx

+7-3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {valueIsDefined} from '../../utils';
2424
import {cn} from '../../utils/cn';
2525
import {getPDiskId, getSeverityColor} from '../../utils/disks/helpers';
2626
import {useAutoRefreshInterval, useTypedDispatch} from '../../utils/hooks';
27+
import {useDatabaseFromQuery} from '../../utils/hooks/useDatabaseFromQuery';
2728
import {useIsUserAllowedToMakeChanges} from '../../utils/hooks/useIsUserAllowedToMakeChanges';
2829
import {PaginatedStorage} from '../Storage/PaginatedStorage';
2930

@@ -65,6 +66,8 @@ export function PDiskPage() {
6566
const newDiskApiAvailable = useDiskPagesAvailable();
6667
const containerRef = React.useRef<HTMLDivElement>(null);
6768

69+
const database = useDatabaseFromQuery();
70+
6871
const [{nodeId, pDiskId, activeTab}] = useQueryParams({
6972
activeTab: StringParam,
7073
nodeId: StringParam,
@@ -80,7 +83,7 @@ export function PDiskPage() {
8083
}, [dispatch, nodeId, pDiskId]);
8184

8285
const [autoRefreshInterval] = useAutoRefreshInterval();
83-
const params = pDiskParamsDefined ? {nodeId, pDiskId} : skipToken;
86+
const params = pDiskParamsDefined ? {nodeId, pDiskId, database} : skipToken;
8487
const pdiskDataQuery = pDiskApi.useGetPdiskInfoQuery(params, {
8588
pollingInterval: autoRefreshInterval,
8689
});
@@ -222,7 +225,7 @@ export function PDiskPage() {
222225
activeTab={pDiskTab}
223226
wrapTo={({id}, tabNode) => {
224227
const path = pDiskParamsDefined
225-
? getPDiskPagePath(pDiskId, nodeId, {activeTab: id})
228+
? getPDiskPagePath(pDiskId, nodeId, {activeTab: id, database})
226229
: undefined;
227230
return (
228231
<InternalLink to={path} key={id}>
@@ -240,13 +243,14 @@ export function PDiskPage() {
240243
case 'spaceDistribution': {
241244
return pDiskData ? (
242245
<div className={pdiskPageCn('disk-distribution')}>
243-
<PDiskSpaceDistribution data={pDiskData} />
246+
<PDiskSpaceDistribution data={pDiskData} database={database} />
244247
</div>
245248
) : null;
246249
}
247250
case 'storage': {
248251
return pDiskParamsDefined ? (
249252
<PaginatedStorage
253+
database={database}
250254
nodeId={nodeId}
251255
pDiskId={pDiskId}
252256
parentRef={containerRef}

0 commit comments

Comments
 (0)