From 69a38def63f058bede36357e08da0f5c016422f5 Mon Sep 17 00:00:00 2001 From: ismail simsek Date: Sat, 6 May 2023 23:48:25 +0300 Subject: [PATCH] Prometheus: Fix Query Inspector expression range value (#67919) * Use metadata from respective query * Unit test to cover having proper metadata for each query we run --- .../prometheus/result_transformer.test.ts | 56 ++++++++++++++++++- .../prometheus/result_transformer.ts | 5 +- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/public/app/plugins/datasource/prometheus/result_transformer.test.ts b/public/app/plugins/datasource/prometheus/result_transformer.test.ts index a738eaf9e6f..2b4be5767ff 100644 --- a/public/app/plugins/datasource/prometheus/result_transformer.test.ts +++ b/public/app/plugins/datasource/prometheus/result_transformer.test.ts @@ -1,9 +1,9 @@ import { + createDataFrame, DataFrame, DataQueryRequest, DataQueryResponse, FieldType, - createDataFrame, PreferredVisualisationType, } from '@grafana/data'; @@ -828,6 +828,60 @@ describe('Prometheus Result Transformer', () => { expect(transformedTableDataFrames[1].fields[1].values).toEqual([]); expect(transformedTableDataFrames[1].fields[0].values).toEqual([]); }); + + it('transforms dataframes with metadata resolving from their refIds', () => { + const value1 = 'value1'; + const value2 = 'value2'; + const executedQueryForRefA = 'Expr: avg_over_time(access_evaluation_duration_bucket[15s])\nStep: 15s'; + const executedQueryForRefB = 'Expr: avg_over_time(access_evaluation_duration_bucket[5m])\nStep: 15s'; + + const dataframes = [ + createDataFrame({ + refId: 'A', + meta: { + typeVersion: [0, 1], + custom: { + resultType: 'vector', + }, + executedQueryString: executedQueryForRefA, + }, + fields: [ + { name: 'time', type: FieldType.time, values: [6, 5, 4] }, + { + name: 'value', + type: FieldType.number, + values: [6, 5, 4], + labels: { label1: value1, label2: value2 }, + }, + ], + }), + createDataFrame({ + refId: 'B', + meta: { + typeVersion: [0, 1], + custom: { + resultType: 'vector', + }, + executedQueryString: executedQueryForRefB, + }, + fields: [ + { name: 'time', type: FieldType.time, values: [6, 5, 4] }, + { + name: 'value', + type: FieldType.number, + values: [6, 5, 4], + labels: { label1: value1, label2: value2 }, + }, + ], + }), + ]; + + const transformedTableDataFrames = transformDFToTable(dataframes); + expect(transformedTableDataFrames[0].meta).toBeTruthy(); + expect(transformedTableDataFrames[1].meta).toBeTruthy(); + expect(transformedTableDataFrames[0].meta?.executedQueryString).toEqual(executedQueryForRefA); + expect(transformedTableDataFrames[1].meta?.executedQueryString).toEqual(executedQueryForRefB); + }); }); describe('transform', () => { diff --git a/public/app/plugins/datasource/prometheus/result_transformer.ts b/public/app/plugins/datasource/prometheus/result_transformer.ts index f430483e8c8..c8240735e45 100644 --- a/public/app/plugins/datasource/prometheus/result_transformer.ts +++ b/public/app/plugins/datasource/prometheus/result_transformer.ts @@ -247,7 +247,10 @@ export function transformDFToTable(dfs: DataFrame[]): DataFrame[] { refId, fields, // Prometheus specific UI for instant queries - meta: { ...dfs[0].meta, preferredVisualisationType: 'rawPrometheus' as PreferredVisualisationType }, + meta: { + ...dataFramesByRefId[refId][0].meta, + preferredVisualisationType: 'rawPrometheus' as PreferredVisualisationType, + }, length: timeField.values.length, }; });