From fbd2412f37984c92f1065d25eee3aa0ab99c1f57 Mon Sep 17 00:00:00 2001 From: Galen Kistler <109082771+gtk-grafana@users.noreply.github.com> Date: Wed, 26 Jul 2023 14:47:13 -0500 Subject: [PATCH] Prometheus: Update heatmap unit tests (#72404) introduce tests for new potential heatmap response type, revert prior changes to tests --- .../prometheus/result_transformer.test.ts | 132 +++++++++++++++++- 1 file changed, 126 insertions(+), 6 deletions(-) diff --git a/public/app/plugins/datasource/prometheus/result_transformer.test.ts b/public/app/plugins/datasource/prometheus/result_transformer.test.ts index f44856d27af..76240c37803 100644 --- a/public/app/plugins/datasource/prometheus/result_transformer.test.ts +++ b/public/app/plugins/datasource/prometheus/result_transformer.test.ts @@ -360,7 +360,8 @@ describe('Prometheus Result Transformer', () => { expect(series.data[1].meta?.preferredVisualisationType).toEqual('rawPrometheus' as PreferredVisualisationType); }); - it('results with deprecated heatmap format should be correctly transformed', () => { + // Heatmap frames can either have a name of the metric, or if there is no metric, a name of "Value" + it('results with heatmap format (no metric name) should be correctly transformed', () => { const options = { targets: [ { @@ -420,7 +421,7 @@ describe('Prometheus Result Transformer', () => { expect(series.data[0].fields[2].name).toEqual('2'); expect(series.data[0].fields[3].name).toEqual('+Inf'); }); - it('results with heatmap format should be correctly transformed', () => { + it('results with heatmap format (with metric name) should be correctly transformed', () => { const options = { targets: [ { @@ -437,9 +438,10 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'metric_name', type: FieldType.number, values: [10, 10, 0], - labels: { le: '1' }, + labels: { le: '1', __name__: 'metric_name' }, }, ], }), @@ -448,9 +450,10 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'metric_name', type: FieldType.number, values: [30, 10, 40], - labels: { le: '+Inf' }, + labels: { le: '+Inf', __name__: 'metric_name' }, }, ], }), @@ -459,9 +462,10 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'metric_name', type: FieldType.number, values: [20, 10, 30], - labels: { le: '2' }, + labels: { le: '2', __name__: 'metric_name' }, }, ], }), @@ -478,7 +482,7 @@ describe('Prometheus Result Transformer', () => { expect(series.data[0].fields[3].name).toEqual('+Inf'); }); - it('results with heatmap format from multiple queries should be correctly transformed', () => { + it('results with heatmap format (no metric name) from multiple queries should be correctly transformed', () => { const options = { targets: [ { @@ -499,6 +503,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [10, 10, 0], labels: { le: '1' }, @@ -510,6 +515,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [20, 10, 30], labels: { le: '2' }, @@ -521,6 +527,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [30, 10, 40], labels: { le: '+Inf' }, @@ -532,6 +539,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [10, 10, 0], labels: { le: '1' }, @@ -543,6 +551,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [20, 10, 30], labels: { le: '2' }, @@ -554,6 +563,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [30, 10, 40], labels: { le: '+Inf' }, @@ -569,6 +579,103 @@ describe('Prometheus Result Transformer', () => { expect(series.data[0].fields[2].values).toEqual([10, 0, 30]); expect(series.data[0].fields[3].values).toEqual([10, 0, 10]); }); + it('results with heatmap format (with metric name) from multiple queries should be correctly transformed', () => { + const options = { + targets: [ + { + format: 'heatmap', + refId: 'A', + }, + { + format: 'heatmap', + refId: 'B', + }, + ], + } as unknown as DataQueryRequest; + const response = { + state: 'Done', + data: [ + createDataFrame({ + refId: 'A', + fields: [ + { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + { + name: 'metric_name', + type: FieldType.number, + values: [10, 10, 0], + labels: { le: '1', __name__: 'metric_name' }, + }, + ], + }), + createDataFrame({ + refId: 'A', + fields: [ + { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + { + name: 'metric_name', + type: FieldType.number, + values: [20, 10, 30], + labels: { le: '2', __name__: 'metric_name' }, + }, + ], + }), + createDataFrame({ + refId: 'A', + fields: [ + { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + { + name: 'metric_name', + type: FieldType.number, + values: [30, 10, 40], + labels: { le: '+Inf', __name__: 'metric_name' }, + }, + ], + }), + createDataFrame({ + refId: 'B', + fields: [ + { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + { + name: 'metric_name', + type: FieldType.number, + values: [10, 10, 0], + labels: { le: '1', __name__: 'metric_name' }, + }, + ], + }), + createDataFrame({ + refId: 'B', + fields: [ + { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + { + name: 'metric_name', + type: FieldType.number, + values: [20, 10, 30], + labels: { le: '2', __name__: 'metric_name' }, + }, + ], + }), + createDataFrame({ + refId: 'B', + fields: [ + { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, + { + name: 'metric_name', + type: FieldType.number, + values: [30, 10, 40], + labels: { le: '+Inf', __name__: 'metric_name' }, + }, + ], + }), + ], + } as unknown as DataQueryResponse; + + const series = transformV2(response, options, {}); + expect(series.data[0].fields.length).toEqual(4); + expect(series.data[0].fields[1].values).toEqual([10, 10, 0]); + expect(series.data[0].fields[2].values).toEqual([10, 0, 30]); + expect(series.data[0].fields[3].values).toEqual([10, 0, 10]); + }); it('results with heatmap format and multiple histograms should be grouped and de-accumulated by non-le labels', () => { const options = { @@ -588,6 +695,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [10, 10, 0], labels: { le: '1', additionalProperty: '10' }, @@ -599,6 +707,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [20, 10, 30], labels: { le: '2', additionalProperty: '10' }, @@ -610,6 +719,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [30, 10, 40], labels: { le: '+Inf', additionalProperty: '10' }, @@ -622,6 +732,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [0, 10, 10], labels: { le: '1', additionalProperty: '20' }, @@ -633,6 +744,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [20, 10, 40], labels: { le: '2', additionalProperty: '20' }, @@ -644,6 +756,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [30, 10, 60], labels: { le: '+Inf', additionalProperty: '20' }, @@ -656,6 +769,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [30, 30, 60], labels: { le: '1', additionalProperty: '30' }, @@ -667,6 +781,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [30, 40, 60], labels: { le: '2', additionalProperty: '30' }, @@ -678,6 +793,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [40, 40, 60], labels: { le: '+Inf', additionalProperty: '30' }, @@ -719,6 +835,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [10, 10, 0], labels: { le: '1' }, @@ -736,6 +853,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4, 3, 2, 1] }, { + name: 'Value', type: FieldType.number, values: [30, 10, 40, 90, 14, 21], labels: { le: '6' }, @@ -767,6 +885,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4] }, { + name: 'Value', type: FieldType.number, values: [10, 10, 0], labels: { le: '1' }, @@ -784,6 +903,7 @@ describe('Prometheus Result Transformer', () => { fields: [ { name: 'Time', type: FieldType.time, values: [6, 5, 4, 3, 2, 1] }, { + name: 'Value', type: FieldType.number, values: [30, 10, 40, 90, 14, 21], labels: { le: '6' },