mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-26 22:19:40 -08:00
Merge pull request #13371 from kevinmingtarja/fix-isHeatmapData
ui: fix handling of scalar and string in isHeatmapData
This commit is contained in:
commit
775d955919
|
@ -338,7 +338,7 @@ describe('DataTable', () => {
|
||||||
const dataTableProps: DataTableProps = {
|
const dataTableProps: DataTableProps = {
|
||||||
data: {
|
data: {
|
||||||
resultType: 'string',
|
resultType: 'string',
|
||||||
result: 'string',
|
result: [1572098246.599, 'test'],
|
||||||
},
|
},
|
||||||
useLocalTime: false,
|
useLocalTime: false,
|
||||||
};
|
};
|
||||||
|
@ -346,7 +346,7 @@ describe('DataTable', () => {
|
||||||
it('renders a string row', () => {
|
it('renders a string row', () => {
|
||||||
const table = dataTable.find(Table);
|
const table = dataTable.find(Table);
|
||||||
const rows = table.find('tr');
|
const rows = table.find('tr');
|
||||||
expect(rows.text()).toEqual('stringt');
|
expect(rows.text()).toEqual('stringtest');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -24,7 +24,7 @@ export interface DataTableProps {
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
resultType: 'string';
|
resultType: 'string';
|
||||||
result: string;
|
result: SampleValue;
|
||||||
};
|
};
|
||||||
useLocalTime: boolean;
|
useLocalTime: boolean;
|
||||||
}
|
}
|
||||||
|
|
66
web/ui/react-app/src/pages/graph/GraphHeatmapHelpers.test.ts
Normal file
66
web/ui/react-app/src/pages/graph/GraphHeatmapHelpers.test.ts
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
import { DataTableProps } from './DataTable';
|
||||||
|
import { isHeatmapData } from './GraphHeatmapHelpers';
|
||||||
|
|
||||||
|
describe('GraphHeatmapHelpers', () => {
|
||||||
|
it('isHeatmapData should return false for scalar and string resultType', () => {
|
||||||
|
let data = {
|
||||||
|
resultType: 'scalar',
|
||||||
|
result: [1703091180.125, '1703091180.125'],
|
||||||
|
} as DataTableProps['data'];
|
||||||
|
expect(isHeatmapData(data)).toBe(false);
|
||||||
|
|
||||||
|
data = {
|
||||||
|
resultType: 'string',
|
||||||
|
result: [1704305680.332, '2504'],
|
||||||
|
} as DataTableProps['data'];
|
||||||
|
expect(isHeatmapData(data)).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('isHeatmapData should return false for a vector and matrix if length < 2', () => {
|
||||||
|
let data = {
|
||||||
|
resultType: 'vector',
|
||||||
|
result: [
|
||||||
|
{
|
||||||
|
metric: {
|
||||||
|
__name__: 'my_gauge',
|
||||||
|
job: 'target',
|
||||||
|
},
|
||||||
|
value: [1703091180.683, '6'],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} as DataTableProps['data'];
|
||||||
|
expect(isHeatmapData(data)).toBe(false);
|
||||||
|
|
||||||
|
data = {
|
||||||
|
resultType: 'matrix',
|
||||||
|
result: [
|
||||||
|
{
|
||||||
|
metric: {},
|
||||||
|
values: [[1703091180.683, '6']],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} as DataTableProps['data'];
|
||||||
|
expect(isHeatmapData(data)).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('isHeatmapData should return true for valid heatmap data', () => {
|
||||||
|
const data = {
|
||||||
|
resultType: 'matrix',
|
||||||
|
result: [
|
||||||
|
{
|
||||||
|
metric: {
|
||||||
|
le: '100',
|
||||||
|
},
|
||||||
|
values: [[1703091180.683, '6']],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
metric: {
|
||||||
|
le: '1000',
|
||||||
|
},
|
||||||
|
values: [[1703091190.683, '6.1']],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} as DataTableProps['data'];
|
||||||
|
expect(isHeatmapData(data)).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
|
@ -1,10 +1,12 @@
|
||||||
|
import { DataTableProps } from './DataTable';
|
||||||
import { GraphProps, GraphSeries } from './Graph';
|
import { GraphProps, GraphSeries } from './Graph';
|
||||||
|
|
||||||
export function isHeatmapData(data: GraphProps['data']) {
|
export function isHeatmapData(data: DataTableProps['data']) {
|
||||||
if (!data?.result?.length || data?.result?.length < 2) {
|
if (data?.resultType === 'scalar' || data?.resultType === 'string' || !data?.result?.length || data?.result?.length < 2) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const result = data.result;
|
// Type assertion to prevent TS2349 error.
|
||||||
|
const result = data.result as GraphProps['data']['result'];
|
||||||
const firstLabels = Object.keys(result[0].metric).filter((label) => label !== 'le');
|
const firstLabels = Object.keys(result[0].metric).filter((label) => label !== 'le');
|
||||||
return result.every(({ metric }) => {
|
return result.every(({ metric }) => {
|
||||||
const labels = Object.keys(metric).filter((label) => label !== 'le');
|
const labels = Object.keys(metric).filter((label) => label !== 'le');
|
||||||
|
|
Loading…
Reference in a new issue