diff --git a/public/app/plugins/datasource/cloudwatch/migrations/variableQueryMigrations.test.ts b/public/app/plugins/datasource/cloudwatch/migrations/variableQueryMigrations.test.ts index 5d19c2dc216..c322768f166 100644 --- a/public/app/plugins/datasource/cloudwatch/migrations/variableQueryMigrations.test.ts +++ b/public/app/plugins/datasource/cloudwatch/migrations/variableQueryMigrations.test.ts @@ -35,6 +35,14 @@ describe('variableQueryMigrations', () => { expect(query.dimensionFilters).toStrictEqual({}); }); }); + 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).toStrictEqual({}); + }); + }); describe('and filter param is defined by user', () => { it('should use the user defined filter', () => { const query = migrateVariableQuery( @@ -60,6 +68,10 @@ describe('variableQueryMigrations', () => { expect(query.resourceType).toBe('elasticloadbalancing:loadbalancer'); expect(query.tags).toStrictEqual({ 'elasticbeanstalk:environment-name': ['myApp-dev', 'myApp-prod'] }); }); + it('should parse a empty array for tags', () => { + const query = migrateVariableQuery('resource_arns(eu-west-1,elasticloadbalancing:loadbalancer, [])'); + expect(query.tags).toStrictEqual({}); + }); }); describe('when ec2_instance_attribute query is used', () => { it('should parse the query', () => { @@ -69,6 +81,10 @@ describe('variableQueryMigrations', () => { expect(query.attributeName).toBe('rds:db'); expect(query.ec2Filters).toStrictEqual({ environment: ['$environment'] }); }); + it('should parse an empty array for filters', () => { + const query = migrateVariableQuery('ec2_instance_attribute(us-east-1,rds:db,[])'); + expect(query.ec2Filters).toStrictEqual({}); + }); }); describe('when OldVariableQuery is used', () => { const baseOldQuery: OldVariableQuery = { diff --git a/public/app/plugins/datasource/cloudwatch/migrations/variableQueryMigrations.ts b/public/app/plugins/datasource/cloudwatch/migrations/variableQueryMigrations.ts index add19cbfbcb..260a2a259df 100644 --- a/public/app/plugins/datasource/cloudwatch/migrations/variableQueryMigrations.ts +++ b/public/app/plugins/datasource/cloudwatch/migrations/variableQueryMigrations.ts @@ -18,21 +18,21 @@ export function migrateVariableQuery(rawQuery: string | VariableQuery | OldVaria newQuery.ec2Filters = {}; newQuery.tags = {}; - if (rawQuery.dimensionFilters !== '') { + if (rawQuery.dimensionFilters !== '' && rawQuery.ec2Filters !== '[]') { try { newQuery.dimensionFilters = JSON.parse(rawQuery.dimensionFilters); } catch { throw new Error(`unable to migrate poorly formed filters: ${rawQuery.dimensionFilters}`); } } - if (rawQuery.ec2Filters !== '') { + if (rawQuery.ec2Filters !== '' && rawQuery.ec2Filters !== '[]') { try { newQuery.ec2Filters = JSON.parse(rawQuery.ec2Filters); } catch { throw new Error(`unable to migrate poorly formed filters: ${rawQuery.ec2Filters}`); } } - if (rawQuery.tags !== '') { + if (rawQuery.tags !== '' && rawQuery.tags !== '[]') { try { newQuery.tags = JSON.parse(rawQuery.tags); } catch { @@ -93,7 +93,7 @@ export function migrateVariableQuery(rawQuery: string | VariableQuery | OldVaria newQuery.metricName = dimensionValuesQuery[3]; newQuery.dimensionKey = dimensionValuesQuery[4]; newQuery.dimensionFilters = {}; - if (!!dimensionValuesQuery[6]) { + if (!!dimensionValuesQuery[6] && dimensionValuesQuery[6] !== '[]') { try { newQuery.dimensionFilters = JSON.parse(dimensionValuesQuery[6]); } catch { @@ -116,7 +116,7 @@ export function migrateVariableQuery(rawQuery: string | VariableQuery | OldVaria newQuery.queryType = VariableQueryType.EC2InstanceAttributes; newQuery.region = ec2InstanceAttributeQuery[1]; newQuery.attributeName = ec2InstanceAttributeQuery[2]; - if (ec2InstanceAttributeQuery[3]) { + if (ec2InstanceAttributeQuery[3] && ec2InstanceAttributeQuery[3] !== '[]') { try { newQuery.ec2Filters = JSON.parse(ec2InstanceAttributeQuery[3]); } catch { @@ -131,7 +131,7 @@ export function migrateVariableQuery(rawQuery: string | VariableQuery | OldVaria newQuery.queryType = VariableQueryType.ResourceArns; newQuery.region = resourceARNsQuery[1]; newQuery.resourceType = resourceARNsQuery[2]; - if (resourceARNsQuery[3]) { + if (resourceARNsQuery[3] && resourceARNsQuery[3] !== '[]') { try { newQuery.tags = JSON.parse(resourceARNsQuery[3]); } catch {