|
| 1 | +import type {MultipleWindowsStat} from '../../../types/api/consumer'; |
| 2 | +import type {TopicStats} from '../../../types/api/topic'; |
| 3 | +import {formatBytes} from '../../../utils'; |
| 4 | +import {DAY_IN_SECONDS, HOUR_IN_SECONDS, MINUTE_IN_SECONDS} from '../../../utils/constants'; |
| 5 | + |
| 6 | +import { |
| 7 | + parseProtobufTimestampToMs, |
| 8 | + parseProtobufDurationToMs, |
| 9 | + formatDurationToShortTimeFormat, |
| 10 | +} from '../../../utils/timeParsers'; |
| 11 | + |
| 12 | +import {VerticalBars} from '../../VerticalBars/VerticalBars'; |
| 13 | + |
| 14 | +import {createInfoFormatter} from '../utils'; |
| 15 | + |
| 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 | + |
| 25 | +export const formatTopicStats = createInfoFormatter<TopicStats>({ |
| 26 | + values: { |
| 27 | + 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), |
| 41 | + bytes_written: (value) => |
| 42 | + value && <VerticalBars values={Object.values(prepareBytesWritten(value))} />, |
| 43 | + }, |
| 44 | + labels: { |
| 45 | + store_size_bytes: 'Store size', |
| 46 | + min_last_write_time: 'Partitions max time since last write', |
| 47 | + max_write_time_lag: 'Partitions max write time lag', |
| 48 | + bytes_written: 'Average write speed', |
| 49 | + }, |
| 50 | +}); |
0 commit comments