CloudWatch: Append query type to the request id (#109068)

This commit is contained in:
Ida Štambuk
2025-08-11 15:20:48 +02:00
committed by GitHub
parent 0e59bcdbb8
commit c39c6a2a87
6 changed files with 46 additions and 19 deletions
@@ -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<CloudWatchLogsRequest> = {}) {
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;
}
@@ -26,7 +26,7 @@ export function setupMockedMetricsQueryRunner({
range: TimeRangeMock,
rangeRaw: { from: '1483228800', to: '1483232400' },
targets: [],
requestId: '',
requestId: 'mockId',
interval: '',
intervalMs: 0,
scopedVars: {},
@@ -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();
@@ -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
@@ -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})
@@ -77,6 +77,7 @@ export class CloudWatchMetricsQueryRunner extends CloudWatchRequest {
const request: DataQueryRequest<CloudWatchQuery> = {
...options,
requestId: options.requestId + '-metrics', // adding -metrics to prevent requestId from matching logs queries sent from the same panel
targets: validMetricsQueries,
};