CloudWatch: migrate old variable queries with empty array (#49197) (#49269)

(cherry picked from commit 66220758b3)
This commit is contained in:
Isabella Siu
2022-05-20 08:59:40 -04:00
committed by GitHub
parent 7c4c6aa544
commit 4c15f8356e
4 changed files with 76 additions and 11 deletions
@@ -210,6 +210,16 @@ describe('migration', () => {
expect(query.dimensionFilters).toBe('');
});
});
describe('and filter value is an empty array', () => {
it('should leave an empty filter', () => {
const query = migrateVariableQuery(
'dimension_values(us-east-1,AWS/RDS,CPUUtilization,DBInstanceIdentifier, [])'
);
expect(query.dimensionFilters).toBe('');
});
});
describe('and filter param is defined by user', () => {
it('should use the user defined filter', () => {
const query = migrateVariableQuery(
@@ -223,14 +233,35 @@ describe('migration', () => {
expect(query.dimensionFilters).toBe('{"InstanceId":"$instance_id"}');
});
});
describe('when resource_arns query is used', () => {
it('should parse the query', () => {
const query = migrateVariableQuery('resource_arns(us-east-1,rds:db,{"environment":["$environment"]})');
expect(query.queryType).toBe(VariableQueryType.ResourceArns);
expect(query.region).toBe('us-east-1');
expect(query.resourceType).toBe('rds:db');
expect(query.tags).toBe('{"environment":["$environment"]}');
});
});
describe('when resource_arns query is used', () => {
it('should parse the query', () => {
const query = migrateVariableQuery('resource_arns(us-east-1,rds:db,{"environment":["$environment"]})');
expect(query.queryType).toBe(VariableQueryType.ResourceArns);
expect(query.region).toBe('us-east-1');
expect(query.resourceType).toBe('rds:db');
expect(query.tags).toBe('{"environment":["$environment"]}');
});
it('should parse a empty array for tags', () => {
const query = migrateVariableQuery('resource_arns(us-east-1,rds:db, [])');
expect(query.tags).toBe('');
});
});
describe('when ec2_instance_attribute query is used', () => {
it('should parse the query', () => {
const query = migrateVariableQuery('ec2_instance_attribute(us-east-1,rds:db,{"environment":["$environment"]})');
expect(query.queryType).toBe(VariableQueryType.EC2InstanceAttributes);
expect(query.region).toBe('us-east-1');
expect(query.attributeName).toBe('rds:db');
expect(query.ec2Filters).toBe('{"environment":["$environment"]}');
});
it('should parse an empty array for filters', () => {
const query = migrateVariableQuery('ec2_instance_attribute(us-east-1,rds:db,[])');
expect(query.ec2Filters).toBe('');
});
});
});
@@ -124,6 +124,9 @@ export function migrateVariableQuery(rawQuery: string | VariableQuery): Variable
newQuery.metricName = dimensionValuesQuery[3];
newQuery.dimensionKey = dimensionValuesQuery[4];
newQuery.dimensionFilters = dimensionValuesQuery[6] || '';
if (newQuery.dimensionFilters === '[]') {
newQuery.dimensionFilters = '';
}
return newQuery;
}
@@ -141,6 +144,9 @@ export function migrateVariableQuery(rawQuery: string | VariableQuery): Variable
newQuery.region = ec2InstanceAttributeQuery[1];
newQuery.attributeName = ec2InstanceAttributeQuery[2];
newQuery.ec2Filters = ec2InstanceAttributeQuery[3] || '';
if (newQuery.ec2Filters === '[]') {
newQuery.ec2Filters = '';
}
return newQuery;
}
@@ -150,6 +156,9 @@ export function migrateVariableQuery(rawQuery: string | VariableQuery): Variable
newQuery.region = resourceARNsQuery[1];
newQuery.resourceType = resourceARNsQuery[2];
newQuery.tags = resourceARNsQuery[3] || '';
if (newQuery.tags === '[]') {
newQuery.tags = '';
}
return newQuery;
}
@@ -74,6 +74,7 @@ describe('variables', () => {
expect(getDimensionValues).not.toBeCalled();
expect(result).toEqual([]);
});
it('should run if values are set', async () => {
const result = await variables.execute(query);
expect(getDimensionValues).toBeCalledWith(query.region, query.namespace, query.metricName, query.dimensionKey, {
@@ -81,6 +82,18 @@ describe('variables', () => {
});
expect(result).toEqual([{ text: 'e', value: 'e', expandable: true }]);
});
it('should replace empty array filters with empty object', async () => {
const result = await variables.execute({ ...query, dimensionFilters: '[]' });
expect(getDimensionValues).toBeCalledWith(
query.region,
query.namespace,
query.metricName,
query.dimensionKey,
{}
);
expect(result).toEqual([{ text: 'e', value: 'e', expandable: true }]);
});
});
describe('EBS volume ids', () => {
@@ -129,6 +142,12 @@ describe('variables', () => {
expect(getEc2InstanceAttribute).toBeCalledWith(query.region, query.attributeName, { env: ['b'] });
expect(result).toEqual([{ text: 'g', value: 'g', expandable: true }]);
});
it('should replace empty array filters with empty object', async () => {
const result = await variables.execute({ ...query, ec2Filters: '[]' });
expect(getEc2InstanceAttribute).toBeCalledWith(query.region, query.attributeName, {});
expect(result).toEqual([{ text: 'g', value: 'g', expandable: true }]);
});
});
describe('resource arns', () => {
@@ -154,6 +173,12 @@ describe('variables', () => {
expect(getResourceARNs).toBeCalledWith(query.region, query.resourceType, { a: ['InstanceId', 'InstanceType'] });
expect(result).toEqual([{ text: 'h', value: 'h', expandable: true }]);
});
it('should replace empty array tags with empty object', async () => {
const result = await variables.execute({ ...query, tags: '[]' });
expect(getResourceARNs).toBeCalledWith(query.region, query.resourceType, {});
expect(result).toEqual([{ text: 'h', value: 'h', expandable: true }]);
});
});
it('should run statistics', async () => {
@@ -96,7 +96,7 @@ export class CloudWatchVariableSupport extends CustomVariableSupport<CloudWatchD
return [];
}
var filterJson = {};
if (dimensionFilters) {
if (dimensionFilters && dimensionFilters !== '[]') {
filterJson = JSON.parse(dimensionFilters);
}
const keys = await this.datasource.getDimensionValues(region, namespace, metricName, dimensionKey, filterJson);
@@ -124,7 +124,7 @@ export class CloudWatchVariableSupport extends CustomVariableSupport<CloudWatchD
return [];
}
var filterJson = {};
if (ec2Filters) {
if (ec2Filters && ec2Filters !== '[]') {
filterJson = JSON.parse(this.templateSrv.replace(ec2Filters));
}
const values = await this.datasource.getEc2InstanceAttribute(region, attributeName, filterJson);
@@ -140,7 +140,7 @@ export class CloudWatchVariableSupport extends CustomVariableSupport<CloudWatchD
return [];
}
var tagJson = {};
if (tags) {
if (tags && tags !== '[]') {
tagJson = JSON.parse(this.templateSrv.replace(tags));
}
const keys = await this.datasource.getResourceARNs(region, resourceType, tagJson);