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
4 changes: 2 additions & 2 deletions src/components/NodeHostWrapper/NodeHostWrapper.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {PopoverBehavior} from '@gravity-ui/uikit';

import {getDefaultNodePath} from '../../containers/Node/NodePages';
import type {NodeAddress} from '../../types/additionalProps';
import type {GetNodeRefFunc, NodeAddress} from '../../types/additionalProps';
import type {TNodeInfo, TSystemStateInfo} from '../../types/api/nodes';
import {
createDeveloperUIInternalPageHref,
Expand All @@ -23,7 +23,7 @@ export type StatusForIcon = 'SystemState' | 'ConnectStatus';

interface NodeHostWrapperProps {
node: NodeHostData;
getNodeRef?: (node?: NodeAddress) => string | null;
getNodeRef?: GetNodeRefFunc;
database?: string;
statusForIcon?: StatusForIcon;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,14 @@ import type {MetaClusterVersion} from '../../../types/api/meta';
import type {ETenantType} from '../../../types/api/tenant';
import {getVersionColors, getVersionMap} from '../../../utils/clusterVersionColors';
import {cn} from '../../../utils/cn';
import {USE_CLUSTER_BALANCER_AS_BACKEND_KEY} from '../../../utils/constants';
import {useSetting} from '../../../utils/hooks';
import {useAdditionalNodesProps} from '../../../utils/hooks/useAdditionalNodesProps';
import type {GetMonitoringClusterLink, GetMonitoringLink} from '../../../utils/monitoring';
import {getCleanBalancerValue, removeViewerPathname} from '../../../utils/parseBalancer';
import {getBackendFromNodeHost, getBackendFromRawNodeData} from '../../../utils/prepareBackend';
import type {Cluster} from '../../Cluster/Cluster';
import {useClusterData} from '../useClusterData';
import {useClusterVersions} from '../useClusterData';

import './ExtendedCluster.scss';

Expand Down Expand Up @@ -123,10 +126,12 @@ export function ExtendedCluster({
getMonitoringLink,
getMonitoringClusterLink,
}: ExtendedClusterProps) {
const {versions, useClusterBalancerAsBackend, additionalNodesProps} = useClusterData();

const versions = useClusterVersions();
const additionalNodesProps = useAdditionalNodesProps();
const {name, balancer, monitoring} = useClusterBaseInfo();

const [useClusterBalancerAsBackend] = useSetting<boolean>(USE_CLUSTER_BALANCER_AS_BACKEND_KEY);

return (
<div className={b()}>
<ClusterComponent
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import {useClusterBaseInfo} from '../../../store/reducers/cluster/cluster';
import type {ETenantType} from '../../../types/api/tenant';
import {useAdditionalNodesProps} from '../../../utils/hooks/useAdditionalNodesProps';
import type {GetMonitoringLink} from '../../../utils/monitoring';
import type {Tenant} from '../../Tenant/Tenant';
import {useAdditionalNodeProps} from '../useClusterData';

export interface ExtendedTenantProps {
component: typeof Tenant;
Expand All @@ -13,8 +13,8 @@ export function ExtendedTenant({
component: TenantComponent,
getMonitoringLink,
}: ExtendedTenantProps) {
const {balancer, monitoring} = useClusterBaseInfo();
const {additionalNodesProps} = useAdditionalNodeProps({balancer});
const {monitoring} = useClusterBaseInfo();
const additionalNodesProps = useAdditionalNodesProps();

const additionalTenantProps = {
getMonitoringLink: (dbName?: string, dbType?: ETenantType) => {
Expand Down
27 changes: 4 additions & 23 deletions src/containers/AppWithClusters/useClusterData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,15 @@ import React from 'react';
import {StringParam, useQueryParam} from 'use-query-params';

import {clustersApi} from '../../store/reducers/clusters/clusters';
import {getAdditionalNodesProps} from '../../utils/additionalProps';
import {USE_CLUSTER_BALANCER_AS_BACKEND_KEY} from '../../utils/constants';
import {useSetting} from '../../utils/hooks';

export function useClusterData() {
export function useClusterVersions() {
const [clusterName] = useQueryParam('clusterName', StringParam);

const {data} = clustersApi.useGetClustersListQuery(undefined);

const info = React.useMemo(() => {
return React.useMemo(() => {
const clusters = data || [];
return clusters.find((cluster) => cluster.name === clusterName);
const info = clusters.find((cluster) => cluster.name === clusterName);
return info?.versions;
}, [data, clusterName]);

const {solomon: monitoring, balancer, versions} = info || {};

return {
monitoring,
balancer,
versions,
...useAdditionalNodeProps({balancer}),
};
}

export function useAdditionalNodeProps({balancer}: {balancer?: string}) {
const [useClusterBalancerAsBackend] = useSetting<boolean>(USE_CLUSTER_BALANCER_AS_BACKEND_KEY);

const additionalNodesProps = getAdditionalNodesProps(balancer, useClusterBalancerAsBackend);

return {additionalNodesProps, useClusterBalancerAsBackend};
}
1 change: 0 additions & 1 deletion src/containers/Cluster/Cluster.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,6 @@ export function Cluster({
>
<ClusterInfo
cluster={cluster}
versionToColor={versionToColor}
loading={infoLoading}
error={clusterError}
additionalClusterProps={additionalClusterProps}
Expand Down
2 changes: 0 additions & 2 deletions src/containers/Cluster/ClusterInfo/ClusterInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import {LinkWithIcon} from '../../../components/LinkWithIcon/LinkWithIcon';
import type {AdditionalClusterProps} from '../../../types/additionalProps';
import type {TClusterInfo} from '../../../types/api/cluster';
import type {IResponseError} from '../../../types/api/error';
import type {VersionToColorMap} from '../../../types/versions';
import i18n from '../i18n';

import {b} from './shared';
Expand All @@ -17,7 +16,6 @@ import './ClusterInfo.scss';

interface ClusterInfoProps {
cluster?: TClusterInfo;
versionToColor?: VersionToColorMap;
Copy link
Member Author

Choose a reason for hiding this comment

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

It is not used here

loading?: boolean;
error?: IResponseError;
additionalClusterProps?: AdditionalClusterProps;
Expand Down
6 changes: 2 additions & 4 deletions src/containers/Storage/PaginatedStorageNodes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,10 @@ import {
useCapabilitiesLoaded,
useViewerNodesHandlerHasGrouping,
} from '../../store/reducers/capabilities/hooks';
import {useClusterBaseInfo} from '../../store/reducers/cluster/cluster';
import {storageApi} from '../../store/reducers/storage/storage';
import {useAutoRefreshInterval} from '../../utils/hooks';
import {useAdditionalNodesProps} from '../../utils/hooks/useAdditionalNodesProps';
import {NodesUptimeFilterValues} from '../../utils/nodes';
import {useAdditionalNodeProps} from '../AppWithClusters/useClusterData';

import type {PaginatedStorageProps} from './PaginatedStorage';
import {StorageNodesControls} from './StorageControls/StorageControls';
Expand Down Expand Up @@ -210,8 +209,7 @@ function useStorageNodesColumnsToSelect({
database?: string;
viewContext?: StorageViewContext;
}) {
const {balancer} = useClusterBaseInfo();
const {additionalNodesProps} = useAdditionalNodeProps({balancer});
const additionalNodesProps = useAdditionalNodesProps();
const {visibleEntities} = useStorageQueryParams();

return useStorageNodesSelectedColumns({
Expand Down
8 changes: 3 additions & 5 deletions src/containers/Versions/NodesTable/NodesTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,9 @@ import {
getUptimeColumn,
} from '../../../components/nodesColumns/columns';
import type {GetNodesColumnsParams} from '../../../components/nodesColumns/types';
import {useClusterBaseInfo} from '../../../store/reducers/cluster/cluster';
import type {NodesPreparedEntity} from '../../../store/reducers/nodes/types';
import {DEFAULT_TABLE_SETTINGS} from '../../../utils/constants';
import {useAdditionalNodeProps} from '../../AppWithClusters/useClusterData';
import {useAdditionalNodesProps} from '../../../utils/hooks/useAdditionalNodesProps';

const VERSIONS_COLUMNS_WIDTH_LS_KEY = 'versionsTableColumnsWidth';

Expand All @@ -33,10 +32,9 @@ interface NodesTableProps {
}

export const NodesTable = ({nodes}: NodesTableProps) => {
const {balancer} = useClusterBaseInfo();
const {additionalNodesProps} = useAdditionalNodeProps({balancer});
const additionalNodesProps = useAdditionalNodesProps();

const columns = getColumns({getNodeRef: additionalNodesProps.getNodeRef});
const columns = getColumns({getNodeRef: additionalNodesProps?.getNodeRef});

return (
<ResizeableDataTable
Expand Down
2 changes: 1 addition & 1 deletion src/types/additionalProps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export interface AdditionalTenantsProps {

export type NodeAddress = Pick<TSystemStateInfo, 'Host' | 'Endpoints' | 'NodeId'>;

export type GetNodeRefFunc = (node?: NodeAddress) => string | null;
export type GetNodeRefFunc = (node?: NodeAddress) => string | undefined;

export interface AdditionalNodesProps extends Record<string, unknown> {
getNodeRef?: GetNodeRefFunc;
Expand Down
17 changes: 17 additions & 0 deletions src/utils/hooks/useAdditionalNodesProps.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import {useClusterBaseInfo} from '../../store/reducers/cluster/cluster';
import {getAdditionalNodesProps} from '../additionalProps';
import {USE_CLUSTER_BALANCER_AS_BACKEND_KEY} from '../constants';

import {useSetting} from './useSetting';
import {useTypedSelector} from './useTypedSelector';

/** For multi-cluster version */
export function useAdditionalNodesProps() {
const {balancer} = useClusterBaseInfo();
const [useClusterBalancerAsBackend] = useSetting<boolean>(USE_CLUSTER_BALANCER_AS_BACKEND_KEY);
const singleClusterMode = useTypedSelector((state) => state.singleClusterMode);

const additionalNodesProps = getAdditionalNodesProps(balancer, useClusterBalancerAsBackend);

return singleClusterMode ? undefined : additionalNodesProps;
Copy link
Member Author

@artemmufazalov artemmufazalov Feb 24, 2025

Choose a reason for hiding this comment

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

There was no check for singleClusterMode, so useNodeDeveloperUIHref always used additionalNodesProps and formed incorrect href when app was started with REACT_APP_BACKEND

}
6 changes: 2 additions & 4 deletions src/utils/hooks/useNodeDeveloperUIHref.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
import {useAdditionalNodeProps} from '../../containers/AppWithClusters/useClusterData';
import {useClusterBaseInfo} from '../../store/reducers/cluster/cluster';
import type {PreparedNode} from '../../store/reducers/node/types';
import {
createDeveloperUIInternalPageHref,
createDeveloperUILinkWithNodeId,
} from '../developerUI/developerUI';

import {useAdditionalNodesProps} from './useAdditionalNodesProps';
import {useIsUserAllowedToMakeChanges} from './useIsUserAllowedToMakeChanges';

export function useNodeDeveloperUIHref(node?: PreparedNode) {
const {balancer} = useClusterBaseInfo();
const {additionalNodesProps} = useAdditionalNodeProps({balancer});
const additionalNodesProps = useAdditionalNodesProps();
const isUserAllowedToMakeChanges = useIsUserAllowedToMakeChanges();

if (!isUserAllowedToMakeChanges) {
Expand Down
5 changes: 3 additions & 2 deletions src/utils/prepareBackend.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export const getBackendFromNodeHost = (nodeHost: string, balancer: string) => {
return https + preparedHost;
};

/** For multi-cluster version */
export const getBackendFromRawNodeData = (
node: NodeAddress,
balancer: string,
Expand All @@ -36,7 +37,7 @@ export const getBackendFromRawNodeData = (
const nodePort = Endpoints.find((endpoint) => endpoint.Name === 'http-mon')?.Address;

if (!nodePort || !Host) {
return null;
return undefined;
}

const hostWithPort = Host + nodePort;
Expand All @@ -46,5 +47,5 @@ export const getBackendFromRawNodeData = (
return getBackendFromNodeHost(hostWithPort, balancer);
}

return null;
return undefined;
};
Loading