diff --git a/pkg/tsdb/cloudwatch/response_parser.go b/pkg/tsdb/cloudwatch/response_parser.go index bb3310db73e..0dd89476300 100644 --- a/pkg/tsdb/cloudwatch/response_parser.go +++ b/pkg/tsdb/cloudwatch/response_parser.go @@ -110,6 +110,12 @@ func parseLabels(cloudwatchLabel string, query *models.CloudWatchQuery) (string, // set Series to the name of the time series as a fallback labels := data.Labels{"Series": name} + + // do not parse labels for raw queries + if query.MetricEditorMode == models.MetricEditorModeRaw { + return name, labels + } + for _, dim := range dims { values := query.Dimensions[dim] if isSingleValue(values) { diff --git a/pkg/tsdb/cloudwatch/response_parser_test.go b/pkg/tsdb/cloudwatch/response_parser_test.go index b9ee587ef48..39e09c8d724 100644 --- a/pkg/tsdb/cloudwatch/response_parser_test.go +++ b/pkg/tsdb/cloudwatch/response_parser_test.go @@ -405,7 +405,7 @@ func Test_buildDataFrames_parse_label_to_name_and_labels(t *testing.T) { Statistic: "Average", Period: 60, MetricQueryType: models.MetricQueryTypeSearch, - MetricEditorMode: models.MetricEditorModeRaw, + MetricEditorMode: models.MetricEditorModeBuilder, } frames, err := buildDataFrames(contextWithFeaturesEnabled(features.FlagCloudWatchNewLabelParsing), startTime, endTime, *response, query) require.NoError(t, err) @@ -612,6 +612,44 @@ func Test_buildDataFrames_parse_label_to_name_and_labels(t *testing.T) { assert.Equal(t, "cloudwatch-default-label", frames[0].Fields[1].Labels["Series"]) }) + t.Run("ignore dimensions for raw mode query", func(t *testing.T) { + timestamp := time.Unix(0, 0) + response := &models.QueryRowResponse{ + Metrics: []*cloudwatch.MetricDataResult{ + { + Id: aws.String("lb3"), + Label: aws.String("some label"), + Timestamps: []*time.Time{ + aws.Time(timestamp), + }, + Values: []*float64{aws.Float64(23)}, + StatusCode: aws.String("Complete"), + }, + }, + } + + query := &models.CloudWatchQuery{ + RefId: "refId1", + Region: "us-east-1", + Namespace: "AWS/ApplicationELB", + MetricName: "TargetResponseTime", + Dimensions: map[string][]string{ + "LoadBalancer": {"*"}, + }, + Expression: "SEARCH('MetricName=\"ResourceCount\" AND (\"AWS/Usage\") AND Resource=TargetsPer NOT QueueName=TargetsPerNetworkLoadBalancer', 'Average')", + Statistic: "Average", + Period: 60, + MetricQueryType: models.MetricQueryTypeSearch, + MetricEditorMode: models.MetricEditorModeRaw, + } + frames, err := buildDataFrames(contextWithFeaturesEnabled(features.FlagCloudWatchNewLabelParsing), startTime, endTime, *response, query) + require.NoError(t, err) + + assert.Equal(t, "some label", frames[0].Name) + assert.Len(t, frames[0].Fields[1].Labels, 1) + assert.Equal(t, "some label", frames[0].Fields[1].Labels["Series"]) + }) + t.Run("Parse cloudwatch response", func(t *testing.T) { timestamp := time.Unix(0, 0) response := &models.QueryRowResponse{