From 725e23ef7dc2f738eeffe5afde17341f85c41ef6 Mon Sep 17 00:00:00 2001 From: "Willy Hu (IS-TW)" Date: Mon, 12 Feb 2018 10:13:55 +0000 Subject: [PATCH] Cloudwatch dimension_values add dimension filter. issue #10029 e.g. - dimension_values($region, $namespace, cpu_usage_system, cpu) - dimension_values($region, $namespace, disk_used_percent, device, {"InstanceId": "$instance_id"}) - dimension_values($region, $namespace, disk_used_percent, path, {"InstanceId": "$instance_id", "device": "$device"}) --- .../app/plugins/datasource/cloudwatch/datasource.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/public/app/plugins/datasource/cloudwatch/datasource.ts b/public/app/plugins/datasource/cloudwatch/datasource.ts index facddd2e18e..9103cfe17f5 100644 --- a/public/app/plugins/datasource/cloudwatch/datasource.ts +++ b/public/app/plugins/datasource/cloudwatch/datasource.ts @@ -212,6 +212,7 @@ export default class CloudWatchDatasource { var region; var namespace; var metricName; + var filterJson; var regionQuery = query.match(/^regions\(\)/); if (regionQuery) { @@ -237,14 +238,20 @@ export default class CloudWatchDatasource { return this.getDimensionKeys(namespace, region); } - var dimensionValuesQuery = query.match(/^dimension_values\(([^,]+?),\s?([^,]+?),\s?([^,]+?),\s?([^,]+?)\)/); + var dimensionValuesQuery = query.match( + /^dimension_values\(([^,]+?),\s?([^,]+?),\s?([^,]+?),\s?([^,]+?)(,\s?(.+))?\)/ + ); if (dimensionValuesQuery) { region = dimensionValuesQuery[1]; namespace = dimensionValuesQuery[2]; metricName = dimensionValuesQuery[3]; var dimensionKey = dimensionValuesQuery[4]; + filterJson = {}; + if (dimensionValuesQuery[6]) { + filterJson = JSON.parse(this.templateSrv.replace(dimensionValuesQuery[6])); + } - return this.getDimensionValues(region, namespace, metricName, dimensionKey, {}); + return this.getDimensionValues(region, namespace, metricName, dimensionKey, filterJson); } var ebsVolumeIdsQuery = query.match(/^ebs_volume_ids\(([^,]+?),\s?([^,]+?)\)/); @@ -258,7 +265,7 @@ export default class CloudWatchDatasource { if (ec2InstanceAttributeQuery) { region = ec2InstanceAttributeQuery[1]; var targetAttributeName = ec2InstanceAttributeQuery[2]; - var filterJson = JSON.parse(this.templateSrv.replace(ec2InstanceAttributeQuery[3])); + filterJson = JSON.parse(this.templateSrv.replace(ec2InstanceAttributeQuery[3])); return this.getEc2InstanceAttribute(region, targetAttributeName, filterJson); }