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: 1 addition & 0 deletions src/components/FullNodeViewer/FullNodeViewer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ const getLoadAverageIntervalTitle = (index: number) => {
return [i18n('la-interval-1m'), i18n('la-interval-5m'), i18n('la-interval-15m')][index];
};

// eslint-disable-next-line complexity
export const FullNodeViewer = ({node, className}: FullNodeViewerProps) => {
const developerUIHref = useNodeDeveloperUIHref(node);

Expand Down
9 changes: 2 additions & 7 deletions src/components/NetworkTable/NetworkTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,14 @@ import {

type NetworkWrapperProps = Pick<
NodesProps,
'path' | 'scrollContainerRef' | 'additionalNodesProps' | 'database' | 'databaseFullPath'
'path' | 'scrollContainerRef' | 'database' | 'databaseFullPath'
>;

export function NetworkTable({
database,
databaseFullPath,
path,
scrollContainerRef,
additionalNodesProps,
}: NetworkWrapperProps) {
return (
<Nodes
Expand All @@ -28,11 +27,7 @@ export function NetworkTable({
databaseFullPath={databaseFullPath}
scrollContainerRef={scrollContainerRef}
withPeerRoleFilter={Boolean(database)}
additionalNodesProps={additionalNodesProps}
columns={getNetworkTableNodesColumns({
database,
getNodeRef: additionalNodesProps?.getNodeRef,
})}
columns={getNetworkTableNodesColumns({database})}
defaultColumnsIds={NETWORK_DEFAULT_NODES_COLUMNS}
requiredColumnsIds={NETWORK_REQUIRED_NODES_COLUMNS}
selectedColumnsKey={NETWORK_NODES_TABLE_SELECTED_COLUMNS_KEY}
Expand Down
26 changes: 4 additions & 22 deletions src/components/NodeHostWrapper/NodeHostWrapper.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import {getDefaultNodePath} from '../../containers/Node/NodePages';
import type {GetNodeRefFunc, NodeAddress} from '../../types/additionalProps';
import type {PreparedStorageNode} from '../../store/reducers/storage/types';
import type {NodeAddress} from '../../types/additionalProps';
import type {TNodeInfo, TSystemStateInfo} from '../../types/api/nodes';
import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
import {
createDeveloperUIInternalPageHref,
createDeveloperUILinkWithNodeId,
} from '../../utils/developerUI/developerUI';
import {isUnavailableNode} from '../../utils/nodes';
import {EntityStatus} from '../EntityStatus/EntityStatus';
import {NodeEndpointsTooltipContent} from '../TooltipsContent';
Expand All @@ -18,15 +15,13 @@ export type NodeHostData = NodeAddress &
};

interface NodeHostWrapperProps {
node: NodeHostData;
getNodeRef?: GetNodeRefFunc;
node: PreparedStorageNode;
database?: string;
statusForIcon?: 'SystemState' | 'ConnectStatus';
}

export const NodeHostWrapper = ({
node,
getNodeRef,
database,
statusForIcon = 'SystemState',
}: NodeHostWrapperProps) => {
Expand All @@ -38,17 +33,6 @@ export const NodeHostWrapper = ({

const isNodeAvailable = !isUnavailableNode(node);

let developerUIInternalHref: string | undefined;
if (getNodeRef) {
const developerUIHref = getNodeRef(node);
developerUIInternalHref = developerUIHref
? createDeveloperUIInternalPageHref(developerUIHref)
: undefined;
} else if (node.NodeId) {
const developerUIHref = createDeveloperUILinkWithNodeId(node.NodeId);
developerUIInternalHref = createDeveloperUIInternalPageHref(developerUIHref);
}

const nodePath = isNodeAvailable
? getDefaultNodePath(
node.NodeId,
Expand All @@ -66,9 +50,7 @@ export const NodeHostWrapper = ({
path={nodePath}
hasClipboardButton
infoPopoverContent={
isNodeAvailable ? (
<NodeEndpointsTooltipContent data={node} nodeHref={developerUIInternalHref} />
) : null
isNodeAvailable ? <NodeEndpointsTooltipContent data={node} /> : null
}
/>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type {DefinitionListItemProps} from '@gravity-ui/uikit';
import {DefinitionList} from '@gravity-ui/uikit';

import type {TSystemStateInfo} from '../../../types/api/nodes';
import type {PreparedStorageNode} from '../../../store/reducers/storage/types';
import {cn} from '../../../utils/cn';
import {useIsUserAllowedToMakeChanges} from '../../../utils/hooks/useIsUserAllowedToMakeChanges';
import {useNodeDeveloperUIHref} from '../../../utils/hooks/useNodeDeveloperUIHref';
import {LinkWithIcon} from '../../LinkWithIcon/LinkWithIcon';

import i18n from './i18n';
Expand All @@ -13,12 +13,12 @@ import './NodeEndpointsTooltipContent.scss';
const b = cn('ydb-node-endpoints-tooltip-content');

interface NodeEdpointsTooltipProps {
data?: TSystemStateInfo;
nodeHref?: string;
data?: PreparedStorageNode;
}

export const NodeEndpointsTooltipContent = ({data, nodeHref}: NodeEdpointsTooltipProps) => {
const isUserAllowedToMakeChanges = useIsUserAllowedToMakeChanges();
export const NodeEndpointsTooltipContent = ({data}: NodeEdpointsTooltipProps) => {
const developerUIInternalHref = useNodeDeveloperUIHref(data);

const info: (DefinitionListItemProps & {key: string})[] = [];

if (data?.Roles?.length) {
Expand Down Expand Up @@ -58,10 +58,12 @@ export const NodeEndpointsTooltipContent = ({data, nodeHref}: NodeEdpointsToolti
});
}

if (isUserAllowedToMakeChanges && nodeHref) {
if (developerUIInternalHref) {
Copy link
Member Author

Choose a reason for hiding this comment

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

We now check isUserAllowedToMakeChanges inside useNodeDeveloperUIHref

info.push({
name: 'Links',
children: <LinkWithIcon title={i18n('context_developer-ui')} url={nodeHref} />,
children: (
<LinkWithIcon title={i18n('context_developer-ui')} url={developerUIInternalHref} />
),
key: 'developerUi',
});
}
Expand Down
17 changes: 5 additions & 12 deletions src/components/nodesColumns/columns.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import DataTable from '@gravity-ui/react-data-table';
import {DefinitionList} from '@gravity-ui/uikit';

import type {PreparedStorageNode} from '../../store/reducers/storage/types';
import type {TMemoryStats, TPoolStats} from '../../types/api/nodes';
import type {TTabletStateInfo} from '../../types/api/tablet';
import {valueIsDefined} from '../../utils';
Expand All @@ -17,7 +18,6 @@ import {bytesToSpeed, isNumeric} from '../../utils/utils';
import {CellWithPopover} from '../CellWithPopover/CellWithPopover';
import {MemoryViewer} from '../MemoryViewer/MemoryViewer';
import {NodeHostWrapper} from '../NodeHostWrapper/NodeHostWrapper';
import type {NodeHostData} from '../NodeHostWrapper/NodeHostWrapper';
import {PoolsGraph} from '../PoolsGraph/PoolsGraph';
import {ProgressViewer} from '../ProgressViewer/ProgressViewer';
import {TabletsStatistic} from '../TabletsStatistic';
Expand All @@ -44,15 +44,14 @@ export function getNodeIdColumn<T extends {NodeId?: string | number}>(): Column<
align: DataTable.RIGHT,
};
}
export function getHostColumn<T extends NodeHostData>({
getNodeRef,
export function getHostColumn<T extends PreparedStorageNode>({
database,
}: GetNodesColumnsParams): Column<T> {
return {
name: NODES_COLUMNS_IDS.Host,
header: NODES_COLUMNS_TITLES.Host,
render: ({row}) => {
return <NodeHostWrapper node={row} getNodeRef={getNodeRef} database={database} />;
return <NodeHostWrapper node={row} database={database} />;
},
width: 350,
align: DataTable.LEFT,
Expand All @@ -62,21 +61,15 @@ export function getHostColumn<T extends NodeHostData>({
// Different column for different set of required fields
// ConnectStatus is required here, it makes handler to return network stats
// On versions before 25-1-2 ConnectStatus also makes handler to return peers - it can significantly increase response size
export function getNetworkHostColumn<T extends NodeHostData>({
getNodeRef,
export function getNetworkHostColumn<T extends PreparedStorageNode>({
database,
}: GetNodesColumnsParams): Column<T> {
return {
name: NODES_COLUMNS_IDS.NetworkHost,
header: NODES_COLUMNS_TITLES.NetworkHost,
render: ({row}) => {
return (
<NodeHostWrapper
node={row}
getNodeRef={getNodeRef}
database={database}
statusForIcon={'ConnectStatus'}
/>
<NodeHostWrapper node={row} database={database} statusForIcon={'ConnectStatus'} />
);
},
width: 350,
Expand Down
2 changes: 0 additions & 2 deletions src/components/nodesColumns/types.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import type {StorageNodesColumnsSettings} from '../../containers/Storage/PaginatedStorageNodesTable/columns/types';
import type {StorageViewContext} from '../../containers/Storage/types';
import type {PreparedStorageNode} from '../../store/reducers/storage/types';
import type {GetNodeRefFunc} from '../../types/additionalProps';
import type {Column} from '../../utils/tableUtils/types';

export interface GetNodesColumnsParams {
getNodeRef?: GetNodeRefFunc;
database?: string;

viewContext?: StorageViewContext;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import {useClusterBaseInfo} from '../../../store/reducers/cluster/cluster';
import type {AdditionalClusterProps} from '../../../types/additionalProps';
import type {GetClusterLinks, GetDatabaseLinks} from '../../../uiFactory/types';
import {cn} from '../../../utils/cn';
import {useAdditionalNodesProps} from '../../../utils/hooks/useAdditionalNodesProps';
import type {GetLogsLink} from '../../../utils/logs';
import type {GetMonitoringClusterLink, GetMonitoringLink} from '../../../utils/monitoring';
import {getCleanBalancerValue} from '../../../utils/parseBalancer';
Expand Down Expand Up @@ -79,8 +78,6 @@ export function ExtendedCluster({
getDatabaseLinks,
getClusterLinks,
}: ExtendedClusterProps) {
const additionalNodesProps = useAdditionalNodesProps();

return (
<div className={b()}>
<ClusterComponent
Expand All @@ -93,7 +90,6 @@ export function ExtendedCluster({
getLogsLink,
getDatabaseLinks,
})}
additionalNodesProps={additionalNodesProps}
/>
</div>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import type {GetDatabaseLinks} from '../../../uiFactory/types';
import {useAdditionalNodesProps} from '../../../utils/hooks/useAdditionalNodesProps';
import type {GetLogsLink} from '../../../utils/logs';
import type {GetMonitoringLink} from '../../../utils/monitoring';
import type {Tenant} from '../../Tenant/Tenant';
Expand All @@ -18,17 +17,11 @@ export function ExtendedTenant({
getLogsLink,
getDatabaseLinks,
}: ExtendedTenantProps) {
const additionalNodesProps = useAdditionalNodesProps();
const additionalTenantProps = useAdditionalTenantsProps({
getMonitoringLink,
getLogsLink,
getDatabaseLinks,
});

return (
<TenantComponent
additionalTenantProps={additionalTenantProps}
additionalNodesProps={additionalNodesProps}
/>
);
return <TenantComponent additionalTenantProps={additionalTenantProps} />;
}
23 changes: 4 additions & 19 deletions src/containers/Cluster/Cluster.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,7 @@ import {
useClusterBaseInfo,
} from '../../store/reducers/cluster/cluster';
import {setHeaderBreadcrumbs} from '../../store/reducers/header/header';
import type {
AdditionalClusterProps,
AdditionalNodesProps,
AdditionalTenantsProps,
} from '../../types/additionalProps';
import type {AdditionalClusterProps, AdditionalTenantsProps} from '../../types/additionalProps';
import {EFlag} from '../../types/api/enums';
import {uiFactory} from '../../uiFactory/uiFactory';
import {cn} from '../../utils/cn';
Expand Down Expand Up @@ -60,15 +56,10 @@ const b = cn('ydb-cluster');

interface ClusterProps {
additionalTenantsProps?: AdditionalTenantsProps;
additionalNodesProps?: AdditionalNodesProps;
additionalClusterProps?: AdditionalClusterProps;
}

export function Cluster({
additionalClusterProps,
additionalTenantsProps,
additionalNodesProps,
}: ClusterProps) {
export function Cluster({additionalClusterProps, additionalTenantsProps}: ClusterProps) {
const container = React.useRef<HTMLDivElement>(null);
const isClusterDashboardAvailable = useClusterDashboardAvailable();

Expand Down Expand Up @@ -237,10 +228,7 @@ export function Cluster({
.pathname
}
>
<Nodes
scrollContainerRef={container}
additionalNodesProps={additionalNodesProps}
/>
<Nodes scrollContainerRef={container} />
</Route>
<Route
path={
Expand All @@ -258,10 +246,7 @@ export function Cluster({
).pathname
}
>
<NetworkTable
scrollContainerRef={container}
additionalNodesProps={additionalNodesProps}
/>
<NetworkTable scrollContainerRef={container} />
</Route>
)}
<Route
Expand Down
10 changes: 1 addition & 9 deletions src/containers/Nodes/Nodes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import {
import type {NodesColumnId} from '../../components/nodesColumns/constants';
import type {NodesColumn} from '../../components/nodesColumns/types';
import {useBridgeModeEnabled} from '../../store/reducers/capabilities/hooks';
import type {AdditionalNodesProps} from '../../types/additionalProps';
import type {NodesGroupByField} from '../../types/api/nodes';
import {
useIsUserAllowedToMakeChanges,
Expand All @@ -32,7 +31,6 @@ export interface NodesProps {
database?: string;
databaseFullPath?: string;
scrollContainerRef: React.RefObject<HTMLElement>;
additionalNodesProps?: AdditionalNodesProps;
withPeerRoleFilter?: boolean;
columns?: NodesColumn[];
defaultColumnsIds?: NodesColumnId[];
Expand All @@ -46,7 +44,6 @@ export function Nodes({
database,
databaseFullPath,
scrollContainerRef,
additionalNodesProps,
withPeerRoleFilter,
columns: externalColumns,
defaultColumnsIds = DEFAULT_NODES_COLUMNS,
Expand All @@ -56,12 +53,7 @@ export function Nodes({
}: NodesProps) {
const {handleDataFetched, columnsSettings} = useStorageColumnsSettings();

const columns = useGetNodesColumns({
columns: externalColumns,
database,
getNodeRef: additionalNodesProps?.getNodeRef,
columnsSettings,
});
const columns = useGetNodesColumns({columns: externalColumns, database, columnsSettings});

const bridgeModeEnabled = useBridgeModeEnabled();

Expand Down
10 changes: 2 additions & 8 deletions src/containers/Nodes/columns/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import {getNodesColumns} from './columns';
export function useGetNodesColumns({
columns: externalColumns,
database,
getNodeRef,
viewContext,
columnsSettings,
}: GetNodesColumnsParams & {columns?: NodesColumn[]}) {
Expand All @@ -17,14 +16,9 @@ export function useGetNodesColumns({
if (externalColumns) {
columns = externalColumns;
} else {
columns = getNodesColumns({
database,
getNodeRef,
viewContext,
columnsSettings,
});
columns = getNodesColumns({database, viewContext, columnsSettings});
}

return columns;
}, [externalColumns, database, getNodeRef, viewContext, columnsSettings]);
}, [externalColumns, database, viewContext, columnsSettings]);
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import {useAdditionalNodesProps} from '../../../utils/hooks/useAdditionalNodesProps';
import {useStorageNodesSelectedColumns} from '../PaginatedStorageNodesTable/columns/hooks';
import type {StorageNodesColumnsSettings} from '../PaginatedStorageNodesTable/columns/types';
import type {StorageViewContext} from '../types';
Expand All @@ -13,11 +12,9 @@ export function useStorageNodesColumnsToSelect({
viewContext?: StorageViewContext;
columnsSettings?: StorageNodesColumnsSettings;
}) {
const additionalNodesProps = useAdditionalNodesProps();
const {visibleEntities} = useStorageQueryParams();

return useStorageNodesSelectedColumns({
additionalNodesProps,
visibleEntities,
database,
viewContext,
Expand Down
Loading
Loading