mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Prometheus: Sort Table format data frames by first field's values (#99223)
This commit is contained in:
parent
cc3b3ccdef
commit
863d56b7e1
@ -261,11 +261,11 @@ describe('Prometheus Result Transformer', () => {
|
|||||||
createDataFrame({
|
createDataFrame({
|
||||||
refId: 'A',
|
refId: 'A',
|
||||||
fields: [
|
fields: [
|
||||||
{ name: 'time', type: FieldType.time, values: [6, 5, 4] },
|
{ name: 'time', type: FieldType.time, values: [4, 5, 6] },
|
||||||
{
|
{
|
||||||
name: 'value',
|
name: 'value',
|
||||||
type: FieldType.number,
|
type: FieldType.number,
|
||||||
values: [6, 5, 4],
|
values: [4, 5, 6],
|
||||||
labels: { label1: 'value1', label2: 'value2' },
|
labels: { label1: 'value1', label2: 'value2' },
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@ -288,11 +288,13 @@ describe('Prometheus Result Transformer', () => {
|
|||||||
|
|
||||||
expect(series.data.length).toEqual(1);
|
expect(series.data.length).toEqual(1);
|
||||||
expect(series.data[0].fields[0].name).toEqual('Time');
|
expect(series.data[0].fields[0].name).toEqual('Time');
|
||||||
|
expect(series.data[0].fields[0].values).toEqual([2, 3, 4, 5, 6, 7]);
|
||||||
expect(series.data[0].fields[1].name).toEqual('label1');
|
expect(series.data[0].fields[1].name).toEqual('label1');
|
||||||
expect(series.data[0].fields[2].name).toEqual('label2');
|
expect(series.data[0].fields[2].name).toEqual('label2');
|
||||||
expect(series.data[0].fields[3].name).toEqual('label3');
|
expect(series.data[0].fields[3].name).toEqual('label3');
|
||||||
expect(series.data[0].fields[4].name).toEqual('label4');
|
expect(series.data[0].fields[4].name).toEqual('label4');
|
||||||
expect(series.data[0].fields[5].name).toEqual('Value');
|
expect(series.data[0].fields[5].name).toEqual('Value');
|
||||||
|
expect(series.data[0].fields[5].values).toEqual([2, 3, 4, 5, 6, 7]);
|
||||||
expect(series.data[0].meta?.preferredVisualisationType).toEqual('rawPrometheus' as PreferredVisualisationType);
|
expect(series.data[0].meta?.preferredVisualisationType).toEqual('rawPrometheus' as PreferredVisualisationType);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ import {
|
|||||||
getDisplayProcessor,
|
getDisplayProcessor,
|
||||||
getFieldDisplayName,
|
getFieldDisplayName,
|
||||||
Labels,
|
Labels,
|
||||||
|
sortDataFrame,
|
||||||
TIME_SERIES_TIME_FIELD_NAME,
|
TIME_SERIES_TIME_FIELD_NAME,
|
||||||
TIME_SERIES_VALUE_FIELD_NAME,
|
TIME_SERIES_VALUE_FIELD_NAME,
|
||||||
} from '@grafana/data';
|
} from '@grafana/data';
|
||||||
@ -210,13 +211,26 @@ export function transformDFToTable(dfs: DataFrame[]): DataFrame[] {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let prevTime = -Infinity;
|
||||||
|
let needsSort = false;
|
||||||
|
|
||||||
// Fill valueField, timeField and labelFields with values
|
// Fill valueField, timeField and labelFields with values
|
||||||
dataFramesByRefId[refId].forEach((df) => {
|
dataFramesByRefId[refId].forEach((df) => {
|
||||||
timeField.config.interval ??= df.fields[0]?.config.interval;
|
timeField.config.interval ??= df.fields[0]?.config.interval;
|
||||||
|
|
||||||
const timeFields = df.fields[0]?.values ?? [];
|
const timeFields = df.fields[0]?.values ?? [];
|
||||||
const dataFields = df.fields[1]?.values ?? [];
|
const dataFields = df.fields[1]?.values ?? [];
|
||||||
timeFields.forEach((value) => timeField.values.push(value));
|
|
||||||
|
timeFields.forEach((value) => {
|
||||||
|
timeField.values.push(value);
|
||||||
|
|
||||||
|
if (value < prevTime) {
|
||||||
|
needsSort = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
prevTime = value;
|
||||||
|
});
|
||||||
|
|
||||||
dataFields.forEach((value) => {
|
dataFields.forEach((value) => {
|
||||||
valueField.values.push(parseSampleValue(value));
|
valueField.values.push(parseSampleValue(value));
|
||||||
const labelsForField = df.fields[1].labels ?? {};
|
const labelsForField = df.fields[1].labels ?? {};
|
||||||
@ -225,7 +239,8 @@ export function transformDFToTable(dfs: DataFrame[]): DataFrame[] {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const fields = [timeField, ...labelFields, valueField];
|
const fields = [timeField, ...labelFields, valueField];
|
||||||
return {
|
|
||||||
|
const frame: DataFrame = {
|
||||||
refId,
|
refId,
|
||||||
fields,
|
fields,
|
||||||
// Prometheus specific UI for instant queries
|
// Prometheus specific UI for instant queries
|
||||||
@ -235,7 +250,10 @@ export function transformDFToTable(dfs: DataFrame[]): DataFrame[] {
|
|||||||
},
|
},
|
||||||
length: timeField.values.length,
|
length: timeField.values.length,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
return needsSort ? sortDataFrame(frame, 0) : frame;
|
||||||
});
|
});
|
||||||
|
|
||||||
return frames;
|
return frames;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user