import React from 'react'; import {Alert, Card, Flex, Text} from '@gravity-ui/uikit'; import {SegmentedProgress} from '../../../../../components/SegmentedProgress/SegmentedProgress'; import {useTenantBaseInfo} from '../../../../../store/reducers/tenant/tenant'; import type {TEvDescribeSchemeResult} from '../../../../../types/api/schema'; import {cn} from '../../../../../utils/cn'; import {formatNumber} from '../../../../../utils/dataFormatters/dataFormatters'; import {SchemaObjectInfo} from '../SchemaObjectInfo'; import {dbInfoKeyset} from './i18n'; import {prepareAdditionalDatabaseInfoItems} from './utils'; import './DatabaseInfo.scss'; const b = cn('ydb-diagnostics-database-info'); interface DBInfoProps { data?: TEvDescribeSchemeResult; path: string; database: string; } export function DatabaseInfo({data, path, database}: DBInfoProps) { const {databaseData} = useTenantBaseInfo(database); const additionalItems = React.useMemo( () => prepareAdditionalDatabaseInfoItems(databaseData), [databaseData], ); const {PathsInside, PathsLimit, ShardsInside, ShardsLimit} = data?.PathDescription?.DomainDescription ?? {}; return ( {dbInfoKeyset('title_limits-and-usage')} ); } function DBInfoStatsCard({ value, limit, title, description, }: { value?: string; limit?: string; title: string; description: string; }) { const numValue = Number(value) || 0; const numLimit = Number(limit) || 0; const usage = React.useMemo(() => { if (!numValue || !numLimit || numValue < 0) { return 0; } const percentUsed = (numValue / numLimit) * 100; if (percentUsed > 100) { return 100; } if (percentUsed < 1) { return Math.round(percentUsed * 10) / 10; } return Math.round(percentUsed); }, [numValue, numLimit]); const labelEnd = numLimit ? dbInfoKeyset('text_count', { count: formatNumber(numValue), limit: formatNumber(numLimit), }) : String(numValue); const usageLabel = numLimit ? `${usage}%` : `N/A %`; const renderNoLimitAlert = () => { if (numLimit) { return null; } return ( ); }; return ( {title} {description} {renderNoLimitAlert()} ); }