CloudWatch: migrate variable query dimension filter (#48562)

* CloudWatch: migrate variable query dimension filter

* separate tests
This commit is contained in:
Isabella Siu 2022-05-18 13:51:18 -04:00 committed by GitHub
parent 5c32a6b6f6
commit ce1b1bc36b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 49 additions and 11 deletions

View File

@ -71,26 +71,56 @@ describe('variableQueryMigrations', () => {
});
});
describe('when OldVariableQuery is used', () => {
it('should parse the query', () => {
const baseOldQuery: OldVariableQuery = {
queryType: VariableQueryType.Regions,
namespace: '',
region: 'us-east-1',
metricName: '',
dimensionKey: '',
dimensionFilters: '',
ec2Filters: '',
instanceID: '',
attributeName: '',
resourceType: '',
tags: '',
refId: '',
};
it('should parse ec2 query', () => {
const oldQuery: OldVariableQuery = {
...baseOldQuery,
queryType: VariableQueryType.EC2InstanceAttributes,
namespace: '',
region: 'us-east-1',
metricName: '',
dimensionKey: '',
ec2Filters: '{"environment":["$environment"]}',
instanceID: '',
attributeName: 'rds:db',
resourceType: 'elasticloadbalancing:loadbalancer',
tags: '{"elasticbeanstalk:environment-name":["myApp-dev","myApp-prod"]}',
refId: '',
};
const query = migrateVariableQuery(oldQuery);
expect(query.region).toBe('us-east-1');
expect(query.attributeName).toBe('rds:db');
expect(query.ec2Filters).toStrictEqual({ environment: ['$environment'] });
});
it('should parse resource arn query', () => {
const oldQuery: OldVariableQuery = {
...baseOldQuery,
queryType: VariableQueryType.ResourceArns,
resourceType: 'elasticloadbalancing:loadbalancer',
tags: '{"elasticbeanstalk:environment-name":["myApp-dev","myApp-prod"]}',
};
const query = migrateVariableQuery(oldQuery);
expect(query.region).toBe('us-east-1');
expect(query.resourceType).toBe('elasticloadbalancing:loadbalancer');
expect(query.tags).toStrictEqual({ 'elasticbeanstalk:environment-name': ['myApp-dev', 'myApp-prod'] });
});
it('should parse dimension values query', () => {
const oldQuery: OldVariableQuery = {
...baseOldQuery,
queryType: VariableQueryType.DimensionValues,
metricName: 'foo',
dimensionKey: 'bar',
dimensionFilters: '{"InstanceId":"$instanceid"}',
};
const query = migrateVariableQuery(oldQuery);
expect(query.metricName).toBe('foo');
expect(query.dimensionKey).toBe('bar');
expect(query.dimensionFilters).toStrictEqual({ InstanceId: '$instanceid' });
});
});
});

View File

@ -13,10 +13,18 @@ export function migrateVariableQuery(rawQuery: string | VariableQuery | OldVaria
// rawQuery is OldVariableQuery
if (typeof rawQuery !== 'string') {
const newQuery: VariableQuery = omit(rawQuery, ['ec2Filters', 'tags']);
const newQuery: VariableQuery = omit(rawQuery, ['dimensionFilters', 'ec2Filters', 'tags']);
newQuery.dimensionFilters = {};
newQuery.ec2Filters = {};
newQuery.tags = {};
if (rawQuery.dimensionFilters !== '') {
try {
newQuery.dimensionFilters = JSON.parse(rawQuery.dimensionFilters);
} catch {
throw new Error(`unable to migrate poorly formed filters: ${rawQuery.dimensionFilters}`);
}
}
if (rawQuery.ec2Filters !== '') {
try {
newQuery.ec2Filters = JSON.parse(rawQuery.ec2Filters);

View File

@ -384,7 +384,7 @@ export interface OldVariableQuery extends DataQuery {
region: string;
metricName: string;
dimensionKey: string;
dimensionFilters?: Dimensions;
dimensionFilters: string;
ec2Filters: string;
instanceID: string;
attributeName: string;