From 936e72f1e6b8719bc6cd135eb67b56209356a408 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Thu, 9 Mar 2023 00:56:07 +0000 Subject: [PATCH] [v9.4.x] CloudWatch Logs: Fix interpolation of scoped variables in queryString (#64405) * CloudWatch Logs: Fix interpolation of scoped variables in queryString (#64267) (cherry picked from commit af9a0dbe393af082c595fc76a6316a06dfb525fb) * fix typecheck --------- Co-authored-by: Isabella Siu --- .../cloudwatch/__mocks__/Request.ts | 2 +- .../CloudWatchLogsQueryRunner.test.ts | 21 ++++++++++++++++++- .../query-runner/CloudWatchLogsQueryRunner.ts | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/public/app/plugins/datasource/cloudwatch/__mocks__/Request.ts b/public/app/plugins/datasource/cloudwatch/__mocks__/Request.ts index 3366db848c1..aeaa374af96 100644 --- a/public/app/plugins/datasource/cloudwatch/__mocks__/Request.ts +++ b/public/app/plugins/datasource/cloudwatch/__mocks__/Request.ts @@ -24,7 +24,7 @@ export const LogsRequestMock: DataQueryRequest = { requestId: '', interval: '', intervalMs: 0, - scopedVars: {}, + scopedVars: { __interval: { value: '20s', text: '20s' } }, timezone: '', app: '', startTime: 0, diff --git a/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchLogsQueryRunner.test.ts b/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchLogsQueryRunner.test.ts index fbb7910545b..79e379a79ad 100644 --- a/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchLogsQueryRunner.test.ts +++ b/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchLogsQueryRunner.test.ts @@ -216,6 +216,16 @@ describe('CloudWatchLogsQueryRunner', () => { expression: `fields @timestamp, @message | sort @timestamp desc | limit 1`, }; + const logsScopedVarQuery: CloudWatchLogsQuery = { + queryMode: 'Logs', + logGroups: [{ arn: logGroupNamesVariable.name, name: logGroupNamesVariable.name }], + hide: false, + id: '', + region: '$' + regionVariable.name, + refId: 'A', + expression: `stats count(*) by queryType, bin($__interval)`, + }; + describe('handleLogQueries', () => { it('should map log queries to start query requests correctly', async () => { const { runner } = setupMockedLogsQueryRunner({ @@ -229,7 +239,9 @@ describe('CloudWatchLogsQueryRunner', () => { }, }); const spy = jest.spyOn(runner, 'makeLogActionRequest'); - await lastValueFrom(runner.handleLogQueries([legacyLogGroupNamesQuery, logGroupNamesQuery], LogsRequestMock)); + await lastValueFrom( + runner.handleLogQueries([legacyLogGroupNamesQuery, logGroupNamesQuery, logsScopedVarQuery], LogsRequestMock) + ); const startQueryRequests: StartQueryRequest[] = [ { queryString: `fields @timestamp, @message | sort @timestamp desc | limit ${limitVariable.current.value}`, @@ -251,6 +263,13 @@ describe('CloudWatchLogsQueryRunner', () => { refId: legacyLogGroupNamesQuery.refId, region: regionVariable.current.value as string, }, + { + queryString: `stats count(*) by queryType, bin(20s)`, + logGroupNames: [], + logGroups: [...(logGroupNamesVariable.current.value as string[]).map((v) => ({ arn: v, name: v }))], + refId: legacyLogGroupNamesQuery.refId, + region: regionVariable.current.value as string, + }, ]; expect(spy).toHaveBeenNthCalledWith(1, 'StartQuery', startQueryRequests); }); diff --git a/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchLogsQueryRunner.ts b/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchLogsQueryRunner.ts index bf6152f01a7..3f5810fe607 100644 --- a/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchLogsQueryRunner.ts +++ b/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchLogsQueryRunner.ts @@ -103,7 +103,7 @@ export class CloudWatchLogsQueryRunner extends CloudWatchRequest { return { refId: target.refId, region: this.templateSrv.replace(this.getActualRegion(target.region)), - queryString: this.templateSrv.replace(target.expression || ''), + queryString: this.templateSrv.replace(target.expression || '', options.scopedVars), logGroups, logGroupNames, };