1
import { DataTableProps } from './DataTable';
2
import { GraphProps, GraphSeries } from './Graph';
4
export function isHeatmapData(data: DataTableProps['data']) {
5
if (data?.resultType === 'scalar' || data?.resultType === 'string' || !data?.result?.length || data?.result?.length < 2) {
8
// Type assertion to prevent TS2349 error.
9
const result = data.result as GraphProps['data']['result'];
10
const firstLabels = Object.keys(result[0].metric).filter((label) => label !== 'le');
11
return result.every(({ metric }) => {
12
const labels = Object.keys(metric).filter((label) => label !== 'le');
13
const allLabelsMatch = labels.every((label) => metric[label] === result[0].metric[label]);
14
return metric.le && labels.length === firstLabels.length && allLabelsMatch;
18
export function prepareHeatmapData(buckets: GraphSeries[]) {
19
if (!buckets.every((a) => a.labels.le)) {
23
const sortedBuckets = buckets.sort((a, b) => promValueToNumber(a.labels.le) - promValueToNumber(b.labels.le));
24
const result: GraphSeries[] = [];
26
for (let i = 0; i < sortedBuckets.length; i++) {
28
const { data, labels, color } = sortedBuckets[i];
30
for (const [timestamp, value] of data) {
31
const prevVal = sortedBuckets[i - 1]?.data.find((v) => v[0] === timestamp)?.[1] || 0;
32
const newVal = Number(value) - prevVal;
33
values.push([Number(timestamp), newVal]);
46
export function promValueToNumber(s: string) {