Skip to content

Commit 3e0293c

Browse files
fix(Topic): use SpeedMultiMeter and utils functions
1 parent 39acbf1 commit 3e0293c

File tree

6 files changed

+43
-39
lines changed

6 files changed

+43
-39
lines changed

src/components/InfoViewer/formatters/topicStats.tsx

Lines changed: 8 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,24 @@
1-
import type {MultipleWindowsStat} from '../../../types/api/consumer';
21
import type {TopicStats} from '../../../types/api/topic';
32
import {formatBytes} from '../../../utils';
4-
import {DAY_IN_SECONDS, HOUR_IN_SECONDS, MINUTE_IN_SECONDS} from '../../../utils/constants';
5-
63
import {
7-
parseProtobufTimestampToMs,
8-
parseProtobufDurationToMs,
4+
parseLag,
5+
parseTimestampToIdleTime,
96
formatDurationToShortTimeFormat,
107
} from '../../../utils/timeParsers';
8+
import {convertBytesObjectToSpeed} from '../../../utils/bytesParsers';
119

12-
import {VerticalBars} from '../../VerticalBars/VerticalBars';
10+
import {SpeedMultiMeter} from '../../SpeedMultiMeter';
1311

1412
import {createInfoFormatter} from '../utils';
1513

16-
export const prepareBytesWritten = (data?: MultipleWindowsStat) => {
17-
return {
18-
per_minute:
19-
data && data.per_minute ? Math.floor(Number(data.per_minute) / MINUTE_IN_SECONDS) : 0,
20-
per_hour: data && data.per_hour ? Math.floor(Number(data.per_hour) / HOUR_IN_SECONDS) : 0,
21-
per_day: data && data.per_day ? Math.floor(Number(data.per_day) / DAY_IN_SECONDS) : 0,
22-
};
23-
};
24-
2514
export const formatTopicStats = createInfoFormatter<TopicStats>({
2615
values: {
2716
store_size_bytes: formatBytes,
28-
min_last_write_time: (value) => {
29-
if (!value) {
30-
return formatDurationToShortTimeFormat(0);
31-
}
32-
33-
const durationMs = Date.now() - parseProtobufTimestampToMs(value);
34-
35-
// Duration could be negative because of the difference between server and local time
36-
// Usually it below 100ms, so it could be omitted
37-
return formatDurationToShortTimeFormat(durationMs < 0 ? 0 : durationMs);
38-
},
39-
max_write_time_lag: (value) =>
40-
formatDurationToShortTimeFormat(value ? parseProtobufDurationToMs(value) : 0),
17+
min_last_write_time: (value) =>
18+
formatDurationToShortTimeFormat(parseTimestampToIdleTime(value)),
19+
max_write_time_lag: (value) => formatDurationToShortTimeFormat(parseLag(value)),
4120
bytes_written: (value) =>
42-
value && <VerticalBars values={Object.values(prepareBytesWritten(value))} />,
21+
value && <SpeedMultiMeter data={convertBytesObjectToSpeed(value)} withValue={false} />,
4322
},
4423
labels: {
4524
store_size_bytes: 'Store size',

src/containers/Tenant/Diagnostics/Overview/TopicStats/TopicStats.scss

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,16 @@
99
margin-top: 50px;
1010
}
1111

12-
.ydb-bars {
12+
.info-viewer__row {
13+
align-items: flex-start;
14+
}
15+
16+
.speed-multimeter {
1317
margin-top: -5px;
18+
19+
&__content {
20+
justify-content: flex-start;
21+
}
1422
}
1523

1624
&__info {

src/containers/Tenant/Diagnostics/Overview/TopicStats/TopicStats.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@ import type {DescribeTopicResult} from '../../../../../types/api/topic';
66
import {Loader} from '../../../../../components/Loader';
77
import {InfoViewerItem, formatObject, InfoViewer} from '../../../../../components/InfoViewer';
88

9-
import {
10-
prepareBytesWritten,
11-
formatTopicStats,
12-
} from '../../../../../components/InfoViewer/formatters';
9+
import {formatTopicStats} from '../../../../../components/InfoViewer/formatters';
1310

1411
import {useTypedSelector} from '../../../../../utils/hooks';
12+
import {convertBytesObjectToSpeed} from '../../../../../utils/bytesParsers';
1513
import {formatBps} from '../../../../../utils';
1614

1715
import i18n from './i18n';
@@ -29,20 +27,20 @@ const prepareTopicInfo = (data: DescribeTopicResult): Array<InfoViewerItem> => {
2927
};
3028

3129
const prepareBytesWrittenInfo = (data: DescribeTopicResult): Array<InfoViewerItem> => {
32-
const preparedBytes = prepareBytesWritten(data?.topic_stats?.bytes_written);
30+
const preparedBytes = convertBytesObjectToSpeed(data?.topic_stats?.bytes_written);
3331

3432
return [
3533
{
3634
label: 'per minute',
37-
value: formatBps(preparedBytes.per_minute),
35+
value: formatBps(preparedBytes.perMinute),
3836
},
3937
{
4038
label: 'per hour',
41-
value: formatBps(preparedBytes.per_hour),
39+
value: formatBps(preparedBytes.perHour),
4240
},
4341
{
4442
label: 'per day',
45-
value: formatBps(preparedBytes.per_day),
43+
value: formatBps(preparedBytes.perDay),
4644
},
4745
];
4846
};

src/utils/timeParsers/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export * from './formatDuration';
2-
export * from './protobuf';
2+
export * from './protobufParsers';
3+
export * from './parsers';

src/utils/timeParsers/parsers.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import type {IProtobufTimeObject} from '../../types/api/common';
2+
3+
import {parseProtobufDurationToMs, parseProtobufTimestampToMs} from '.';
4+
5+
export const parseLag = (value: string | IProtobufTimeObject | undefined) =>
6+
value ? parseProtobufDurationToMs(value) : 0;
7+
8+
export const parseTimestampToIdleTime = (value: string | IProtobufTimeObject | undefined) => {
9+
if (!value) {
10+
return 0;
11+
}
12+
13+
const duration = Date.now() - parseProtobufTimestampToMs(value);
14+
15+
// Duration could be negative because of the difference between server and local time
16+
// Usually it below 100ms, so it could be omitted
17+
return duration < 0 ? 0 : duration;
18+
};
File renamed without changes.

0 commit comments

Comments
 (0)