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 && (
)}
);
}