From 920d2aa59983a30d6734e87d91c1308aa1ae1748 Mon Sep 17 00:00:00 2001 From: Beto Muniz Date: Mon, 17 Oct 2022 13:28:54 -0300 Subject: [PATCH] InfluxDB: Interpolate ad-hoc filters from Dashboard to Explore (#56996) --- .../app/plugins/datasource/influxdb/datasource.ts | 8 +++++--- .../datasource/influxdb/specs/datasource.test.ts | 13 +++++++++++++ public/app/plugins/datasource/influxdb/types.ts | 3 ++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/public/app/plugins/datasource/influxdb/datasource.ts b/public/app/plugins/datasource/influxdb/datasource.ts index a92523cdf8f..83b90ab3746 100644 --- a/public/app/plugins/datasource/influxdb/datasource.ts +++ b/public/app/plugins/datasource/influxdb/datasource.ts @@ -317,11 +317,12 @@ export default class InfluxDatasource extends DataSourceWithBackend 0) { + const adhocFiltersFromDashboard = options.targets.flatMap((target: InfluxQuery) => target.adhocFilters ?? []); + if (adhocFilters?.length || adhocFiltersFromDashboard?.length) { + const ahFilters = adhocFilters?.length ? adhocFilters : adhocFiltersFromDashboard; const tmpQuery = new InfluxQueryModel({ refId: 'A' }, this.templateSrv, scopedVars); - timeFilter += ' AND ' + tmpQuery.renderAdhocFilters(adhocFilters); + timeFilter += ' AND ' + tmpQuery.renderAdhocFilters(ahFilters); } - // replace grafana variables scopedVars.timeFilter = { value: timeFilter }; @@ -506,6 +507,7 @@ export default class InfluxDatasource extends DataSourceWithBackend { $interpolationVar: text, $interpolationVar2: text2, }; + const adhocFilters = [ + { + key: 'adhoc', + operator: '=', + value: 'val', + condition: '', + }, + ]; const templateSrv: any = { + getAdhocFilters: jest.fn((name: string) => { + return adhocFilters; + }), replace: jest.fn((target?: string, scopedVars?: ScopedVars, format?: string | Function): string => { if (!format) { return variableMap[target!] || ''; @@ -252,6 +263,7 @@ describe('InfluxDataSource', () => { }, ], ], + adhocFilters, }; function influxChecks(query: any) { @@ -265,6 +277,7 @@ describe('InfluxDataSource', () => { expect(query.tags![0].value).toBe(textWithFormatRegex); expect(query.groupBy![0].params![0]).toBe(textWithFormatRegex); expect(query.select![0][0].params![0]).toBe(textWithFormatRegex); + expect(query.adhocFilters[0].key).toBe(adhocFilters[0].key); } describe('when interpolating query variables for dashboard->explore', () => { diff --git a/public/app/plugins/datasource/influxdb/types.ts b/public/app/plugins/datasource/influxdb/types.ts index a3eb732c568..90fd819216e 100644 --- a/public/app/plugins/datasource/influxdb/types.ts +++ b/public/app/plugins/datasource/influxdb/types.ts @@ -1,4 +1,4 @@ -import { DataQuery, DataSourceJsonData } from '@grafana/data'; +import { DataQuery, DataSourceJsonData, AdHocVariableFilter } from '@grafana/data'; export enum InfluxVersion { InfluxQL = 'InfluxQL', @@ -70,4 +70,5 @@ export interface InfluxQuery extends DataQuery { titleColumn?: string; name?: string; textEditor?: boolean; + adhocFilters?: AdHocVariableFilter[]; }