import type {PreparedStorageGroup} from '../../store/reducers/storage/types'; import {normalizeCapacityAlert} from '../../utils/capacityAlerts'; import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants'; import type {DiskDetailItem} from '../../utils/disks/diskInfo/getDiskLocationItems'; import type {PreparedPDisk, PreparedVDisk} from '../../utils/disks/types'; import { formatMetricCountPair, formatMetricPercent, formatNormalizedMetricPercent, formatStorageMetricPair, } from '../../utils/storageMetrics'; import {DiskCapacityAlertLabel} from '../DiskStatus/DiskStatus'; import {pDiskInfoKeyset} from '../PDiskInfo/i18n'; import {vDiskInfoKeyset} from '../VDiskInfo/i18n'; import { CAPACITY_CONFIGURATION_HELP_TEXT, CAPACITY_METRICS_COLUMN_TITLES, CAPACITY_METRICS_HELP_TEXT, } from '../capacityMetricsColumns/constants'; import {formatCapacityUnitCount} from '../capacityMetricsColumns/formatters'; import i18n from './i18n'; export function getVDiskCapacityItems( data: PreparedVDisk, {capacityMetricsEnabled}: {capacityMetricsEnabled: boolean}, ): DiskDetailItem[] { const size = (capacityMetricsEnabled ? data.WhiteboardSize : undefined) ?? data.DisplaySize ?? data; const items: DiskDetailItem[] = [ { id: 'group-size-in-units', name: vDiskInfoKeyset('field_group-size-in-units'), content: formatCapacityUnitCount(data.GroupSizeInUnits), note: CAPACITY_CONFIGURATION_HELP_TEXT.GroupSizeInUnits, }, { id: 'size', name: vDiskInfoKeyset('size'), content: formatStorageMetricPair(size.AllocatedSize, size.SizeLimit, 2), }, { id: 'capacity-alert', name: vDiskInfoKeyset('field_capacity-alert'), content: , note: CAPACITY_METRICS_HELP_TEXT.CapacityAlert, }, { id: 'vdisk-slot-usage', name: CAPACITY_METRICS_COLUMN_TITLES.MaxVDiskSlotUsage, content: formatMetricPercent(data.VDiskSlotUsage, 2), note: CAPACITY_METRICS_HELP_TEXT.MaxVDiskSlotUsage, }, { id: 'vdisk-raw-usage', name: CAPACITY_METRICS_COLUMN_TITLES.MaxVDiskRawUsage, content: formatMetricPercent(data.VDiskRawUsage, 2), note: CAPACITY_METRICS_HELP_TEXT.MaxVDiskRawUsage, }, ]; return items.filter(({id}) => capacityMetricsEnabled || id === 'size'); } export function getPDiskCapacityItems( data: PreparedPDisk, {useWhiteboardSize = true}: {useWhiteboardSize?: boolean} = {}, ): DiskDetailItem[] { const size = useWhiteboardSize ? (data.WhiteboardSize ?? data) : data; return [ { id: 'slot-size-in-units', name: i18n('field_slot-size-in-units'), content: formatCapacityUnitCount(data.SlotSizeInUnits), note: CAPACITY_CONFIGURATION_HELP_TEXT.SlotSizeInUnits, }, { id: 'space', name: i18n('field_space'), content: formatStorageMetricPair(size.AllocatedSize, size.TotalSize, 2), }, { id: 'capacity-alert', name: CAPACITY_METRICS_COLUMN_TITLES.CapacityAlert, content: , note: CAPACITY_METRICS_HELP_TEXT.CapacityAlert, }, { id: 'pdisk-usage', name: CAPACITY_METRICS_COLUMN_TITLES.MaxPDiskUsage, content: formatMetricPercent(data.PDiskUsage, 2), note: CAPACITY_METRICS_HELP_TEXT.MaxPDiskUsage, }, { id: 'slots', name: i18n('field_slots'), content: formatMetricCountPair(data.NumActiveSlots, data.ExpectedSlotCount), note: pDiskInfoKeyset('context_slots'), }, ]; } export function getStorageGroupCapacityInfoItems( data: PreparedStorageGroup | undefined, ): DiskDetailItem[] { const capacityAlert = normalizeCapacityAlert(data?.CapacityAlert); return [ { id: 'capacity-alert', name: CAPACITY_METRICS_COLUMN_TITLES.CapacityAlert, content: capacityAlert ? ( ) : ( EMPTY_DATA_PLACEHOLDER ), note: CAPACITY_METRICS_HELP_TEXT.CapacityAlert, }, { id: 'vdisk-slot-usage', name: CAPACITY_METRICS_COLUMN_TITLES.MaxVDiskSlotUsage, content: formatNormalizedMetricPercent(data?.MaxVDiskSlotUsage), note: CAPACITY_METRICS_HELP_TEXT.MaxVDiskSlotUsage, }, { id: 'vdisk-raw-usage', name: CAPACITY_METRICS_COLUMN_TITLES.MaxVDiskRawUsage, content: formatNormalizedMetricPercent(data?.MaxVDiskRawUsage), note: CAPACITY_METRICS_HELP_TEXT.MaxVDiskRawUsage, }, ]; }