import DataTable from '@gravity-ui/react-data-table'; import {Flex, Text} from '@gravity-ui/uikit'; import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants'; import {formatNumber, roundToPrecision} from '../../utils/dataFormatters/dataFormatters'; import {getUsageSeverity} from '../../utils/generateEvaluator'; import {LabelWithPopover} from '../LabelWithPopover/LabelWithPopover'; import {LinkToSchemaObject} from '../LinkToSchemaObject/LinkToSchemaObject'; import {NodeId} from '../NodeId/NodeId'; import {TabletNameWrapper} from '../TabletNameWrapper/TabletNameWrapper'; import {UsageLabel} from '../UsageLabel/UsageLabel'; import type {TopShardsColumnId} from './constants'; import {TOP_SHARDS_COLUMNS_IDS, TOP_SHARDS_COLUMNS_TITLES} from './constants'; import i18n from './i18n'; import type {GetShardsColumn} from './types'; import {prepareDateTimeValue} from './utils'; export const getPathColumn: GetShardsColumn = ({databaseFullPath = ''}) => { return { name: TOP_SHARDS_COLUMNS_IDS.Path, header: TOP_SHARDS_COLUMNS_TITLES.Path, render: ({row}) => { // row.RelativePath - relative schema path without start slash return ( {row.RelativePath} ); }, width: 300, }; }; export const getDataSizeColumn: GetShardsColumn = () => { return { name: TOP_SHARDS_COLUMNS_IDS.DataSize, header: ( ), render: ({row}) => { return formatNumber(row.DataSize); }, align: DataTable.RIGHT, }; }; export const getTabletIdColumn: GetShardsColumn = () => { return { name: TOP_SHARDS_COLUMNS_IDS.TabletId, header: TOP_SHARDS_COLUMNS_TITLES.TabletId, render: ({row}) => { if (!row.TabletId) { return EMPTY_DATA_PLACEHOLDER; } const followerId = Number(row.FollowerId); const isFollower = followerId > 0; return ( {isFollower ? {i18n('value_follower')} : null} ); }, width: 280, }; }; export const getNodeIdColumn: GetShardsColumn = () => { return { name: TOP_SHARDS_COLUMNS_IDS.NodeId, header: TOP_SHARDS_COLUMNS_TITLES.NodeId, render: ({row}) => { if (!row.NodeId) { return EMPTY_DATA_PLACEHOLDER; } return ; }, align: DataTable.RIGHT, }; }; export const getCpuCoresColumn: GetShardsColumn = () => { return { name: TOP_SHARDS_COLUMNS_IDS.CPUCores, header: TOP_SHARDS_COLUMNS_TITLES.CPUCores, render: ({row}) => { const usage = Number(row.CPUCores) * 100 || 0; return ( ); }, align: DataTable.LEFT, width: 110, resizeMinWidth: 110, }; }; export const getInFlightTxCountColumn: GetShardsColumn = () => { return { name: TOP_SHARDS_COLUMNS_IDS.InFlightTxCount, header: TOP_SHARDS_COLUMNS_TITLES.InFlightTxCount, render: ({row}) => formatNumber(row.InFlightTxCount), align: DataTable.RIGHT, }; }; export const getPeakTimeColumn: GetShardsColumn = () => { return { name: TOP_SHARDS_COLUMNS_IDS.PeakTime, render: ({row}) => { return prepareDateTimeValue(row.PeakTime); }, }; }; export const getIntervalEndColumn: GetShardsColumn = () => { return { name: TOP_SHARDS_COLUMNS_IDS.IntervalEnd, render: ({row}) => { return prepareDateTimeValue(row.IntervalEnd); }, }; }; export const shardsColumnIdToGetColumn: Record = { [TOP_SHARDS_COLUMNS_IDS.Path]: getPathColumn, [TOP_SHARDS_COLUMNS_IDS.DataSize]: getDataSizeColumn, [TOP_SHARDS_COLUMNS_IDS.TabletId]: getTabletIdColumn, [TOP_SHARDS_COLUMNS_IDS.NodeId]: getNodeIdColumn, [TOP_SHARDS_COLUMNS_IDS.CPUCores]: getCpuCoresColumn, [TOP_SHARDS_COLUMNS_IDS.InFlightTxCount]: getInFlightTxCountColumn, [TOP_SHARDS_COLUMNS_IDS.PeakTime]: getPeakTimeColumn, [TOP_SHARDS_COLUMNS_IDS.IntervalEnd]: getIntervalEndColumn, };