Cloudwatch: Add expression field to interpolate variables in Metrics Code Builder (#64288)

This commit is contained in:
Ida Štambuk 2023-03-09 13:24:48 +01:00 committed by GitHub
parent 3cbeace0ca
commit 1c8ad04f8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 6 deletions

View File

@ -338,9 +338,9 @@ describe('datasource', () => {
datasource.interpolateVariablesInQueries([metricsQuery], {});
// We interpolate `expression`, `region`, `period`, `alias`, `metricName`, and `nameSpace` in CloudWatchMetricsQuery
// We interpolate `expression`, `sqlExpression`, `region`, `period`, `alias`, `metricName`, `dimensions`, and `nameSpace` in CloudWatchMetricsQuery
expect(templateService.replace).toHaveBeenCalledWith(`$${variableName}`, {});
expect(templateService.replace).toHaveBeenCalledTimes(7);
expect(templateService.replace).toHaveBeenCalledTimes(8);
expect(templateService.getVariableName).toHaveBeenCalledWith(`$${variableName}`);
expect(templateService.getVariableName).toHaveBeenCalledTimes(1);

View File

@ -694,18 +694,20 @@ describe('CloudWatchMetricsQueryRunner', () => {
);
});
});
describe('interpolateMetricsQueryVariables', () => {
it('interpolates dimensions correctly', () => {
it('interpolates values correctly', () => {
const testQuery = {
id: 'a',
refId: 'a',
region: 'us-east-2',
namespace: '',
expression: 'ABS($datasource)',
sqlExpression: 'select SUM(CPUUtilization) from $datasource',
dimensions: { InstanceId: '$dimension' },
};
const { runner } = setupMockedMetricsQueryRunner({ variables: [dimensionVariable], mockGetVariableName: false });
const result = runner.interpolateMetricsQueryVariables(testQuery, {
datasource: { text: 'foo', value: 'foo' },
dimension: { text: 'foo', value: 'foo' },
});
expect(result).toStrictEqual({
@ -713,7 +715,8 @@ describe('CloudWatchMetricsQueryRunner', () => {
metricName: '',
namespace: '',
period: '',
sqlExpression: '',
sqlExpression: 'select SUM(CPUUtilization) from foo',
expression: 'ABS(foo)',
dimensions: { InstanceId: ['foo'] },
});
});

View File

@ -99,12 +99,16 @@ export class CloudWatchMetricsQueryRunner extends CloudWatchRequest {
interpolateMetricsQueryVariables(
query: CloudWatchMetricsQuery,
scopedVars: ScopedVars
): Pick<CloudWatchMetricsQuery, 'alias' | 'metricName' | 'namespace' | 'period' | 'dimensions' | 'sqlExpression'> {
): Pick<
CloudWatchMetricsQuery,
'alias' | 'metricName' | 'namespace' | 'period' | 'dimensions' | 'sqlExpression' | 'expression'
> {
return {
alias: this.replaceVariableAndDisplayWarningIfMulti(query.alias, scopedVars),
metricName: this.replaceVariableAndDisplayWarningIfMulti(query.metricName, scopedVars),
namespace: this.replaceVariableAndDisplayWarningIfMulti(query.namespace, scopedVars),
period: this.replaceVariableAndDisplayWarningIfMulti(query.period, scopedVars),
expression: this.templateSrv.replace(query.expression, scopedVars),
sqlExpression: this.replaceVariableAndDisplayWarningIfMulti(query.sqlExpression, scopedVars),
dimensions: this.convertDimensionFormat(query.dimensions ?? {}, scopedVars),
};