diff --git a/docs/sources/datasources/aws-cloudwatch/_index.md b/docs/sources/datasources/aws-cloudwatch/_index.md index 635bc61cb2e..9a2226da954 100644 --- a/docs/sources/datasources/aws-cloudwatch/_index.md +++ b/docs/sources/datasources/aws-cloudwatch/_index.md @@ -55,6 +55,7 @@ Here is a minimal policy example: "cloudwatch:ListMetrics", "cloudwatch:GetMetricStatistics", "cloudwatch:GetMetricData" + "cloudwatch:GetInsightRuleReport" ], "Resource": "*" }, diff --git a/pkg/tsdb/cloudwatch/metric_data_query_builder.go b/pkg/tsdb/cloudwatch/metric_data_query_builder.go index ab5cbed0505..34c6a8b246f 100644 --- a/pkg/tsdb/cloudwatch/metric_data_query_builder.go +++ b/pkg/tsdb/cloudwatch/metric_data_query_builder.go @@ -18,6 +18,7 @@ func (e *cloudWatchExecutor) buildMetricDataQuery(query *cloudWatchQuery) (*clou if query.Expression != "" { mdq.Expression = aws.String(query.Expression) + mdq.Period = aws.Int64(int64(query.Period)) } else { if query.isSearchExpression() { mdq.Expression = aws.String(buildSearchExpression(query, query.Statistic)) diff --git a/pkg/tsdb/cloudwatch/metric_data_query_builder_test.go b/pkg/tsdb/cloudwatch/metric_data_query_builder_test.go index 407dc917307..80ffb3ec54b 100644 --- a/pkg/tsdb/cloudwatch/metric_data_query_builder_test.go +++ b/pkg/tsdb/cloudwatch/metric_data_query_builder_test.go @@ -4,9 +4,32 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestMetricDataQueryBuilder_buildSearchExpression(t *testing.T) { + t.Run("buildMetricDataQuery", func(t *testing.T) { + t.Run("should set period in user defined expression", func(t *testing.T) { + executor := newExecutor(nil, nil, newTestConfig(), fakeSessionCache{}) + query := &cloudWatchQuery{ + Namespace: "AWS/EC2", + MetricName: "CPUUtilization", + Dimensions: map[string][]string{ + "LoadBalancer": {"lb1"}, + }, + Period: 300, + Expression: "SUM([a,b])", + MatchExact: true, + } + query.MatchExact = false + mdq, err := executor.buildMetricDataQuery(query) + require.NoError(t, err) + require.Nil(t, mdq.MetricStat) + assert.Equal(t, int64(300), *mdq.Period) + assert.Equal(t, `SUM([a,b])`, *mdq.Expression) + }) + }) + t.Run("Query should be matched exact", func(t *testing.T) { const matchExact = true