From f63c2e4bc4a066cb84c8764a3ee99d63bfcdaef7 Mon Sep 17 00:00:00 2001 From: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> Date: Wed, 22 Dec 2021 16:50:58 +0100 Subject: [PATCH] Prometheus: Fix interpolation of variables in Annotation queries (#43459) --- .../datasource/prometheus/datasource.test.ts | 25 +++++++++++++++++++ .../datasource/prometheus/datasource.ts | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/public/app/plugins/datasource/prometheus/datasource.test.ts b/public/app/plugins/datasource/prometheus/datasource.test.ts index 778bfadd18a..017b1563d68 100644 --- a/public/app/plugins/datasource/prometheus/datasource.test.ts +++ b/public/app/plugins/datasource/prometheus/datasource.test.ts @@ -1062,6 +1062,31 @@ describe('PrometheusDatasource', () => { expect(results.map((result) => [result.time, result.timeEnd])).toEqual([[120000, 120000]]); }); }); + describe('with template variables', () => { + const originalReplaceMock = jest.fn((a: string, ...rest: any) => a); + afterAll(() => { + templateSrvStub.replace = originalReplaceMock; + }); + + it('should interpolate variables in query expr', () => { + const query = { + ...options, + annotation: { + ...options.annotation, + expr: '$variable', + }, + range: { + from: time({ seconds: 1 }), + to: time({ seconds: 2 }), + }, + }; + const interpolated = 'interpolated_expr'; + templateSrvStub.replace.mockReturnValue(interpolated); + ds.annotationQuery(query); + const req = fetchMock.mock.calls[0][0]; + expect(req.data.queries[0].expr).toBe(interpolated); + }); + }); }); describe('When resultFormat is table and instant = true', () => { diff --git a/public/app/plugins/datasource/prometheus/datasource.ts b/public/app/plugins/datasource/prometheus/datasource.ts index c2fdf84c1fa..6b3c8ed0e64 100644 --- a/public/app/plugins/datasource/prometheus/datasource.ts +++ b/public/app/plugins/datasource/prometheus/datasource.ts @@ -688,7 +688,7 @@ export class PrometheusDatasource data: { from: (this.getPrometheusTime(options.range.from, false) * 1000).toString(), to: (this.getPrometheusTime(options.range.to, true) * 1000).toString(), - queries: [queryModel], + queries: [this.applyTemplateVariables(queryModel, {})], }, requestId: `prom-query-${annotation.name}`, })