Skip to content

Commit 3305cdb

Browse files
fix(TableInfo): update column table info (#1056)
1 parent 4b34e05 commit 3305cdb

File tree

8 files changed

+90
-41
lines changed

8 files changed

+90
-41
lines changed
Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
{
22
"tableStats": "Table Stats",
33
"tabletMetrics": "Tablet Metrics",
4-
"partitionConfig": "Partition Config"
4+
"partitionConfig": "Partition Config",
5+
6+
"label.ttl": "TTL for rows",
7+
"value.ttl": "column: '{{columnName}}', expire after: {{expireTime}}",
8+
"label.standalone": "Standalone",
9+
"label.partitioning": "Partitioning",
10+
"label.partitioning-by-size": "Partitioning by size",
11+
"value.partitioning-by-size.enabled": "Enabled, split size: {{size}}",
12+
"label.partitioning-by-load": "Partitioning by load",
13+
"label.partitions-min": "Min number of partitions",
14+
"label.partitions-max": "Max number of partitions",
15+
"label.read-replicas": "Read replicas (followers)",
16+
"label.bloom-filter": "Bloom filter",
17+
18+
"enabled": "Enabled",
19+
"disabled": "Disabled"
520
}
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import {registerKeysets} from '../../../../../../utils/i18n';
22

33
import en from './en.json';
4-
import ru from './ru.json';
54

65
const COMPONENT = 'ydb-diagnostics-overview-table-info';
76

8-
export default registerKeysets(COMPONENT, {ru, en});
7+
export default registerKeysets(COMPONENT, {en});

src/containers/Tenant/Diagnostics/Overview/TableInfo/i18n/ru.json

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/containers/Tenant/Diagnostics/Overview/TableInfo/prepareTableInfo.ts renamed to src/containers/Tenant/Diagnostics/Overview/TableInfo/prepareTableInfo.tsx

Lines changed: 46 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import {Text} from '@gravity-ui/uikit';
2+
import omit from 'lodash/omit';
3+
14
import type {InfoViewerItem} from '../../../../../components/InfoViewer';
25
import {formatObject} from '../../../../../components/InfoViewer';
36
import {
@@ -17,6 +20,8 @@ import {EPathType} from '../../../../../types/api/schema';
1720
import {formatBytes, formatNumber} from '../../../../../utils/dataFormatters/dataFormatters';
1821
import {formatDurationToShortTimeFormat} from '../../../../../utils/timeParsers';
1922

23+
import i18n from './i18n';
24+
2025
const isInStoreColumnTable = (table: TColumnTableDescription) => {
2126
// SchemaPresetId could be 0
2227
return table.SchemaPresetName && table.SchemaPresetId !== undefined;
@@ -25,14 +30,12 @@ const isInStoreColumnTable = (table: TColumnTableDescription) => {
2530
const prepareTTL = (ttl: TTTLSettings | TColumnDataLifeCycle) => {
2631
// ExpireAfterSeconds could be 0
2732
if (ttl.Enabled && ttl.Enabled.ColumnName && ttl.Enabled.ExpireAfterSeconds !== undefined) {
28-
const value = `column: '${
29-
ttl.Enabled.ColumnName
30-
}', expire after: ${formatDurationToShortTimeFormat(
31-
ttl.Enabled.ExpireAfterSeconds * 1000,
32-
1,
33-
)}`;
34-
35-
return {label: 'TTL for rows', value};
33+
const value = i18n('value.ttl', {
34+
columnName: ttl.Enabled.ColumnName,
35+
expireTime: formatDurationToShortTimeFormat(ttl.Enabled.ExpireAfterSeconds * 1000, 1),
36+
});
37+
38+
return {label: i18n('label.ttl'), value};
3639
}
3740
return undefined;
3841
};
@@ -41,12 +44,22 @@ function prepareColumnTableGeneralInfo(columnTable: TColumnTableDescription) {
4144
const columnTableGeneralInfo: InfoViewerItem[] = [];
4245

4346
columnTableGeneralInfo.push({
44-
label: 'Standalone',
47+
label: i18n('label.standalone'),
4548
value: String(!isInStoreColumnTable(columnTable)),
4649
});
4750

48-
if (columnTable.Sharding && columnTable.Sharding.HashSharding) {
49-
columnTableGeneralInfo.push({label: 'Sharding', value: 'hash'});
51+
if (columnTable.Sharding?.HashSharding?.Columns) {
52+
const columns = columnTable.Sharding.HashSharding.Columns.join(', ');
53+
const content = `PARTITION BY HASH(${columns})`;
54+
55+
columnTableGeneralInfo.push({
56+
label: i18n('label.partitioning'),
57+
value: (
58+
<Text variant="code-2" wordBreak="break-word">
59+
{content}
60+
</Text>
61+
),
62+
});
5063
}
5164

5265
if (columnTable.TtlSettings) {
@@ -66,25 +79,27 @@ const prepareTableGeneralInfo = (PartitionConfig: TPartitionConfig, TTLSettings?
6679

6780
const partitioningBySize =
6881
PartitioningPolicy.SizeToSplit && Number(PartitioningPolicy.SizeToSplit) > 0
69-
? `Enabled, split size: ${formatBytes(PartitioningPolicy.SizeToSplit)}`
70-
: 'Disabled';
82+
? i18n('value.partitioning-by-size.enabled', {
83+
size: formatBytes(PartitioningPolicy.SizeToSplit),
84+
})
85+
: i18n('disabled');
7186

7287
const partitioningByLoad = PartitioningPolicy.SplitByLoadSettings?.Enabled
73-
? 'Enabled'
74-
: 'Disabled';
88+
? i18n('enabled')
89+
: i18n('disabled');
7590

7691
generalTableInfo.push(
77-
{label: 'Partitioning by size', value: partitioningBySize},
78-
{label: 'Partitioning by load', value: partitioningByLoad},
92+
{label: i18n('label.partitioning-by-size'), value: partitioningBySize},
93+
{label: i18n('label.partitioning-by-load'), value: partitioningByLoad},
7994
{
80-
label: 'Min number of partitions',
95+
label: i18n('label.partitions-min'),
8196
value: formatNumber(PartitioningPolicy.MinPartitionsCount || 0),
8297
},
8398
);
8499

85100
if (PartitioningPolicy.MaxPartitionsCount) {
86101
generalTableInfo.push({
87-
label: 'Max number of partitions',
102+
label: i18n('label.partitions-max'),
88103
value: formatNumber(PartitioningPolicy.MaxPartitionsCount),
89104
});
90105
}
@@ -101,7 +116,7 @@ const prepareTableGeneralInfo = (PartitionConfig: TPartitionConfig, TTLSettings?
101116
readReplicasConfig = `ANY_AZ: ${FollowerCount}`;
102117
}
103118

104-
generalTableInfo.push({label: 'Read replicas (followers)', value: readReplicasConfig});
119+
generalTableInfo.push({label: i18n('label.read-replicas'), value: readReplicasConfig});
105120
}
106121

107122
if (TTLSettings) {
@@ -112,8 +127,8 @@ const prepareTableGeneralInfo = (PartitionConfig: TPartitionConfig, TTLSettings?
112127
}
113128

114129
generalTableInfo.push({
115-
label: 'Bloom filter',
116-
value: EnableFilterByKey ? 'Enabled' : 'Disabled',
130+
label: i18n('label.bloom-filter'),
131+
value: EnableFilterByKey ? i18n('enabled') : i18n('disabled'),
117132
});
118133

119134
return generalTableInfo;
@@ -200,8 +215,15 @@ export const prepareTableInfo = (data?: TEvDescribeSchemeResult, type?: EPathTyp
200215
}),
201216
];
202217

203-
//@ts-expect-error
204-
const tabletMetricsInfo = formatObject(formatTabletMetricsItem, TabletMetrics);
218+
const tabletMetricsInfo = formatObject(
219+
formatTabletMetricsItem,
220+
omit(TabletMetrics, [
221+
'GroupReadIops',
222+
'GroupReadThroughput',
223+
'GroupWriteIops',
224+
'GroupWriteThroughput',
225+
]),
226+
);
205227

206228
let partitionConfigInfo: InfoViewerItem[] = [];
207229

src/containers/Tenant/ObjectSummary/ObjectSummary.tsx

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {StringParam, useQueryParam} from 'use-query-params';
99

1010
import {AsyncReplicationState} from '../../../components/AsyncReplicationState';
1111
import {ClipboardButton} from '../../../components/ClipboardButton';
12+
import {toFormattedSize} from '../../../components/FormattedBytes/utils';
1213
import InfoViewer from '../../../components/InfoViewer/InfoViewer';
1314
import type {InfoViewerItem} from '../../../components/InfoViewer/InfoViewer';
1415
import {LinkWithIcon} from '../../../components/LinkWithIcon/LinkWithIcon';
@@ -28,7 +29,11 @@ import {
2829
DEFAULT_IS_TENANT_COMMON_INFO_COLLAPSED,
2930
DEFAULT_SIZE_TENANT_SUMMARY_KEY,
3031
} from '../../../utils/constants';
31-
import {formatDateTime, formatSecondsToHours} from '../../../utils/dataFormatters/dataFormatters';
32+
import {
33+
formatDateTime,
34+
formatNumber,
35+
formatSecondsToHours,
36+
} from '../../../utils/dataFormatters/dataFormatters';
3237
import {useTypedDispatch, useTypedSelector} from '../../../utils/hooks';
3338
import {Acl} from '../Acl/Acl';
3439
import {EntityTitle} from '../EntityTitle/EntityTitle';
@@ -154,11 +159,26 @@ export function ObjectSummary({
154159

155160
overview.push({
156161
label: i18n('summary.created'),
157-
value: formatDateTime(CreateStep, ''),
162+
value: formatDateTime(CreateStep),
158163
});
159164

160165
const {PathDescription} = currentObjectData;
161166

167+
if (PathDescription?.TableStats) {
168+
const {DataSize, RowCount} = PathDescription.TableStats;
169+
170+
overview.push(
171+
{
172+
label: i18n('summary.data-size'),
173+
value: toFormattedSize(DataSize),
174+
},
175+
{
176+
label: i18n('summary.row-count'),
177+
value: formatNumber(RowCount),
178+
},
179+
);
180+
}
181+
162182
const title = <EntityTitle data={PathDescription} />;
163183

164184
const getDatabaseOverview = () => [

src/containers/Tenant/i18n/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
"summary.id": "Id",
1313
"summary.version": "Version",
1414
"summary.created": "Created",
15+
"summary.data-size": "Data size",
16+
"summary.row-count": "Row count",
1517
"summary.partitions": "Partitions count",
1618
"summary.paths": "Paths",
1719
"summary.shards": "Shards",

src/containers/Tenant/utils/schema.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ const pathTypeToEntityName: Record<EPathType, string | undefined> = {
6868
[EPathType.EPathTypeTable]: 'Table',
6969
[EPathType.EPathTypeTableIndex]: 'Secondary Index',
7070
[EPathType.EPathTypeColumnStore]: 'Tablestore',
71-
[EPathType.EPathTypeColumnTable]: 'Columntable',
71+
[EPathType.EPathTypeColumnTable]: 'Column-oriented table',
7272
[EPathType.EPathTypeCdcStream]: 'Changefeed',
7373
[EPathType.EPathTypePersQueueGroup]: 'Topic',
7474

src/utils/dataFormatters/dataFormatters.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,14 +135,10 @@ export const formatCPUWithLabel = (value?: number) => {
135135
return `${localizedCores} ${i18n('format-cpu.cores', {count: cores})}`;
136136
};
137137

138-
export const formatDateTime = (value?: number | string, defaultValue = 'N/A') => {
139-
if (!isNumeric(value)) {
140-
return '';
141-
}
142-
138+
export const formatDateTime = (value?: number | string, defaultValue = '') => {
143139
const formattedData = dateTimeParse(Number(value))?.format('YYYY-MM-DD HH:mm');
144140

145-
return Number(value) > 0 && formattedData ? formattedData : defaultValue;
141+
return formattedData ?? defaultValue;
146142
};
147143

148144
export const calcUptimeInSeconds = (milliseconds: number | string) => {

0 commit comments

Comments
 (0)