From a1733bb412cdd86a3796e29adce5093b6a06b73e Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Mon, 20 Jan 2020 18:51:32 +0100 Subject: [PATCH] CloudWatch: Expand dimension value in alias correctly (#21626) * Make sure dimension value is being returned, and not just label * Fix typo --- pkg/tsdb/cloudwatch/query_transformer.go | 2 +- pkg/tsdb/cloudwatch/response_parser.go | 4 +++- pkg/tsdb/cloudwatch/response_parser_test.go | 17 ++++++++++++----- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/pkg/tsdb/cloudwatch/query_transformer.go b/pkg/tsdb/cloudwatch/query_transformer.go index f38371bd0e2..49b88603305 100644 --- a/pkg/tsdb/cloudwatch/query_transformer.go +++ b/pkg/tsdb/cloudwatch/query_transformer.go @@ -100,7 +100,7 @@ func (e *CloudWatchExecutor) transformQueryResponseToQueryResult(cloudwatchRespo } if partialData { - queryResult.ErrorString = "Cloudwatch GetMetricData error: Too many datapoints requested - your search have been limited. Please try to reduce the time range" + queryResult.ErrorString = "Cloudwatch GetMetricData error: Too many datapoints requested - your search has been limited. Please try to reduce the time range" } queryResult.Series = append(queryResult.Series, timeSeries...) diff --git a/pkg/tsdb/cloudwatch/response_parser.go b/pkg/tsdb/cloudwatch/response_parser.go index 2730de5e8f0..7d99f45d4d0 100644 --- a/pkg/tsdb/cloudwatch/response_parser.go +++ b/pkg/tsdb/cloudwatch/response_parser.go @@ -100,8 +100,10 @@ func parseGetMetricDataTimeSeries(metricDataResults map[string]*cloudwatch.Metri series.Tags[key] = values[0] } else { for _, value := range values { - if value == label || value == "*" || strings.Contains(label, value) { + if value == label || value == "*" { series.Tags[key] = label + } else if strings.Contains(label, value) { + series.Tags[key] = value } } } diff --git a/pkg/tsdb/cloudwatch/response_parser_test.go b/pkg/tsdb/cloudwatch/response_parser_test.go index 35a9a3608a7..045ac8508f4 100644 --- a/pkg/tsdb/cloudwatch/response_parser_test.go +++ b/pkg/tsdb/cloudwatch/response_parser_test.go @@ -53,7 +53,7 @@ func TestCloudWatchResponseParser(t *testing.T) { Namespace: "AWS/ApplicationELB", MetricName: "TargetResponseTime", Dimensions: map[string][]string{ - "LoadBalancer": {"lb2"}, + "LoadBalancer": {"lb1", "lb2"}, "TargetGroup": {"tg"}, }, Stats: "Average", @@ -65,8 +65,12 @@ func TestCloudWatchResponseParser(t *testing.T) { So(err, ShouldBeNil) So(partialData, ShouldBeFalse) - So(timeSeries.Name, ShouldEqual, "lb2 Expanded") - So(timeSeries.Tags["LoadBalancer"], ShouldEqual, "lb2") + So(timeSeries.Name, ShouldEqual, "lb1 Expanded") + So(timeSeries.Tags["LoadBalancer"], ShouldEqual, "lb1") + + timeSeries2 := (*series)[1] + So(timeSeries2.Name, ShouldEqual, "lb2 Expanded") + So(timeSeries2.Tags["LoadBalancer"], ShouldEqual, "lb2") }) Convey("can expand dimension value using substring", func() { @@ -110,7 +114,7 @@ func TestCloudWatchResponseParser(t *testing.T) { Namespace: "AWS/ApplicationELB", MetricName: "TargetResponseTime", Dimensions: map[string][]string{ - "LoadBalancer": {"lb1"}, + "LoadBalancer": {"lb1", "lb2"}, "TargetGroup": {"tg"}, }, Stats: "Average", @@ -119,11 +123,14 @@ func TestCloudWatchResponseParser(t *testing.T) { } series, partialData, err := parseGetMetricDataTimeSeries(resp, query) timeSeries := (*series)[0] - So(err, ShouldBeNil) So(partialData, ShouldBeFalse) So(timeSeries.Name, ShouldEqual, "lb1 Expanded") So(timeSeries.Tags["LoadBalancer"], ShouldEqual, "lb1") + + timeSeries2 := (*series)[1] + So(timeSeries2.Name, ShouldEqual, "lb2 Expanded") + So(timeSeries2.Tags["LoadBalancer"], ShouldEqual, "lb2") }) Convey("can expand dimension value using wildcard", func() {