Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/services/api/pdisk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ export class PDiskAPI extends BaseYdbAPI {
const pDiskPath = createPDiskDeveloperUILink({
nodeId,
pDiskId,
host: this.getPath(''),
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is default value in createDeveloperUILinkWithNodeId, that is used in createPDiskDeveloperUILink

});

return this.post<ModifyDiskResponse>(
Expand Down
10 changes: 10 additions & 0 deletions src/utils/developerUI/__test__/developerUI.test.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import type {YdbEmbeddedAPI} from '../../../services/api';
import {
createDeveloperUIInternalPageHref,
createDeveloperUILinkWithNodeId,
Expand All @@ -6,6 +7,15 @@ import {
} from '../developerUI';

describe('Developer UI links generators', () => {
beforeAll(() => {
const api = {
viewer: {
getPath: () => '',
},
};
window.api = api as unknown as YdbEmbeddedAPI;
});

describe('createDeveloperUIInternalPageHref', () => {
test('should create correct link for embedded UI', () => {
expect(createDeveloperUIInternalPageHref('')).toBe('/internal');
Expand Down
25 changes: 15 additions & 10 deletions src/utils/developerUI/developerUI.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,23 @@
import {backend} from '../../store';
import {pad9} from '../utils';

export function createDeveloperUIInternalPageHref(host = backend) {
function getCurrentHost() {
// It always has correct backend
return window.api.viewer.getPath('');
}

export function createDeveloperUIInternalPageHref(host = getCurrentHost()) {
return host + '/internal';
}

export function createDeveloperUIMonitoringPageHref(host = backend) {
export function createDeveloperUIMonitoringPageHref(host = getCurrentHost()) {
return host + '/monitoring';
}

// Current node connects with target node by itself using nodeId
export const createDeveloperUILinkWithNodeId = (nodeId: number | string, host = backend) => {
export const createDeveloperUILinkWithNodeId = (
nodeId: number | string,
host = getCurrentHost(),
) => {
const nodePathRegexp = /\/node\/\d+\/?$/g;

// In case current backend is already relative node path ({host}/node/{nodeId})
Expand All @@ -25,13 +32,12 @@ export const createDeveloperUILinkWithNodeId = (nodeId: number | string, host =
interface PDiskDeveloperUILinkParams {
nodeId: number | string;
pDiskId: number | string;
host?: string;
}

export const createPDiskDeveloperUILink = ({nodeId, pDiskId, host}: PDiskDeveloperUILinkParams) => {
export const createPDiskDeveloperUILink = ({nodeId, pDiskId}: PDiskDeveloperUILinkParams) => {
const pdiskPath = '/actors/pdisks/pdisk' + pad9(pDiskId);

return createDeveloperUILinkWithNodeId(nodeId, host) + pdiskPath;
return createDeveloperUILinkWithNodeId(nodeId) + pdiskPath;
};

interface VDiskDeveloperUILinkParams extends PDiskDeveloperUILinkParams {
Expand All @@ -42,18 +48,17 @@ export const createVDiskDeveloperUILink = ({
nodeId,
pDiskId,
vDiskSlotId,
host,
}: VDiskDeveloperUILinkParams) => {
const vdiskPath = '/actors/vdisks/vdisk' + pad9(pDiskId) + '_' + pad9(vDiskSlotId);

return createDeveloperUILinkWithNodeId(nodeId, host) + vdiskPath;
return createDeveloperUILinkWithNodeId(nodeId) + vdiskPath;
};

export function createTabletDeveloperUIHref(
tabletId: number | string,
tabletPage?: string,
searchParam = 'TabletID',
host = backend,
host = getCurrentHost(),
) {
const subPage = tabletPage ? `/${tabletPage}` : '';
return `${host}/tablets${subPage}?${searchParam}=${tabletId}`;
Expand Down
10 changes: 8 additions & 2 deletions src/utils/hooks/useNodeDeveloperUIHref.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,22 @@ import {useTypedSelector} from './useTypedSelector';
export function useNodeDeveloperUIHref(node?: NodeAddress) {
const singleClusterMode = useTypedSelector((state) => state.singleClusterMode);

const {balancer = backend} = useClusterBaseInfo();
const {balancer = backend, settings} = useClusterBaseInfo();
const isUserAllowedToMakeChanges = useIsUserAllowedToMakeChanges();

const useMetaProxy = settings?.use_meta_proxy;

if (!isUserAllowedToMakeChanges) {
return undefined;
}

// Only for multi-cluster version since there is no balancer in single-cluster mode
if (!singleClusterMode) {
const developerUIHref = getBackendFromBalancerAndNodeId(node?.NodeId, balancer ?? '');
const developerUIHref = getBackendFromBalancerAndNodeId(
node?.NodeId,
balancer,
useMetaProxy,
);
return developerUIHref ? createDeveloperUIInternalPageHref(developerUIHref) : undefined;
}

Expand Down
12 changes: 9 additions & 3 deletions src/utils/prepareBackend.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import {createDeveloperUILinkWithNodeId} from './developerUI/developerUI';
import {prepareBackendFromBalancer} from './parseBalancer';

import {valueIsDefined} from '.';
Expand All @@ -8,10 +9,15 @@ export const prepareHost = (host?: string) => {
};

/** For multi-cluster version */
export const getBackendFromBalancerAndNodeId = (nodeId?: string | number, balancer?: string) => {
export const getBackendFromBalancerAndNodeId = (
nodeId?: string | number,
balancer?: string,
useMetaProxy?: boolean,
) => {
if (valueIsDefined(nodeId) && valueIsDefined(balancer)) {
const preparedBalancer = prepareBackendFromBalancer(balancer);
return `${preparedBalancer}/node/${nodeId}`;
// Use default value instead of balancer if meta proxy is enabled
const preparedBalancer = useMetaProxy ? undefined : prepareBackendFromBalancer(balancer);
return createDeveloperUILinkWithNodeId(nodeId, preparedBalancer);
}

return undefined;
Expand Down
Loading