import React from 'react'; import {ChevronDown, ChevronUp} from '@gravity-ui/icons'; import {Button, Flex, Icon} from '@gravity-ui/uikit'; import {isNil} from 'lodash'; import {useBlobStorageCapacityMetricsEnabled} from '../../store/reducers/capabilities/hooks'; import {cn} from '../../utils/cn'; import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants'; import type {PreparedVDisk} from '../../utils/disks/types'; import {formatMetricPercent} from '../../utils/storageMetrics'; import {CopyableValue} from '../CopyableValue/CopyableValue'; import {getVDiskCapacityItems} from '../DiskCapacityInfo/DiskCapacityInfo'; import {DiskFlagLabel} from '../DiskStatus/DiskStatus'; import {VDisk} from '../VDisk/VDisk'; import {VDiskCompactionRankLabel, VDiskFrontQueuesLabel} from '../VDiskStatus'; import type {YDBDefinitionListItem} from '../YDBDefinitionList/YDBDefinitionList'; import {YDBDefinitionList} from '../YDBDefinitionList/YDBDefinitionList'; import {getVDiskIdentityItems, getVDiskThroughputItems} from './getVDiskDetails'; import {vDiskInfoKeyset} from './i18n'; import './VDiskInfo.scss'; const b = cn('ydb-vdisk-info'); interface VDiskInfoProps { data?: PreparedVDisk; className?: string; } function getPageCapacityItems(data: PreparedVDisk, capacityMetricsEnabled: boolean) { const capacityItems = getVDiskCapacityItems(data, {capacityMetricsEnabled}); if (!capacityMetricsEnabled) { capacityItems.push( { id: 'usage', name: vDiskInfoKeyset('usage'), content: formatMetricPercent(data.AllocatedPercent, 2), }, { id: 'disk-space', name: vDiskInfoKeyset('space-status'), content: , }, ); } return capacityItems; } export function VDiskInfo({data = {}, className}: VDiskInfoProps) { const [expanded, setExpanded] = React.useState(false); const capacityMetricsEnabled = useBlobStorageCapacityMetricsEnabled(); const donors = data.Replicated === false ? data.Donors : undefined; const disks = data.DonorMode ? [data.Recipient].filter((disk) => disk !== undefined) : donors; const runtimeItems: YDBDefinitionListItem[] = [ { name: vDiskInfoKeyset('front-queues'), content: , }, { name: vDiskInfoKeyset('field_compaction'), content: ( ), }, { name: vDiskInfoKeyset('has-unreadable-blobs'), content: isNil(data.HasUnreadableBlobs) ? EMPTY_DATA_PLACEHOLDER : vDiskInfoKeyset(data.HasUnreadableBlobs ? 'yes' : 'no'), }, ...getVDiskThroughputItems(data), { name: vDiskInfoKeyset(data.DonorMode ? 'label_recipient' : 'donors'), content: disks?.length ? ( {disks.map((disk) => (
))}
) : ( vDiskInfoKeyset('no') ), }, ]; const capacityItems = getPageCapacityItems(data, capacityMetricsEnabled); const identityItems = getVDiskIdentityItems(data, { copyFields: ['guid', 'incarnation-guid', 'instance-guid'], }).map(({copyText, ...item}) => ({ ...item, content: ( {item.content} ), })); return ( {capacityItems.length > 0 && ( )} {expanded && ( )} ); }