From e5b0ed00acd8008b44bc3bdda2a9b397013cb49f Mon Sep 17 00:00:00 2001 From: Andreas Christou Date: Wed, 18 Jun 2025 20:16:40 +0200 Subject: [PATCH] [release-11.6.2] InfluxDB: Fix variable interpolation on adhoc filters (#106949) InfluxDB: Fix variable interpolation on adhoc filters (#104931) Grafana frontend code sends adhoc filters to the backend in both the `tags` and `adhocFilters` params. The values in `tags` have dashboard variables interpolated, while those in `adhocFilters` don't. This PR updates the frontend code to also interpolate variables into the `adhocFilters` param. The duplicated values are left as they are in `tags`, in case some other spooky code at a distance relies on that. (cherry picked from commit 02d977e1afcf1d35299a7aa05550371c7e34d3fb) Co-authored-by: beejeebus --- .../plugins/datasource/influxdb/datasource.test.ts | 1 + .../app/plugins/datasource/influxdb/datasource.ts | 13 +++---------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/public/app/plugins/datasource/influxdb/datasource.test.ts b/public/app/plugins/datasource/influxdb/datasource.test.ts index 284717ac701..6cad2d22584 100644 --- a/public/app/plugins/datasource/influxdb/datasource.test.ts +++ b/public/app/plugins/datasource/influxdb/datasource.test.ts @@ -404,5 +404,6 @@ describe('interpolateQueryExpr', () => { 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); + expect(result.adhocFilters![0].value).toBe(templateVarValue); }); }); diff --git a/public/app/plugins/datasource/influxdb/datasource.ts b/public/app/plugins/datasource/influxdb/datasource.ts index 05fdaa324cf..ef3b2ca5667 100644 --- a/public/app/plugins/datasource/influxdb/datasource.ts +++ b/public/app/plugins/datasource/influxdb/datasource.ts @@ -47,14 +47,7 @@ import { buildMetadataQuery } from './influxql_query_builder'; import { prepareAnnotation } from './migrations'; import { buildRawQuery, removeRegexWrapper } from './queryUtils'; import ResponseParser from './response_parser'; -import { - DEFAULT_POLICY, - InfluxOptions, - InfluxQuery, - InfluxQueryTag, - InfluxVariableQuery, - InfluxVersion, -} from './types'; +import { DEFAULT_POLICY, InfluxOptions, InfluxQuery, InfluxVariableQuery, InfluxVersion } from './types'; import { InfluxVariableSupport } from './variables'; export default class InfluxDatasource extends DataSourceWithBackend { @@ -206,12 +199,12 @@ export default class InfluxDatasource extends DataSourceWithBackend { + query.adhocFilters = (query.adhocFilters ?? []).map((af) => { const { condition, ...asTag } = af; asTag.value = this.templateSrv.replace(asTag.value ?? '', variables); return asTag; }); - query.tags = [...(query.tags ?? []), ...adhocFiltersToTags]; + query.tags = [...(query.tags ?? []), ...query.adhocFilters]; } }