From 6b77a9ae80dbda03cef15807ce2141c9aef7bb2e Mon Sep 17 00:00:00 2001 From: ismail simsek Date: Mon, 8 May 2023 20:05:18 +0300 Subject: [PATCH] [v9.5.x] Prometheus: Fix Query Inspector expression range value (#68019) * 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 (cherry picked from commit 69a38def63f058bede36357e08da0f5c016422f5) * Fix test --- .../prometheus/result_transformer.test.ts | 54 +++++++++++++++++++ .../prometheus/result_transformer.ts | 5 +- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/public/app/plugins/datasource/prometheus/result_transformer.test.ts b/public/app/plugins/datasource/prometheus/result_transformer.test.ts index e7afaf09cfa..56efe09cc99 100644 --- a/public/app/plugins/datasource/prometheus/result_transformer.test.ts +++ b/public/app/plugins/datasource/prometheus/result_transformer.test.ts @@ -762,6 +762,60 @@ describe('Prometheus Result Transformer', () => { expect(transformedTableDataFrames[1].fields[1].values.toArray()).toEqual([]); expect(transformedTableDataFrames[1].fields[0].values.toArray()).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 = [ + new MutableDataFrame({ + 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 }, + }, + ], + }), + new MutableDataFrame({ + 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 30f3150391a..b33a2b0322f 100644 --- a/public/app/plugins/datasource/prometheus/result_transformer.ts +++ b/public/app/plugins/datasource/prometheus/result_transformer.ts @@ -231,7 +231,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, }; });