From 9f4a5c925b5d8d22de3bfce70ab11176f4e57dc9 Mon Sep 17 00:00:00 2001 From: modesvops <87967053+modesvops@users.noreply.github.com> Date: Fri, 4 Aug 2023 15:50:30 +0300 Subject: [PATCH] fix: cloudwatch metrics provider multiple dimensions (#2932) update cloudwatch metrics provider Signed-off-by: Modestas Kulpinskas Co-authored-by: Modestas Kulpinskas --- metricproviders/cloudwatch/cloudwatch.go | 6 +- metricproviders/cloudwatch/cloudwatch_test.go | 86 +++++++++++++++++++ 2 files changed, 90 insertions(+), 2 deletions(-) diff --git a/metricproviders/cloudwatch/cloudwatch.go b/metricproviders/cloudwatch/cloudwatch.go index 2bb6c2aaad..05d65704df 100644 --- a/metricproviders/cloudwatch/cloudwatch.go +++ b/metricproviders/cloudwatch/cloudwatch.go @@ -154,9 +154,11 @@ func convertType(data []v1alpha1.CloudWatchMetricDataQuery) []types.MetricDataQu if v.MetricStat.Metric.Dimensions != nil { metricStat.Metric.Dimensions = make([]types.Dimension, len(v.MetricStat.Metric.Dimensions)) for j, d := range v.MetricStat.Metric.Dimensions { + name := d.Name + value := d.Value metricStat.Metric.Dimensions[j] = types.Dimension{ - Name: &d.Name, - Value: &d.Value, + Name: &name, + Value: &value, } } } diff --git a/metricproviders/cloudwatch/cloudwatch_test.go b/metricproviders/cloudwatch/cloudwatch_test.go index cd55dcc41c..de91aae755 100644 --- a/metricproviders/cloudwatch/cloudwatch_test.go +++ b/metricproviders/cloudwatch/cloudwatch_test.go @@ -382,6 +382,92 @@ func TestConvertType(t *testing.T) { }, }, }, + { + query: []v1alpha1.CloudWatchMetricDataQuery{ + { + Id: "rate", + Expression: pointer.StringPtr("errors / requests"), + }, + { + Id: "errors", + MetricStat: &v1alpha1.CloudWatchMetricStat{ + Metric: v1alpha1.CloudWatchMetricStatMetric{ + Dimensions: []v1alpha1.CloudWatchMetricStatMetricDimension{ + { + Name: "hoge", + Value: "fuga", + }, + { + Name: "poge", + Value: "doge", + }, + }, + Namespace: pointer.StringPtr("app1"), + MetricName: "errors", + }, + Period: period, + Stat: "Max", + Unit: "Count", + }, + ReturnData: pointer.BoolPtr(false), + }, + { + Id: "requests", + MetricStat: &v1alpha1.CloudWatchMetricStat{ + Metric: v1alpha1.CloudWatchMetricStatMetric{ + Namespace: pointer.StringPtr("app2"), + MetricName: "requests", + }, + Period: period, + Stat: "Sum", + Unit: "Bytes/Second", + }, + ReturnData: pointer.BoolPtr(true), + }, + }, + expected: []types.MetricDataQuery{ + { + Id: pointer.StringPtr("rate"), + Expression: pointer.StringPtr("errors / requests"), + }, + { + Id: pointer.StringPtr("errors"), + MetricStat: &types.MetricStat{ + Metric: &types.Metric{ + Namespace: pointer.StringPtr("app1"), + MetricName: pointer.StringPtr("errors"), + Dimensions: []types.Dimension{ + { + Name: pointer.StringPtr("hoge"), + Value: pointer.StringPtr("fuga"), + }, + { + Name: pointer.StringPtr("poge"), + Value: pointer.StringPtr("doge"), + }, + }, + }, + Period: pointer.Int32Ptr(300), + Stat: pointer.StringPtr("Max"), + Unit: types.StandardUnitCount, + }, + ReturnData: pointer.BoolPtr(false), + }, + { + Id: pointer.StringPtr("requests"), + MetricStat: &types.MetricStat{ + Metric: &types.Metric{ + Namespace: pointer.StringPtr("app2"), + MetricName: pointer.StringPtr("requests"), + }, + Period: pointer.Int32Ptr(300), + Stat: pointer.StringPtr("Sum"), + Unit: types.StandardUnitBytesSecond, + }, + ReturnData: pointer.BoolPtr(true), + }, + }, + }, } for _, tt := range tests {