From c39c6a2a874d8396555ad147726d29c1de21c79e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ida=20=C5=A0tambuk?= Date: Mon, 11 Aug 2025 15:20:48 +0200 Subject: [PATCH] CloudWatch: Append query type to the request id (#109068) --- .../cloudwatch/mocks/LogsQueryRunner.ts | 18 +---------- .../cloudwatch/mocks/MetricsQueryRunner.ts | 2 +- .../CloudWatchLogsQueryRunner.test.ts | 12 ++++++++ .../query-runner/CloudWatchLogsQueryRunner.ts | 2 +- .../CloudWatchMetricsQueryRunner.test.ts | 30 +++++++++++++++++++ .../CloudWatchMetricsQueryRunner.ts | 1 + 6 files changed, 46 insertions(+), 19 deletions(-) diff --git a/public/app/plugins/datasource/cloudwatch/mocks/LogsQueryRunner.ts b/public/app/plugins/datasource/cloudwatch/mocks/LogsQueryRunner.ts index 912523e0398..282fcd077bf 100644 --- a/public/app/plugins/datasource/cloudwatch/mocks/LogsQueryRunner.ts +++ b/public/app/plugins/datasource/cloudwatch/mocks/LogsQueryRunner.ts @@ -4,7 +4,7 @@ import { CustomVariableModel, DataFrame, DataSourceInstanceSettings } from '@gra import { BackendDataSourceResponse, toDataQueryResponse } from '@grafana/runtime'; import { CloudWatchLogsQueryRunner } from '../query-runner/CloudWatchLogsQueryRunner'; -import { CloudWatchJsonData, CloudWatchLogsQueryStatus, CloudWatchLogsRequest } from '../types'; +import { CloudWatchJsonData, CloudWatchLogsQueryStatus } from '../types'; import { CloudWatchSettings, setupMockedTemplateService } from './CloudWatchDataSource'; @@ -52,19 +52,3 @@ export function genMockFrames(numResponses: number): DataFrame[] { return mockFrames; } - -export function genMockCloudWatchLogsRequest(overrides: Partial = {}) { - const request: CloudWatchLogsRequest = { - queryString: 'fields @timestamp, @message | sort @timestamp desc', - logGroupNames: ['log-group-name-1', 'log-group-name-2'], - logGroups: [ - { arn: 'log-group-arn-1', name: 'log-group-name-1' }, - { arn: 'log-group-arn-2', name: 'log-group-name-2' }, - ], - refId: 'A', - region: 'us-east-1', - ...overrides, - }; - - return request; -} diff --git a/public/app/plugins/datasource/cloudwatch/mocks/MetricsQueryRunner.ts b/public/app/plugins/datasource/cloudwatch/mocks/MetricsQueryRunner.ts index ace86da0ec5..69cc7d20fb9 100644 --- a/public/app/plugins/datasource/cloudwatch/mocks/MetricsQueryRunner.ts +++ b/public/app/plugins/datasource/cloudwatch/mocks/MetricsQueryRunner.ts @@ -26,7 +26,7 @@ export function setupMockedMetricsQueryRunner({ range: TimeRangeMock, rangeRaw: { from: '1483228800', to: '1483232400' }, targets: [], - requestId: '', + requestId: 'mockId', interval: '', intervalMs: 0, scopedVars: {}, 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 f51b642942e..d6a40c4b89c 100644 --- a/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchLogsQueryRunner.test.ts +++ b/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchLogsQueryRunner.test.ts @@ -64,6 +64,18 @@ describe('CloudWatchLogsQueryRunner', () => { }); describe('handleLogQueries', () => { + it('appends -logs to the requestId', async () => { + const { runner, queryMock } = setupMockedLogsQueryRunner(); + + const request = { + ...LogsRequestMock, + requestId: 'mockId', + }; + await expect(runner.handleLogQueries(LogsRequestMock.targets, request, queryMock)).toEmitValuesWith(() => { + expect(queryMock.mock.calls[0][0].requestId).toEqual('mockId-logs'); + }); + }); + it('should request to start each query and then request to get the query results', async () => { const { runner } = setupMockedLogsQueryRunner(); diff --git a/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchLogsQueryRunner.ts b/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchLogsQueryRunner.ts index b86fb1ee44e..97ba156b287 100644 --- a/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchLogsQueryRunner.ts +++ b/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchLogsQueryRunner.ts @@ -420,7 +420,7 @@ export class CloudWatchLogsQueryRunner extends CloudWatchRequest { ...options, range, skipQueryCache: true, - requestId: options?.requestId || '', // dummy + requestId: options?.requestId + '-logs' || '', // adding -logs to prevent requestId from matching metric queries from the same panel interval: options?.interval || '', // dummy intervalMs: options?.intervalMs || 1, // dummy scopedVars: options?.scopedVars || {}, // dummy diff --git a/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchMetricsQueryRunner.test.ts b/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchMetricsQueryRunner.test.ts index 35978d1382b..0234af74af8 100644 --- a/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchMetricsQueryRunner.test.ts +++ b/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchMetricsQueryRunner.test.ts @@ -255,6 +255,36 @@ describe('CloudWatchMetricsQueryRunner', () => { }); }); + it('should append -metrics to the request id', async () => { + const queries: CloudWatchMetricsQuery[] = [ + { + id: '', + metricQueryType: MetricQueryType.Search, + metricEditorMode: MetricEditorMode.Builder, + queryMode: 'Metrics', + refId: 'A', + region: 'us-east-1', + namespace: 'AWS/EC2', + metricName: 'CPUUtilization', + dimensions: { + InstanceId: 'i-12345678', + }, + statistic: 'Average', + period: '[[period]]', + }, + ]; + + const { runner, queryMock, request } = setupMockedMetricsQueryRunner({ + // DataSourceWithBackend runs toDataQueryResponse({response from CW backend}) + response: toDataQueryResponse(resultsFromBEQuery), + variables: [periodIntervalVariable], + }); + + await expect(runner.handleMetricQueries(queries, request, queryMock)).toEmitValuesWith(() => { + expect(queryMock.mock.calls[0][0].requestId).toEqual('mockId-metrics'); + }); + }); + it('should return series list', async () => { const { runner, request, queryMock } = setupMockedMetricsQueryRunner({ // DataSourceWithBackend runs toDataQueryResponse({response from CW backend}) diff --git a/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchMetricsQueryRunner.ts b/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchMetricsQueryRunner.ts index 3fc10803226..6560e3d4eed 100644 --- a/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchMetricsQueryRunner.ts +++ b/public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchMetricsQueryRunner.ts @@ -77,6 +77,7 @@ export class CloudWatchMetricsQueryRunner extends CloudWatchRequest { const request: DataQueryRequest = { ...options, + requestId: options.requestId + '-metrics', // adding -metrics to prevent requestId from matching logs queries sent from the same panel targets: validMetricsQueries, };