From eafc132d3dca0f42cf81c4b49b12965a5c4019e6 Mon Sep 17 00:00:00 2001 From: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> Date: Wed, 19 Aug 2020 08:28:50 +0200 Subject: [PATCH] Loki: Add scopedVars support in legend formatting for repeated variables (#27046) * Pass scoped vars to createMetricLabel * Add tests * Refacotr * Update tests * Update test --- public/app/plugins/datasource/loki/datasource.ts | 1 + .../datasource/loki/result_transformer.test.ts | 11 ++++++++++- .../plugins/datasource/loki/result_transformer.ts | 14 +++++++++----- public/app/plugins/datasource/loki/types.ts | 3 ++- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/public/app/plugins/datasource/loki/datasource.ts b/public/app/plugins/datasource/loki/datasource.ts index 16933e8d624..d32d2f8bba1 100644 --- a/public/app/plugins/datasource/loki/datasource.ts +++ b/public/app/plugins/datasource/loki/datasource.ts @@ -210,6 +210,7 @@ export class LokiDatasource extends DataSourceApi { responseListLength, linesLimit, this.instanceSettings.jsonData, + (options as DataQueryRequest).scopedVars, (options as DataQueryRequest).reverse ) ) diff --git a/public/app/plugins/datasource/loki/result_transformer.test.ts b/public/app/plugins/datasource/loki/result_transformer.test.ts index a72083228ba..7221e0b1124 100644 --- a/public/app/plugins/datasource/loki/result_transformer.test.ts +++ b/public/app/plugins/datasource/loki/result_transformer.test.ts @@ -1,5 +1,5 @@ import { CircularDataFrame, FieldCache, FieldType, MutableDataFrame } from '@grafana/data'; -import { LokiStreamResult, LokiTailResponse, LokiStreamResponse, LokiResultType } from './types'; +import { LokiStreamResult, LokiTailResponse, LokiStreamResponse, LokiResultType, TransformerOptions } from './types'; import * as ResultTransformer from './result_transformer'; import { enhanceDataFrame } from './result_transformer'; @@ -114,6 +114,15 @@ describe('loki result transformer', () => { }); }); }); + describe('createMetricLabel', () => { + it('should create correct label based on passed variables', () => { + const label = ResultTransformer.createMetricLabel({}, ({ + scopedVars: { testLabel: { selected: true, text: 'label1', value: 'label1' } }, + legendFormat: '{{$testLabel}}', + } as unknown) as TransformerOptions); + expect(label).toBe('label1'); + }); + }); }); describe('enhanceDataFrame', () => { diff --git a/public/app/plugins/datasource/loki/result_transformer.ts b/public/app/plugins/datasource/loki/result_transformer.ts index 6768874730e..80501eb536f 100644 --- a/public/app/plugins/datasource/loki/result_transformer.ts +++ b/public/app/plugins/datasource/loki/result_transformer.ts @@ -16,6 +16,7 @@ import { QueryResultMetaStat, QueryResultMeta, TimeSeriesValue, + ScopedVars, } from '@grafana/data'; import templateSrv from 'app/features/templating/template_srv'; @@ -240,11 +241,11 @@ export function lokiResultsToTableModel( return table; } -function createMetricLabel(labelData: { [key: string]: string }, options?: TransformerOptions) { +export function createMetricLabel(labelData: { [key: string]: string }, options?: TransformerOptions) { let label = options === undefined || _.isEmpty(options.legendFormat) ? getOriginalMetricName(labelData) - : renderTemplate(templateSrv.replace(options.legendFormat ?? ''), labelData); + : renderTemplate(templateSrv.replace(options.legendFormat ?? '', options.scopedVars), labelData); if (!label && options) { label = options.query; @@ -415,13 +416,13 @@ export function rangeQueryResponseToTimeSeries( response: LokiResponse, query: LokiRangeQueryRequest, target: LokiQuery, - responseListLength: number + responseListLength: number, + scopedVars: ScopedVars ): TimeSeries[] { /** Show results of Loki metric queries only in graph */ const meta: QueryResultMeta = { preferredVisualisationType: 'graph', }; - const transformerOptions: TransformerOptions = { format: target.format, legendFormat: target.legendFormat ?? '', @@ -433,6 +434,7 @@ export function rangeQueryResponseToTimeSeries( refId: target.refId, meta, valueWithRefId: target.valueWithRefId, + scopedVars, }; switch (response.data.resultType) { @@ -454,6 +456,7 @@ export function processRangeQueryResponse( responseListLength: number, limit: number, config: LokiOptions, + scopedVars: ScopedVars, reverse = false ) { switch (response.data.resultType) { @@ -473,7 +476,8 @@ export function processRangeQueryResponse( ...target, format: 'time_series', }, - responseListLength + responseListLength, + scopedVars ), key: target.refId, }); diff --git a/public/app/plugins/datasource/loki/types.ts b/public/app/plugins/datasource/loki/types.ts index fcc4cf5d181..cb09ff3dd5c 100644 --- a/public/app/plugins/datasource/loki/types.ts +++ b/public/app/plugins/datasource/loki/types.ts @@ -1,4 +1,4 @@ -import { DataQuery, DataSourceJsonData, QueryResultMeta } from '@grafana/data'; +import { DataQuery, DataSourceJsonData, QueryResultMeta, ScopedVars } from '@grafana/data'; export interface LokiInstantQueryRequest { query: string; @@ -122,6 +122,7 @@ export interface TransformerOptions { query: string; responseListLength: number; refId: string; + scopedVars: ScopedVars; meta?: QueryResultMeta; valueWithRefId?: boolean; }