From 2d8c7ea35001e98149a2c6b600e7545df42deb20 Mon Sep 17 00:00:00 2001 From: "grafana-delivery-bot[bot]" <132647405+grafana-delivery-bot[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 15:08:23 +0100 Subject: [PATCH] [v11.3.x] InfluxDB: Adhoc filters can use template vars as values (#98785) InfluxDB: adhoc filters can use template vars as values (#98567) --------- Co-authored-by: Ivan Ortega (cherry picked from commit be1505f2fbd8837da854b1441e7fd3a566e631d8) Co-authored-by: Andrew Hackmann <5140848+bossinc@users.noreply.github.com> --- .../datasource/influxdb/datasource.test.ts | 22 ++++++++++++++++++- .../plugins/datasource/influxdb/datasource.ts | 1 + 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/public/app/plugins/datasource/influxdb/datasource.test.ts b/public/app/plugins/datasource/influxdb/datasource.test.ts index 5dfe4f33543..b2cdd4522e3 100644 --- a/public/app/plugins/datasource/influxdb/datasource.test.ts +++ b/public/app/plugins/datasource/influxdb/datasource.test.ts @@ -1,5 +1,6 @@ import { lastValueFrom, of } from 'rxjs'; +import { AdHocVariableFilter } from '@grafana/data'; import { BackendSrvRequest, TemplateSrv } from '@grafana/runtime'; import config from 'app/core/config'; @@ -10,6 +11,7 @@ import { mockInfluxQueryRequest } from './__mocks__/request'; import { mockInfluxFetchResponse, mockMetricFindQueryResponse } from './__mocks__/response'; import { BROWSER_MODE_DISABLED_MESSAGE } from './constants'; import InfluxDatasource from './datasource'; +import { InfluxQuery, InfluxVersion } from './types'; const fetchMock = mockBackendService(mockInfluxFetchResponse()); @@ -267,7 +269,10 @@ describe('InfluxDataSource Backend Mode [influxdbBackendMigration=true]', () => }); describe('interpolateQueryExpr', () => { - let ds = getMockInfluxDS(getMockDSInstanceSettings(), {} as TemplateSrv); + const templateSrvStub = { + replace: jest.fn().mockImplementation((...rest: unknown[]) => 'templateVarReplaced'), + } as unknown as TemplateSrv; + let ds = getMockInfluxDS(getMockDSInstanceSettings(), templateSrvStub); it('should return the value as it is', () => { const value = 'normalValue'; const variableMock = queryBuilder().withId('tempVar').withName('tempVar').withMulti(false).build(); @@ -373,4 +378,19 @@ describe('interpolateQueryExpr', () => { const expectation = `1.0`; expect(result).toBe(expectation); }); + + it('template var in adhoc', () => { + const templateVarName = '$templateVarName'; + const templateVarValue = 'templateVarValue'; + const templateSrvStub = { + replace: jest + .fn() + .mockImplementation((target?: string) => (target === templateVarName ? templateVarValue : target)), + } as unknown as TemplateSrv; + const ds = getMockInfluxDS(getMockDSInstanceSettings(), templateSrvStub); + ds.version = InfluxVersion.SQL; + const adhocFilter: AdHocVariableFilter[] = [{ key: 'bar', value: templateVarName, operator: '=' }]; + const result = ds.applyTemplateVariables(mockInfluxQueryRequest() as unknown as InfluxQuery, {}, adhocFilter); + expect(result.tags![0].value).toBe(templateVarValue); + }); }); diff --git a/public/app/plugins/datasource/influxdb/datasource.ts b/public/app/plugins/datasource/influxdb/datasource.ts index 69fe4452405..1292ac4b625 100644 --- a/public/app/plugins/datasource/influxdb/datasource.ts +++ b/public/app/plugins/datasource/influxdb/datasource.ts @@ -208,6 +208,7 @@ export default class InfluxDatasource extends DataSourceWithBackend { const { condition, ...asTag } = af; + asTag.value = this.templateSrv.replace(asTag.value ?? '', variables); return asTag; }); query.tags = [...(query.tags ?? []), ...adhocFiltersToTags];