diff --git a/packages/grafana-data/src/types/dataFrame.ts b/packages/grafana-data/src/types/dataFrame.ts index 639a3770b76..2f9afd7c9ba 100644 --- a/packages/grafana-data/src/types/dataFrame.ts +++ b/packages/grafana-data/src/types/dataFrame.ts @@ -264,6 +264,7 @@ export interface DataFrameDTO extends QueryResultBase { export interface FieldCalcs extends Record {} +/** @deprecated check data plane docs: https://grafana.github.io/dataplane/heatmap **/ export const TIME_SERIES_VALUE_FIELD_NAME = 'Value'; export const TIME_SERIES_TIME_FIELD_NAME = 'Time'; export const TIME_SERIES_METRIC_FIELD_NAME = 'Metric'; diff --git a/public/app/plugins/datasource/prometheus/result_transformer.test.ts b/public/app/plugins/datasource/prometheus/result_transformer.test.ts index ede4c6e7089..f524d25adbf 100644 --- a/public/app/plugins/datasource/prometheus/result_transformer.test.ts +++ b/public/app/plugins/datasource/prometheus/result_transformer.test.ts @@ -313,7 +313,7 @@ describe('Prometheus Result Transformer', () => { expect(series.data[1].meta?.preferredVisualisationType).toEqual('rawPrometheus' as PreferredVisualisationType); }); - it('results with heatmap format should be correctly transformed', () => { + it('results with deprecated heatmap format should be correctly transformed', () => { const options = { targets: [ { @@ -394,8 +394,8 @@ describe('Prometheus Result Transformer', () => { refId: 'A', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [10, 10, 0], labels: { le: '1' }, @@ -406,8 +406,8 @@ describe('Prometheus Result Transformer', () => { refId: 'A', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [20, 10, 30], labels: { le: '2' }, @@ -418,8 +418,8 @@ describe('Prometheus Result Transformer', () => { refId: 'A', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [30, 10, 40], labels: { le: '+Inf' }, @@ -430,8 +430,8 @@ describe('Prometheus Result Transformer', () => { refId: 'B', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [10, 10, 0], labels: { le: '1' }, @@ -442,8 +442,8 @@ describe('Prometheus Result Transformer', () => { refId: 'B', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [20, 10, 30], labels: { le: '2' }, @@ -454,8 +454,8 @@ describe('Prometheus Result Transformer', () => { refId: 'B', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [30, 10, 40], labels: { le: '+Inf' }, @@ -489,8 +489,8 @@ describe('Prometheus Result Transformer', () => { refId: 'A', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [10, 10, 0], labels: { le: '1', additionalProperty: '10' }, @@ -501,8 +501,8 @@ describe('Prometheus Result Transformer', () => { refId: 'A', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [20, 10, 30], labels: { le: '2', additionalProperty: '10' }, @@ -513,8 +513,8 @@ describe('Prometheus Result Transformer', () => { refId: 'A', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [30, 10, 40], labels: { le: '+Inf', additionalProperty: '10' }, @@ -526,8 +526,8 @@ describe('Prometheus Result Transformer', () => { refId: 'A', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [0, 10, 10], labels: { le: '1', additionalProperty: '20' }, @@ -538,8 +538,8 @@ describe('Prometheus Result Transformer', () => { refId: 'A', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [20, 10, 40], labels: { le: '2', additionalProperty: '20' }, @@ -550,8 +550,8 @@ describe('Prometheus Result Transformer', () => { refId: 'A', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [30, 10, 60], labels: { le: '+Inf', additionalProperty: '20' }, @@ -563,8 +563,8 @@ describe('Prometheus Result Transformer', () => { refId: 'A', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [30, 30, 60], labels: { le: '1', additionalProperty: '30' }, @@ -575,8 +575,8 @@ describe('Prometheus Result Transformer', () => { refId: 'A', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [30, 40, 60], labels: { le: '2', additionalProperty: '30' }, @@ -587,8 +587,8 @@ describe('Prometheus Result Transformer', () => { refId: 'A', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [40, 40, 60], labels: { le: '+Inf', additionalProperty: '30' }, @@ -629,8 +629,8 @@ describe('Prometheus Result Transformer', () => { refId: 'A', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [10, 10, 0], labels: { le: '1' }, @@ -647,8 +647,8 @@ describe('Prometheus Result Transformer', () => { }, fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4, 3, 2, 1] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [30, 10, 40, 90, 14, 21], labels: { le: '6' }, @@ -679,8 +679,8 @@ describe('Prometheus Result Transformer', () => { refId: 'A', fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [10, 10, 0], labels: { le: '1' }, @@ -697,8 +697,8 @@ describe('Prometheus Result Transformer', () => { }, fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4, 3, 2, 1] }, + //@ts-ignore missing name { - name: 'Value', type: FieldType.number, values: [30, 10, 40, 90, 14, 21], labels: { le: '6' }, diff --git a/public/app/plugins/datasource/prometheus/result_transformer.ts b/public/app/plugins/datasource/prometheus/result_transformer.ts index 80d35952f41..0890c1dcec5 100644 --- a/public/app/plugins/datasource/prometheus/result_transformer.ts +++ b/public/app/plugins/datasource/prometheus/result_transformer.ts @@ -121,7 +121,7 @@ export function transformV2( // this works around the fact that we only get back frame.name with le buckets when legendFormat == {{le}}...which is not the default heatmapResults.forEach((df) => { if (df.name == null) { - let f = df.fields.find((f) => f.name === 'Value'); + let f = df.fields.find((f) => f.type === FieldType.number); if (f) { let le = f.labels?.le; @@ -150,7 +150,7 @@ export function transformV2( // Create a new grouping by iterating through the data frames... const heatmapResultsGroupedByValues = groupBy(heatmapResultsGroup, (dataFrame) => { // Each data frame has `Time` and `Value` properties, we want to get the values - const values = dataFrame.fields.find((field) => field.name === TIME_SERIES_VALUE_FIELD_NAME); + const values = dataFrame.fields.find((field) => field.type === FieldType.number); // Specific functionality for special "le" quantile heatmap value, we know if this value exists, that we do not want to calculate the heatmap density across data frames from the same quartile if (values?.labels && HISTOGRAM_QUANTILE_LABEL_NAME in values.labels) { const { le, ...notLE } = values?.labels; @@ -650,9 +650,10 @@ function transformToHistogramOverTime(seriesList: DataFrame[]) { le20 20 10 30 => 10 0 30 le30 30 10 35 => 10 0 5 */ + for (let i = seriesList.length - 1; i > 0; i--) { - const topSeries = seriesList[i].fields.find((s) => s.name === TIME_SERIES_VALUE_FIELD_NAME); - const bottomSeries = seriesList[i - 1].fields.find((s) => s.name === TIME_SERIES_VALUE_FIELD_NAME); + const topSeries = seriesList[i].fields.find((s) => s.type === FieldType.number); + const bottomSeries = seriesList[i - 1].fields.find((s) => s.type === FieldType.number); if (!topSeries || !bottomSeries) { throw new Error('Prometheus heatmap transform error: data should be a time series'); }