From e2d00fcfd421883b560200044dfe552c00324956 Mon Sep 17 00:00:00 2001 From: Andreas Christou Date: Thu, 15 May 2025 19:58:49 +0100 Subject: [PATCH] [release-11.6.2] Graphite: Ensure template variables are interpolated correctly (#105388) Graphite: Ensure template variables are interpolated correctly (#105354) (cherry picked from commit e60ece33893cccbec2cfbdc41a6e00f0a4b8d084) --- .../datasource/graphite/datasource.test.ts | 16 ++++++++++++++++ .../plugins/datasource/graphite/datasource.ts | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/public/app/plugins/datasource/graphite/datasource.test.ts b/public/app/plugins/datasource/graphite/datasource.test.ts index 0ebe09c1c0b..2034d847c21 100644 --- a/public/app/plugins/datasource/graphite/datasource.test.ts +++ b/public/app/plugins/datasource/graphite/datasource.test.ts @@ -446,6 +446,22 @@ describe('graphiteDatasource', () => { expect(results[2]).toBe('target=' + encodeURIComponent('asPercent(series1,sumSeries(series1))')); }); + it('should replace target placeholder when nesting query references with template variables', () => { + ctx.templateSrv.init([{ type: 'query', name: 'metric', current: { value: ['aMetricName'] } }]); + const originalTargetMap = { + A: '[[metric]]', + B: 'sumSeries(#A)', + C: 'asPercent(#A,#B)', + }; + const results = ctx.ds.buildGraphiteParams( + { + targets: [{ target: '[[metric]]' }, { target: 'sumSeries(#A)' }, { target: 'asPercent(#A,#B)' }], + }, + originalTargetMap + ); + expect(results[2]).toBe('target=' + encodeURIComponent('asPercent(aMetricName,sumSeries(aMetricName))')); + }); + it('should fix wrong minute interval parameters', () => { const originalTargetMap = { A: "summarize(prod.25m.count, '25m', 'sum')", diff --git a/public/app/plugins/datasource/graphite/datasource.ts b/public/app/plugins/datasource/graphite/datasource.ts index 52e5b0ebc62..14460f23b66 100644 --- a/public/app/plugins/datasource/graphite/datasource.ts +++ b/public/app/plugins/datasource/graphite/datasource.ts @@ -1026,7 +1026,7 @@ export class GraphiteDatasource } targetValue = targets[target.refId]; - targetValue = targetValue.replace(regex, nestedSeriesRegexReplacer); + targetValue = this.templateSrv.replace(targetValue.replace(regex, nestedSeriesRegexReplacer)); targets[target.refId] = targetValue; if (!target.hide) {