From fb5f635f1ccba18bbf7b34f875d79bbe9c383f97 Mon Sep 17 00:00:00 2001 From: girodav <1390902+girodav@users.noreply.github.com> Date: Thu, 15 Dec 2022 09:15:16 +0100 Subject: [PATCH 01/14] [AWS Cloudwatch] Changed cloudwatch module to call ListMetrics API only once per region, instead of per AWS namespace --- CHANGELOG.next.asciidoc | 1 + .../module/aws/cloudwatch/cloudwatch.go | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index acf0ba2bc21..fe25d5b1b3e 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -203,6 +203,7 @@ https://github.com/elastic/beats/compare/v8.2.0\...main[Check the HEAD diff] - Add support for multiple regions in GCP {pull}32964[32964] - Add GCP Redis regions support {pull}33728[33728] - Add namespace metadata to all namespaced kubernetes resources. {pull}33763[33763] +- Changed cloudwatch module to call ListMetrics API only once per region, instead of per AWS namespace {pull}34052[34052] *Packetbeat* diff --git a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go index 80894a4b5d1..ff8c08f9e72 100644 --- a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go +++ b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go @@ -180,10 +180,22 @@ func (m *MetricSet) Fetch(report mb.ReporterV2) error { if err != nil { m.Logger().Warn("skipping metrics list from region '%s'", regionName) } + + // retrieve all the details for all the metrics available in the current region + regionListMetricsOutput, err := aws.GetListMetricsOutput("*", regionName, m.Period, svcCloudwatch) + + // filter out metrics details for namespaces that are not included in the configuration + listMetricsOutput := make([]types.Metric, 0) + for _, listMetricDetail := range regionListMetricsOutput { + namespace := *listMetricDetail.Namespace + if _, ok := namespaceDetailTotal[namespace]; ok { + listMetricsOutput = append(listMetricsOutput, listMetricDetail) + } + } + for namespace, namespaceDetails := range namespaceDetailTotal { m.logger.Debugf("Collected metrics from namespace %s", namespace) - listMetricsOutput, err := aws.GetListMetricsOutput(namespace, regionName, m.Period, svcCloudwatch) if err != nil { m.logger.Info(err.Error()) continue @@ -195,6 +207,9 @@ func (m *MetricSet) Fetch(report mb.ReporterV2) error { // filter listMetricsOutput by detailed configuration per each namespace filteredMetricWithStatsTotal := filterListMetricsOutput(listMetricsOutput, namespaceDetails) + for _, filteredMetricDetail := range filteredMetricWithStatsTotal { + m.logger.Infof("Filtered namespace for namespace %s: %s", namespace, *filteredMetricDetail.cloudwatchMetric.Namespace) + } // get resource type filters and tags filters for each namespace resourceTypeTagFilters := constructTagsFilters(namespaceDetails) From 4aa00dfbdee6c52fd2a7065cc8a3ca7af17f0856 Mon Sep 17 00:00:00 2001 From: girodav <1390902+girodav@users.noreply.github.com> Date: Thu, 15 Dec 2022 09:18:44 +0100 Subject: [PATCH 02/14] Removed unnecessary logger call --- x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go index ff8c08f9e72..0073f23a1d4 100644 --- a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go +++ b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go @@ -207,9 +207,6 @@ func (m *MetricSet) Fetch(report mb.ReporterV2) error { // filter listMetricsOutput by detailed configuration per each namespace filteredMetricWithStatsTotal := filterListMetricsOutput(listMetricsOutput, namespaceDetails) - for _, filteredMetricDetail := range filteredMetricWithStatsTotal { - m.logger.Infof("Filtered namespace for namespace %s: %s", namespace, *filteredMetricDetail.cloudwatchMetric.Namespace) - } // get resource type filters and tags filters for each namespace resourceTypeTagFilters := constructTagsFilters(namespaceDetails) From 7cc6bf5f8bbaef561276b6632e7d757dad0157bc Mon Sep 17 00:00:00 2001 From: girodav <1390902+girodav@users.noreply.github.com> Date: Thu, 15 Dec 2022 09:27:41 +0100 Subject: [PATCH 03/14] Fixed PR id --- CHANGELOG.next.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index fe25d5b1b3e..a84788b01fa 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -203,7 +203,7 @@ https://github.com/elastic/beats/compare/v8.2.0\...main[Check the HEAD diff] - Add support for multiple regions in GCP {pull}32964[32964] - Add GCP Redis regions support {pull}33728[33728] - Add namespace metadata to all namespaced kubernetes resources. {pull}33763[33763] -- Changed cloudwatch module to call ListMetrics API only once per region, instead of per AWS namespace {pull}34052[34052] +- Changed cloudwatch module to call ListMetrics API only once per region, instead of per AWS namespace {pull}34055[34055] *Packetbeat* From 57b4df6f1c96f9f51cbf779aae44198546f67bdd Mon Sep 17 00:00:00 2001 From: girodav <1390902+girodav@users.noreply.github.com> Date: Thu, 15 Dec 2022 09:30:29 +0100 Subject: [PATCH 04/14] Updated AWS doc --- x-pack/metricbeat/module/aws/_meta/docs.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/metricbeat/module/aws/_meta/docs.asciidoc b/x-pack/metricbeat/module/aws/_meta/docs.asciidoc index c7db5622953..775ec303ff9 100644 --- a/x-pack/metricbeat/module/aws/_meta/docs.asciidoc +++ b/x-pack/metricbeat/module/aws/_meta/docs.asciidoc @@ -285,7 +285,7 @@ GetMetricData max page size: 100, based on https://docs.aws.amazon.com/AmazonClo | IAM ListAccountAliases | 1 | Once on startup | STS GetCallerIdentity | 1 | Once on startup | EC2 DescribeRegions| 1 | Once on startup -| CloudWatch ListMetrics | Total number of results / ListMetrics max page size | Per region per namespace per collection period +| CloudWatch ListMetrics | Total number of results / ListMetrics max page size | Per region per collection period | CloudWatch GetMetricData | Total number of results / GetMetricData max page size | Per region per namespace per collection period |=== `billing`, `ebs`, `elb`, `sns`, `usage` and `lambda` are the same as `cloudwatch` metricset. From a6d22862c3d44f88713126471a41c657af0dc7fc Mon Sep 17 00:00:00 2001 From: girodav <1390902+girodav@users.noreply.github.com> Date: Thu, 15 Dec 2022 09:43:15 +0100 Subject: [PATCH 05/14] AWS doc update after mage update --- metricbeat/docs/modules/aws.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metricbeat/docs/modules/aws.asciidoc b/metricbeat/docs/modules/aws.asciidoc index 0dd31bf2543..194d39a4cd0 100644 --- a/metricbeat/docs/modules/aws.asciidoc +++ b/metricbeat/docs/modules/aws.asciidoc @@ -297,7 +297,7 @@ GetMetricData max page size: 100, based on https://docs.aws.amazon.com/AmazonClo | IAM ListAccountAliases | 1 | Once on startup | STS GetCallerIdentity | 1 | Once on startup | EC2 DescribeRegions| 1 | Once on startup -| CloudWatch ListMetrics | Total number of results / ListMetrics max page size | Per region per namespace per collection period +| CloudWatch ListMetrics | Total number of results / ListMetrics max page size | Per region per collection period | CloudWatch GetMetricData | Total number of results / GetMetricData max page size | Per region per namespace per collection period |=== `billing`, `ebs`, `elb`, `sns`, `usage` and `lambda` are the same as `cloudwatch` metricset. From c58d9d267167a7f8758ac03a63e8b3b6dcb7e8e7 Mon Sep 17 00:00:00 2001 From: girodav <1390902+girodav@users.noreply.github.com> Date: Thu, 15 Dec 2022 12:05:44 +0100 Subject: [PATCH 06/14] Fix filterListMetricsOutput to look only at the namespace we are iterating --- .../module/aws/cloudwatch/cloudwatch.go | 94 ++++++++++--------- .../module/aws/cloudwatch/cloudwatch_test.go | 5 +- 2 files changed, 53 insertions(+), 46 deletions(-) diff --git a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go index 0073f23a1d4..180457dcf9b 100644 --- a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go +++ b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go @@ -204,9 +204,11 @@ func (m *MetricSet) Fetch(report mb.ReporterV2) error { if len(listMetricsOutput) == 0 { continue } - // filter listMetricsOutput by detailed configuration per each namespace - filteredMetricWithStatsTotal := filterListMetricsOutput(listMetricsOutput, namespaceDetails) + filteredMetricWithStatsTotal := filterListMetricsOutput(listMetricsOutput, namespace, namespaceDetails) + for _, filteredMetricDetail := range filteredMetricWithStatsTotal { + m.logger.Infof("Filtered namespace for namespace %s: %s", namespace, *filteredMetricDetail.cloudwatchMetric.Namespace) + } // get resource type filters and tags filters for each namespace resourceTypeTagFilters := constructTagsFilters(namespaceDetails) @@ -252,52 +254,54 @@ func (m *MetricSet) createAwsRequiredClients(beatsConfig awssdk.Config, regionNa } // filterListMetricsOutput compares config details with listMetricsOutput and filter out the ones don't match -func filterListMetricsOutput(listMetricsOutput []types.Metric, namespaceDetails []namespaceDetail) []metricsWithStatistics { +func filterListMetricsOutput(listMetricsOutput []types.Metric, namespace string, namespaceDetails []namespaceDetail) []metricsWithStatistics { var filteredMetricWithStatsTotal []metricsWithStatistics for _, listMetric := range listMetricsOutput { - for _, configPerNamespace := range namespaceDetails { - if configPerNamespace.names != nil && configPerNamespace.dimensions == nil { - // if metric names are given in config but no dimensions, filter - // out the metrics with other names - if exists, _ := aws.StringInSlice(*listMetric.MetricName, configPerNamespace.names); !exists { - continue - } - filteredMetricWithStatsTotal = append(filteredMetricWithStatsTotal, - metricsWithStatistics{ - cloudwatchMetric: listMetric, - statistic: configPerNamespace.statistics, - }) - - } else if configPerNamespace.names == nil && configPerNamespace.dimensions != nil { - // if metric names are not given in config but dimensions are - // given, only keep the metrics with matching dimensions - if !compareAWSDimensions(listMetric.Dimensions, configPerNamespace.dimensions) { - continue - } - filteredMetricWithStatsTotal = append(filteredMetricWithStatsTotal, - metricsWithStatistics{ - cloudwatchMetric: listMetric, - statistic: configPerNamespace.statistics, - }) - } else if configPerNamespace.names != nil && configPerNamespace.dimensions != nil { - if exists, _ := aws.StringInSlice(*listMetric.MetricName, configPerNamespace.names); !exists { - continue - } - if !compareAWSDimensions(listMetric.Dimensions, configPerNamespace.dimensions) { - continue + if *listMetric.Namespace == namespace { + for _, configPerNamespace := range namespaceDetails { + if configPerNamespace.names != nil && configPerNamespace.dimensions == nil { + // if metric names are given in config but no dimensions, filter + // out the metrics with other names + if exists, _ := aws.StringInSlice(*listMetric.MetricName, configPerNamespace.names); !exists { + continue + } + filteredMetricWithStatsTotal = append(filteredMetricWithStatsTotal, + metricsWithStatistics{ + cloudwatchMetric: listMetric, + statistic: configPerNamespace.statistics, + }) + + } else if configPerNamespace.names == nil && configPerNamespace.dimensions != nil { + // if metric names are not given in config but dimensions are + // given, only keep the metrics with matching dimensions + if !compareAWSDimensions(listMetric.Dimensions, configPerNamespace.dimensions) { + continue + } + filteredMetricWithStatsTotal = append(filteredMetricWithStatsTotal, + metricsWithStatistics{ + cloudwatchMetric: listMetric, + statistic: configPerNamespace.statistics, + }) + } else if configPerNamespace.names != nil && configPerNamespace.dimensions != nil { + if exists, _ := aws.StringInSlice(*listMetric.MetricName, configPerNamespace.names); !exists { + continue + } + if !compareAWSDimensions(listMetric.Dimensions, configPerNamespace.dimensions) { + continue + } + filteredMetricWithStatsTotal = append(filteredMetricWithStatsTotal, + metricsWithStatistics{ + cloudwatchMetric: listMetric, + statistic: configPerNamespace.statistics, + }) + } else { + // if no metric name and no dimensions given, then keep all listMetricsOutput + filteredMetricWithStatsTotal = append(filteredMetricWithStatsTotal, + metricsWithStatistics{ + cloudwatchMetric: listMetric, + statistic: configPerNamespace.statistics, + }) } - filteredMetricWithStatsTotal = append(filteredMetricWithStatsTotal, - metricsWithStatistics{ - cloudwatchMetric: listMetric, - statistic: configPerNamespace.statistics, - }) - } else { - // if no metric name and no dimensions given, then keep all listMetricsOutput - filteredMetricWithStatsTotal = append(filteredMetricWithStatsTotal, - metricsWithStatistics{ - cloudwatchMetric: listMetric, - statistic: configPerNamespace.statistics, - }) } } } diff --git a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go index 2d3cb912775..c70dd272e40 100644 --- a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go +++ b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go @@ -1111,6 +1111,7 @@ func TestFilterListMetricsOutput(t *testing.T) { cases := []struct { title string listMetricsOutput []cloudwatchtypes.Metric + namespace string namespaceDetails []namespaceDetail filteredMetricWithStatsTotal []metricsWithStatistics }{ @@ -1139,6 +1140,7 @@ func TestFilterListMetricsOutput(t *testing.T) { Namespace: awssdk.String("AWS/EC2"), }, }, + "AWS/EC2", []namespaceDetail{ { resourceTypeFilter: "ec2:instance", @@ -1190,6 +1192,7 @@ func TestFilterListMetricsOutput(t *testing.T) { Namespace: awssdk.String("AWS/EC2"), }, }, + "AWS/EC2", []namespaceDetail{ { names: []string{"CPUUtilization"}, @@ -1214,7 +1217,7 @@ func TestFilterListMetricsOutput(t *testing.T) { } for _, c := range cases { t.Run(c.title, func(t *testing.T) { - output := filterListMetricsOutput(c.listMetricsOutput, c.namespaceDetails) + output := filterListMetricsOutput(c.listMetricsOutput, c.namespace, c.namespaceDetails) assert.Equal(t, c.filteredMetricWithStatsTotal, output) }) } From 6a2778e511589e4c117bcfe793c9d9a678b8475c Mon Sep 17 00:00:00 2001 From: girodav <1390902+girodav@users.noreply.github.com> Date: Thu, 15 Dec 2022 13:48:19 +0100 Subject: [PATCH 07/14] Refactored filterListMetricsOutput --- .../module/aws/cloudwatch/cloudwatch.go | 59 ++++--------------- 1 file changed, 12 insertions(+), 47 deletions(-) diff --git a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go index 180457dcf9b..e336feeed02 100644 --- a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go +++ b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go @@ -182,16 +182,7 @@ func (m *MetricSet) Fetch(report mb.ReporterV2) error { } // retrieve all the details for all the metrics available in the current region - regionListMetricsOutput, err := aws.GetListMetricsOutput("*", regionName, m.Period, svcCloudwatch) - - // filter out metrics details for namespaces that are not included in the configuration - listMetricsOutput := make([]types.Metric, 0) - for _, listMetricDetail := range regionListMetricsOutput { - namespace := *listMetricDetail.Namespace - if _, ok := namespaceDetailTotal[namespace]; ok { - listMetricsOutput = append(listMetricsOutput, listMetricDetail) - } - } + listMetricsOutput, _ := aws.GetListMetricsOutput("*", regionName, m.Period, svcCloudwatch) for namespace, namespaceDetails := range namespaceDetailTotal { m.logger.Debugf("Collected metrics from namespace %s", namespace) @@ -259,49 +250,23 @@ func filterListMetricsOutput(listMetricsOutput []types.Metric, namespace string, for _, listMetric := range listMetricsOutput { if *listMetric.Namespace == namespace { for _, configPerNamespace := range namespaceDetails { - if configPerNamespace.names != nil && configPerNamespace.dimensions == nil { - // if metric names are given in config but no dimensions, filter - // out the metrics with other names - if exists, _ := aws.StringInSlice(*listMetric.MetricName, configPerNamespace.names); !exists { - continue - } - filteredMetricWithStatsTotal = append(filteredMetricWithStatsTotal, - metricsWithStatistics{ - cloudwatchMetric: listMetric, - statistic: configPerNamespace.statistics, - }) - - } else if configPerNamespace.names == nil && configPerNamespace.dimensions != nil { - // if metric names are not given in config but dimensions are - // given, only keep the metrics with matching dimensions - if !compareAWSDimensions(listMetric.Dimensions, configPerNamespace.dimensions) { - continue - } - filteredMetricWithStatsTotal = append(filteredMetricWithStatsTotal, - metricsWithStatistics{ - cloudwatchMetric: listMetric, - statistic: configPerNamespace.statistics, - }) - } else if configPerNamespace.names != nil && configPerNamespace.dimensions != nil { - if exists, _ := aws.StringInSlice(*listMetric.MetricName, configPerNamespace.names); !exists { + if configPerNamespace.names != nil { + // Consider only the metrics that exist in the configuration + exists, _ := aws.StringInSlice(*listMetric.MetricName, configPerNamespace.names) + if !exists { continue } + } + if configPerNamespace.dimensions != nil { if !compareAWSDimensions(listMetric.Dimensions, configPerNamespace.dimensions) { continue } - filteredMetricWithStatsTotal = append(filteredMetricWithStatsTotal, - metricsWithStatistics{ - cloudwatchMetric: listMetric, - statistic: configPerNamespace.statistics, - }) - } else { - // if no metric name and no dimensions given, then keep all listMetricsOutput - filteredMetricWithStatsTotal = append(filteredMetricWithStatsTotal, - metricsWithStatistics{ - cloudwatchMetric: listMetric, - statistic: configPerNamespace.statistics, - }) } + filteredMetricWithStatsTotal = append(filteredMetricWithStatsTotal, + metricsWithStatistics{ + cloudwatchMetric: listMetric, + statistic: configPerNamespace.statistics, + }) } } } From 04dc9d449a4a032d89a0e136ba613ff013293253 Mon Sep 17 00:00:00 2001 From: girodav <1390902+girodav@users.noreply.github.com> Date: Thu, 15 Dec 2022 13:54:41 +0100 Subject: [PATCH 08/14] Fixed unnecessary logger call --- x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go index e336feeed02..308ac72d7d5 100644 --- a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go +++ b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go @@ -197,9 +197,7 @@ func (m *MetricSet) Fetch(report mb.ReporterV2) error { } // filter listMetricsOutput by detailed configuration per each namespace filteredMetricWithStatsTotal := filterListMetricsOutput(listMetricsOutput, namespace, namespaceDetails) - for _, filteredMetricDetail := range filteredMetricWithStatsTotal { - m.logger.Infof("Filtered namespace for namespace %s: %s", namespace, *filteredMetricDetail.cloudwatchMetric.Namespace) - } + // get resource type filters and tags filters for each namespace resourceTypeTagFilters := constructTagsFilters(namespaceDetails) From 87142793edacd5a78cb9f7b3c67ab2c229293b28 Mon Sep 17 00:00:00 2001 From: girodav <1390902+girodav@users.noreply.github.com> Date: Fri, 16 Dec 2022 09:30:35 +0100 Subject: [PATCH 09/14] Minor fixes --- .../module/aws/cloudwatch/cloudwatch.go | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go index 308ac72d7d5..81df8c8019a 100644 --- a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go +++ b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch.go @@ -178,23 +178,23 @@ func (m *MetricSet) Fetch(report mb.ReporterV2) error { svcCloudwatch, svcResourceAPI, err := m.createAwsRequiredClients(beatsConfig, regionName, config) if err != nil { - m.Logger().Warn("skipping metrics list from region '%s'", regionName) + m.Logger().Warn("skipping metrics list from region '%s'", regionName, err) + continue } // retrieve all the details for all the metrics available in the current region - listMetricsOutput, _ := aws.GetListMetricsOutput("*", regionName, m.Period, svcCloudwatch) + listMetricsOutput, err := aws.GetListMetricsOutput("*", regionName, m.Period, svcCloudwatch) + if err != nil { + m.Logger().Errorf("Error while retrieving the list of metrics for region %s: %w", regionName, err) + } + + if len(listMetricsOutput) == 0 { + continue + } for namespace, namespaceDetails := range namespaceDetailTotal { m.logger.Debugf("Collected metrics from namespace %s", namespace) - if err != nil { - m.logger.Info(err.Error()) - continue - } - - if len(listMetricsOutput) == 0 { - continue - } // filter listMetricsOutput by detailed configuration per each namespace filteredMetricWithStatsTotal := filterListMetricsOutput(listMetricsOutput, namespace, namespaceDetails) From 7055a16ac17e43e7eab0f3d68d4d986ea27e192a Mon Sep 17 00:00:00 2001 From: girodav <1390902+girodav@users.noreply.github.com> Date: Fri, 16 Dec 2022 10:31:25 +0100 Subject: [PATCH 10/14] Removed duplicated lines from cloudwatch tests --- .../module/aws/cloudwatch/cloudwatch_test.go | 110 +++++------------- 1 file changed, 31 insertions(+), 79 deletions(-) diff --git a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go index c70dd272e40..de56b56aba8 100644 --- a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go +++ b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go @@ -180,36 +180,37 @@ func TestReadCloudwatchConfig(t *testing.T) { resourceTypeFiltersEC2RDS := map[string][]aws.Tag{} resourceTypeFiltersEC2RDS["ec2:instance"] = nil resourceTypeFiltersEC2RDS["rds"] = nil - - expectedListMetricWithDetailEC2RDS := listMetricWithDetail{ - metricsWithStats: []metricsWithStatistics{ - { - cloudwatchtypes.Metric{ - Dimensions: []cloudwatchtypes.Dimension{{ - Name: awssdk.String("InstanceId"), - Value: awssdk.String("i-1"), - }}, - MetricName: awssdk.String("CPUUtilization"), - Namespace: awssdk.String("AWS/EC2"), - }, - []string{"Average"}, + metricsWithStats := []metricsWithStatistics{ + { + cloudwatchtypes.Metric{ + Dimensions: []cloudwatchtypes.Dimension{{ + Name: awssdk.String("InstanceId"), + Value: awssdk.String("i-1"), + }}, + MetricName: awssdk.String("CPUUtilization"), + Namespace: awssdk.String("AWS/EC2"), }, - { - cloudwatchtypes.Metric{ - Dimensions: []cloudwatchtypes.Dimension{{ - Name: awssdk.String("DBClusterIdentifier"), - Value: awssdk.String("test1-cluster"), - }, - { - Name: awssdk.String("Role"), - Value: awssdk.String("READER"), - }}, - MetricName: awssdk.String("CommitThroughput"), - Namespace: awssdk.String("AWS/RDS"), + []string{"Average"}, + }, + { + cloudwatchtypes.Metric{ + Dimensions: []cloudwatchtypes.Dimension{{ + Name: awssdk.String("DBClusterIdentifier"), + Value: awssdk.String("test1-cluster"), }, - []string{"Average"}, + { + Name: awssdk.String("Role"), + Value: awssdk.String("READER"), + }}, + MetricName: awssdk.String("CommitThroughput"), + Namespace: awssdk.String("AWS/RDS"), }, + []string{"Average"}, }, + } + + expectedListMetricWithDetailEC2RDS := listMetricWithDetail{ + metricsWithStats: metricsWithStats, resourceTypeFilters: resourceTypeFiltersEC2RDS, } @@ -227,34 +228,7 @@ func TestReadCloudwatchConfig(t *testing.T) { }, } expectedListMetricWithDetailEC2RDSWithTag := listMetricWithDetail{ - metricsWithStats: []metricsWithStatistics{ - { - cloudwatchtypes.Metric{ - Dimensions: []cloudwatchtypes.Dimension{{ - Name: awssdk.String("InstanceId"), - Value: awssdk.String("i-1"), - }}, - MetricName: awssdk.String("CPUUtilization"), - Namespace: awssdk.String("AWS/EC2"), - }, - []string{"Average"}, - }, - { - cloudwatchtypes.Metric{ - Dimensions: []cloudwatchtypes.Dimension{{ - Name: awssdk.String("DBClusterIdentifier"), - Value: awssdk.String("test1-cluster"), - }, - { - Name: awssdk.String("Role"), - Value: awssdk.String("READER"), - }}, - MetricName: awssdk.String("CommitThroughput"), - Namespace: awssdk.String("AWS/RDS"), - }, - []string{"Average"}, - }, - }, + metricsWithStats: metricsWithStats, resourceTypeFilters: resourceTypeFiltersEC2RDSWithTag, } @@ -319,7 +293,7 @@ func TestReadCloudwatchConfig(t *testing.T) { }, }, } - expectedNamespaceDetailTotal["AWS/ELB"] = []namespaceDetail{ + elbNamespaceDetail := []namespaceDetail{ { resourceTypeFilter: "elasticloadbalancing", names: []string{"BackendConnectionErrors", "HTTPCode_Backend_2XX", "HTTPCode_Backend_3XX"}, @@ -343,6 +317,7 @@ func TestReadCloudwatchConfig(t *testing.T) { }, }, } + expectedNamespaceDetailTotal["AWS/ELB"] = elbNamespaceDetail expectedNamespaceDetailELBLambda := map[string][]namespaceDetail{} expectedNamespaceDetailELBLambda["AWS/Lambda"] = []namespaceDetail{ @@ -356,30 +331,7 @@ func TestReadCloudwatchConfig(t *testing.T) { }, }, } - expectedNamespaceDetailELBLambda["AWS/ELB"] = []namespaceDetail{ - { - resourceTypeFilter: "elasticloadbalancing", - names: []string{"BackendConnectionErrors", "HTTPCode_Backend_2XX", "HTTPCode_Backend_3XX"}, - statistics: []string{"Sum"}, - tags: []aws.Tag{ - { - Key: "name", - Value: []string{"test"}, - }, - }, - }, - { - resourceTypeFilter: "elasticloadbalancing", - names: []string{"HealthyHostCount", "SurgeQueueLength", "UnHealthyHostCount"}, - statistics: []string{"Maximum"}, - tags: []aws.Tag{ - { - Key: "name", - Value: []string{"test"}, - }, - }, - }, - } + expectedNamespaceDetailELBLambda["AWS/ELB"] = elbNamespaceDetail expectedNamespaceWithDetailEC2WithNoMetricName := map[string][]namespaceDetail{} expectedNamespaceWithDetailEC2WithNoMetricName["AWS/EC2"] = []namespaceDetail{ From 87df37c5a8362de0204b9059f3588930768d9e9c Mon Sep 17 00:00:00 2001 From: girodav <1390902+girodav@users.noreply.github.com> Date: Fri, 16 Dec 2022 15:07:35 +0100 Subject: [PATCH 11/14] Added nameTag variable in tests --- .../module/aws/cloudwatch/cloudwatch_test.go | 208 +++++------------- 1 file changed, 50 insertions(+), 158 deletions(-) diff --git a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go index de56b56aba8..8b689e58876 100644 --- a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go +++ b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go @@ -53,6 +53,7 @@ var ( metricName2 = "StatusCheckFailed" metricName3 = "StatusCheckFailed_System" metricName4 = "StatusCheckFailed_Instance" + metricName5 = "DiskReadOps" resourceTypeEC2 = "ec2:instance" listMetric1 = cloudwatchtypes.Metric{ Dimensions: []cloudwatchtypes.Dimension{{ @@ -95,12 +96,40 @@ var ( Namespace: &namespace, } + listMetric6 = cloudwatchtypes.Metric{ + Dimensions: []cloudwatchtypes.Dimension{{ + Name: &dimName, + Value: &instanceID1, + }}, + MetricName: &metricName5, + Namespace: &namespace, + } + namespaceMSK = "AWS/Kafka" metricName6 = "MemoryUsed" listMetric8 = cloudwatchtypes.Metric{ MetricName: &metricName6, Namespace: &namespaceMSK, } + nameTag = []aws.Tag{ + { + Key: "name", + Value: []string{"test"}, + }} + elbNamespaceDetail = []namespaceDetail{ + { + resourceTypeFilter: "elasticloadbalancing", + names: []string{"BackendConnectionErrors", "HTTPCode_Backend_2XX", "HTTPCode_Backend_3XX"}, + statistics: []string{"Sum"}, + tags: nameTag, + }, + { + resourceTypeFilter: "elasticloadbalancing", + names: []string{"HealthyHostCount", "SurgeQueueLength", "UnHealthyHostCount"}, + statistics: []string{"Maximum"}, + tags: nameTag, + }, + } ) func TestConstructLabel(t *testing.T) { @@ -156,14 +185,7 @@ func TestReadCloudwatchConfig(t *testing.T) { expectedListMetricWithDetailEC2 := listMetricWithDetail{ metricsWithStats: []metricsWithStatistics{ { - cloudwatchtypes.Metric{ - Dimensions: []cloudwatchtypes.Dimension{{ - Name: awssdk.String("InstanceId"), - Value: awssdk.String("i-1"), - }}, - MetricName: awssdk.String("CPUUtilization"), - Namespace: awssdk.String("AWS/EC2"), - }, + listMetric1, []string{"Average"}, }, }, @@ -182,14 +204,7 @@ func TestReadCloudwatchConfig(t *testing.T) { resourceTypeFiltersEC2RDS["rds"] = nil metricsWithStats := []metricsWithStatistics{ { - cloudwatchtypes.Metric{ - Dimensions: []cloudwatchtypes.Dimension{{ - Name: awssdk.String("InstanceId"), - Value: awssdk.String("i-1"), - }}, - MetricName: awssdk.String("CPUUtilization"), - Namespace: awssdk.String("AWS/EC2"), - }, + listMetric1, []string{"Average"}, }, { @@ -215,18 +230,8 @@ func TestReadCloudwatchConfig(t *testing.T) { } resourceTypeFiltersEC2RDSWithTag := map[string][]aws.Tag{} - resourceTypeFiltersEC2RDSWithTag["ec2:instance"] = []aws.Tag{ - { - Key: "name", - Value: []string{"test"}, - }, - } - resourceTypeFiltersEC2RDSWithTag["rds"] = []aws.Tag{ - { - Key: "name", - Value: []string{"test"}, - }, - } + resourceTypeFiltersEC2RDSWithTag["ec2:instance"] = nameTag + resourceTypeFiltersEC2RDSWithTag["rds"] = nameTag expectedListMetricWithDetailEC2RDSWithTag := listMetricWithDetail{ metricsWithStats: metricsWithStats, resourceTypeFilters: resourceTypeFiltersEC2RDSWithTag, @@ -285,50 +290,17 @@ func TestReadCloudwatchConfig(t *testing.T) { resourceTypeFilter: resourceTypeEC2, names: []string{"CPUUtilization"}, statistics: defaultStatistics, - tags: []aws.Tag{ - { - Key: "name", - Value: []string{"test"}, - }, - }, - }, - } - elbNamespaceDetail := []namespaceDetail{ - { - resourceTypeFilter: "elasticloadbalancing", - names: []string{"BackendConnectionErrors", "HTTPCode_Backend_2XX", "HTTPCode_Backend_3XX"}, - statistics: []string{"Sum"}, - tags: []aws.Tag{ - { - Key: "name", - Value: []string{"test"}, - }, - }, - }, - { - resourceTypeFilter: "elasticloadbalancing", - names: []string{"HealthyHostCount", "SurgeQueueLength", "UnHealthyHostCount"}, - statistics: []string{"Maximum"}, - tags: []aws.Tag{ - { - Key: "name", - Value: []string{"test"}, - }, - }, + tags: nameTag, }, } + expectedNamespaceDetailTotal["AWS/ELB"] = elbNamespaceDetail expectedNamespaceDetailELBLambda := map[string][]namespaceDetail{} expectedNamespaceDetailELBLambda["AWS/Lambda"] = []namespaceDetail{ { statistics: defaultStatistics, - tags: []aws.Tag{ - { - Key: "name", - Value: []string{"test"}, - }, - }, + tags: nameTag, }, } expectedNamespaceDetailELBLambda["AWS/ELB"] = elbNamespaceDetail @@ -350,25 +322,11 @@ func TestReadCloudwatchConfig(t *testing.T) { expectedListMetricsEC2WithDim := listMetricWithDetail{ metricsWithStats: []metricsWithStatistics{ { - cloudwatchtypes.Metric{ - Dimensions: []cloudwatchtypes.Dimension{{ - Name: awssdk.String("InstanceId"), - Value: awssdk.String("i-1"), - }}, - MetricName: awssdk.String("CPUUtilization"), - Namespace: awssdk.String("AWS/EC2"), - }, + listMetric1, []string{"Average"}, }, { - cloudwatchtypes.Metric{ - Dimensions: []cloudwatchtypes.Dimension{{ - Name: awssdk.String("InstanceId"), - Value: awssdk.String("i-1"), - }}, - MetricName: awssdk.String("DiskReadOps"), - Namespace: awssdk.String("AWS/EC2"), - }, + listMetric6, []string{"Average"}, }, }, @@ -378,14 +336,7 @@ func TestReadCloudwatchConfig(t *testing.T) { expectedListMetricWithDetailEC2sRDSWithTag := listMetricWithDetail{ metricsWithStats: []metricsWithStatistics{ { - cloudwatchtypes.Metric{ - Dimensions: []cloudwatchtypes.Dimension{{ - Name: awssdk.String("InstanceId"), - Value: awssdk.String("i-1"), - }}, - MetricName: awssdk.String("CPUUtilization"), - Namespace: awssdk.String("AWS/EC2"), - }, + listMetric1, []string{"Average"}, }, { @@ -591,12 +542,7 @@ func TestReadCloudwatchConfig(t *testing.T) { ResourceType: "elasticloadbalancing", }, }, - []aws.Tag{ - { - Key: "name", - Value: []string{"test"}, - }, - }, + nameTag, listMetricWithDetail{ resourceTypeFilters: map[string][]aws.Tag{}, }, @@ -649,12 +595,7 @@ func TestReadCloudwatchConfig(t *testing.T) { ResourceType: "rds", }, }, - []aws.Tag{ - { - Key: "name", - Value: []string{"test"}, - }, - }, + nameTag, expectedListMetricWithDetailEC2RDSWithTag, expectedNamespaceDetailELBLambda, }, @@ -743,12 +684,7 @@ func TestReadCloudwatchConfig(t *testing.T) { ResourceType: "rds", }, }, - []aws.Tag{ - { - Key: "name", - Value: []string{"test"}, - }, - }, + nameTag, expectedListMetricWithDetailEC2sRDSWithTag, map[string][]namespaceDetail{}, }, @@ -1107,14 +1043,7 @@ func TestFilterListMetricsOutput(t *testing.T) { }, []metricsWithStatistics{ { - cloudwatchtypes.Metric{ - Dimensions: []cloudwatchtypes.Dimension{{ - Name: awssdk.String("InstanceId"), - Value: awssdk.String("i-1"), - }}, - MetricName: awssdk.String("CPUUtilization"), - Namespace: awssdk.String("AWS/EC2"), - }, + listMetric1, []string{"Average"}, }, }, @@ -1154,14 +1083,7 @@ func TestFilterListMetricsOutput(t *testing.T) { }, []metricsWithStatistics{ { - cloudwatchtypes.Metric{ - Dimensions: []cloudwatchtypes.Dimension{{ - Name: awssdk.String("InstanceId"), - Value: awssdk.String("i-1"), - }}, - MetricName: awssdk.String("CPUUtilization"), - Namespace: awssdk.String("AWS/EC2"), - }, + listMetric1, []string{"Average"}, }, }, @@ -1358,14 +1280,7 @@ func TestCreateEventsWithIdentifier(t *testing.T) { mockTaggingSvc := &MockResourceGroupsTaggingClient{} mockCloudwatchSvc := &MockCloudWatchClient{} listMetricWithStatsTotal := []metricsWithStatistics{{ - cloudwatchtypes.Metric{ - Dimensions: []cloudwatchtypes.Dimension{{ - Name: awssdk.String("InstanceId"), - Value: awssdk.String("i-1"), - }}, - MetricName: awssdk.String("CPUUtilization"), - Namespace: awssdk.String("AWS/EC2"), - }, + listMetric1, []string{"Average"}, }} resourceTypeTagFilters := map[string][]aws.Tag{} @@ -1441,17 +1356,11 @@ func TestCreateEventsWithDataGranularity(t *testing.T) { mockCloudwatchSvc := &MockCloudWatchClientWithDataGranularity{} listMetricWithStatsTotal := []metricsWithStatistics{ { - cloudwatchtypes.Metric{ - MetricName: awssdk.String("CPUUtilization"), - Namespace: awssdk.String("AWS/EC2"), - }, + listMetric1, []string{"Average"}, }, { - cloudwatchtypes.Metric{ - MetricName: awssdk.String("DiskReadOps"), - Namespace: awssdk.String("AWS/EC2"), - }, + listMetric6, []string{"Average"}, }, } @@ -1488,25 +1397,11 @@ func TestCreateEventsWithTagsFilter(t *testing.T) { mockCloudwatchSvc := &MockCloudWatchClient{} listMetricWithStatsTotal := []metricsWithStatistics{ { - cloudwatchtypes.Metric{ - Dimensions: []cloudwatchtypes.Dimension{{ - Name: awssdk.String("InstanceId"), - Value: awssdk.String("i-1"), - }}, - MetricName: awssdk.String("CPUUtilization"), - Namespace: awssdk.String("AWS/EC2"), - }, + listMetric1, []string{"Average"}, }, { - cloudwatchtypes.Metric{ - Dimensions: []cloudwatchtypes.Dimension{{ - Name: awssdk.String("InstanceId"), - Value: awssdk.String("i-1"), - }}, - MetricName: awssdk.String("DiskReadOps"), - Namespace: awssdk.String("AWS/EC2"), - }, + listMetric6, []string{"Average"}, }, } @@ -1666,10 +1561,7 @@ func TestCreateEventsTimestamp(t *testing.T) { listMetricWithStatsTotal := []metricsWithStatistics{ { - cloudwatchtypes.Metric{ - MetricName: awssdk.String("CPUUtilization"), - Namespace: awssdk.String("AWS/EC2"), - }, + listMetric1, []string{"Average"}, }, { From 4b9385b271ad5e1aa591ed1242de214e8d39ad86 Mon Sep 17 00:00:00 2001 From: girodav <1390902+girodav@users.noreply.github.com> Date: Fri, 16 Dec 2022 15:21:03 +0100 Subject: [PATCH 12/14] Added nameEC2Tag variable to tests --- .../module/aws/cloudwatch/cloudwatch_test.go | 53 +++++++------------ 1 file changed, 19 insertions(+), 34 deletions(-) diff --git a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go index 8b689e58876..f4a195634a6 100644 --- a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go +++ b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go @@ -111,23 +111,28 @@ var ( MetricName: &metricName6, Namespace: &namespaceMSK, } - nameTag = []aws.Tag{ + nameTestTag = []aws.Tag{ { Key: "name", Value: []string{"test"}, }} + nameTestEC2Tag = []aws.Tag{ + { + Key: "name", + Value: []string{"test-ec2"}, + }} elbNamespaceDetail = []namespaceDetail{ { resourceTypeFilter: "elasticloadbalancing", names: []string{"BackendConnectionErrors", "HTTPCode_Backend_2XX", "HTTPCode_Backend_3XX"}, statistics: []string{"Sum"}, - tags: nameTag, + tags: nameTestTag, }, { resourceTypeFilter: "elasticloadbalancing", names: []string{"HealthyHostCount", "SurgeQueueLength", "UnHealthyHostCount"}, statistics: []string{"Maximum"}, - tags: nameTag, + tags: nameTestTag, }, } ) @@ -230,8 +235,8 @@ func TestReadCloudwatchConfig(t *testing.T) { } resourceTypeFiltersEC2RDSWithTag := map[string][]aws.Tag{} - resourceTypeFiltersEC2RDSWithTag["ec2:instance"] = nameTag - resourceTypeFiltersEC2RDSWithTag["rds"] = nameTag + resourceTypeFiltersEC2RDSWithTag["ec2:instance"] = nameTestTag + resourceTypeFiltersEC2RDSWithTag["rds"] = nameTestTag expectedListMetricWithDetailEC2RDSWithTag := listMetricWithDetail{ metricsWithStats: metricsWithStats, resourceTypeFilters: resourceTypeFiltersEC2RDSWithTag, @@ -290,7 +295,7 @@ func TestReadCloudwatchConfig(t *testing.T) { resourceTypeFilter: resourceTypeEC2, names: []string{"CPUUtilization"}, statistics: defaultStatistics, - tags: nameTag, + tags: nameTestTag, }, } @@ -300,7 +305,7 @@ func TestReadCloudwatchConfig(t *testing.T) { expectedNamespaceDetailELBLambda["AWS/Lambda"] = []namespaceDetail{ { statistics: defaultStatistics, - tags: nameTag, + tags: nameTestTag, }, } expectedNamespaceDetailELBLambda["AWS/ELB"] = elbNamespaceDetail @@ -542,7 +547,7 @@ func TestReadCloudwatchConfig(t *testing.T) { ResourceType: "elasticloadbalancing", }, }, - nameTag, + nameTestTag, listMetricWithDetail{ resourceTypeFilters: map[string][]aws.Tag{}, }, @@ -595,7 +600,7 @@ func TestReadCloudwatchConfig(t *testing.T) { ResourceType: "rds", }, }, - nameTag, + nameTestTag, expectedListMetricWithDetailEC2RDSWithTag, expectedNamespaceDetailELBLambda, }, @@ -684,7 +689,7 @@ func TestReadCloudwatchConfig(t *testing.T) { ResourceType: "rds", }, }, - nameTag, + nameTestTag, expectedListMetricWithDetailEC2sRDSWithTag, map[string][]namespaceDetail{}, }, @@ -901,12 +906,7 @@ func TestConstructTagsFilters(t *testing.T) { Value: []string{"test-elb"}, }, } - expectedResourceTypeTagFiltersELBEC2["ec2:instance"] = []aws.Tag{ - { - Key: "name", - Value: []string{"test-ec2"}, - }, - } + expectedResourceTypeTagFiltersELBEC2["ec2:instance"] = nameTestEC2Tag cases := []struct { title string @@ -975,12 +975,7 @@ func TestConstructTagsFilters(t *testing.T) { resourceTypeFilter: "ec2:instance", names: []string{"CPUUtilization"}, statistics: defaultStatistics, - tags: []aws.Tag{ - { - Key: "name", - Value: []string{"test-ec2"}, - }, - }, + tags: nameTestEC2Tag, }, }, expectedResourceTypeTagFiltersELBEC2, @@ -1284,12 +1279,7 @@ func TestCreateEventsWithIdentifier(t *testing.T) { []string{"Average"}, }} resourceTypeTagFilters := map[string][]aws.Tag{} - resourceTypeTagFilters["ec2:instance"] = []aws.Tag{ - { - Key: "name", - Value: []string{"test-ec2"}, - }, - } + resourceTypeTagFilters["ec2:instance"] = nameTestEC2Tag startTime, endTime := aws.GetStartTimeEndTime(time.Now(), m.MetricSet.Period, m.MetricSet.Latency) events, err := m.createEvents(mockCloudwatchSvc, mockTaggingSvc, listMetricWithStatsTotal, resourceTypeTagFilters, regionName, startTime, endTime) @@ -1408,12 +1398,7 @@ func TestCreateEventsWithTagsFilter(t *testing.T) { // Check that the event is created when the tag filter matches resourceTypeTagFilters := map[string][]aws.Tag{} - resourceTypeTagFilters["ec2:instance"] = []aws.Tag{ - { - Key: "name", - Value: []string{"test-ec2"}, - }, - } + resourceTypeTagFilters["ec2:instance"] = nameTestEC2Tag startTime, endTime := aws.GetStartTimeEndTime(time.Now(), m.MetricSet.Period, m.MetricSet.Latency) events, err := m.createEvents(mockCloudwatchSvc, mockTaggingSvc, listMetricWithStatsTotal, resourceTypeTagFilters, regionName, startTime, endTime) From 069ffd5ebde5cd1b69c1dacbe7c31d7c35ce4a51 Mon Sep 17 00:00:00 2001 From: girodav <1390902+girodav@users.noreply.github.com> Date: Fri, 16 Dec 2022 15:34:36 +0100 Subject: [PATCH 13/14] Added nameELBTag variables to tests --- .../module/aws/cloudwatch/cloudwatch_test.go | 57 ++++++++----------- 1 file changed, 23 insertions(+), 34 deletions(-) diff --git a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go index f4a195634a6..752ff02178a 100644 --- a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go +++ b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go @@ -121,6 +121,24 @@ var ( Key: "name", Value: []string{"test-ec2"}, }} + nameELBTag = []aws.Tag{ + { + Key: "name", + Value: []string{"test-elb"}, + }, + } + nameELB1Tag = []aws.Tag{ + { + Key: "name", + Value: []string{"test-elb1"}, + }, + } + nameELB2Tag = []aws.Tag{ + { + Key: "name", + Value: []string{"test-elb2"}, + }, + } elbNamespaceDetail = []namespaceDetail{ { resourceTypeFilter: "elasticloadbalancing", @@ -888,24 +906,10 @@ func TestConstructTagsFilters(t *testing.T) { expectedResourceTypeTagFiltersEC2["ec2:instance"] = nil expectedResourceTypeTagFiltersELB := map[string][]aws.Tag{} - expectedResourceTypeTagFiltersELB["elasticloadbalancing"] = []aws.Tag{ - { - Key: "name", - Value: []string{"test-elb1"}, - }, - { - Key: "name", - Value: []string{"test-elb2"}, - }, - } + expectedResourceTypeTagFiltersELB["elasticloadbalancing"] = append(nameELB1Tag, nameELB2Tag...) expectedResourceTypeTagFiltersELBEC2 := map[string][]aws.Tag{} - expectedResourceTypeTagFiltersELBEC2["elasticloadbalancing"] = []aws.Tag{ - { - Key: "name", - Value: []string{"test-elb"}, - }, - } + expectedResourceTypeTagFiltersELBEC2["elasticloadbalancing"] = nameELBTag expectedResourceTypeTagFiltersELBEC2["ec2:instance"] = nameTestEC2Tag cases := []struct { @@ -936,23 +940,13 @@ func TestConstructTagsFilters(t *testing.T) { resourceTypeFilter: "elasticloadbalancing", names: []string{"BackendConnectionErrors", "HTTPCode_Backend_2XX", "HTTPCode_Backend_3XX"}, statistics: []string{"Sum"}, - tags: []aws.Tag{ - { - Key: "name", - Value: []string{"test-elb1"}, - }, - }, + tags: nameELB1Tag, }, { resourceTypeFilter: "elasticloadbalancing", names: []string{"HealthyHostCount", "SurgeQueueLength", "UnHealthyHostCount"}, statistics: []string{"Maximum"}, - tags: []aws.Tag{ - { - Key: "name", - Value: []string{"test-elb2"}, - }, - }, + tags: nameELB2Tag, }, }, expectedResourceTypeTagFiltersELB, @@ -964,12 +958,7 @@ func TestConstructTagsFilters(t *testing.T) { resourceTypeFilter: "elasticloadbalancing", names: []string{"BackendConnectionErrors", "HTTPCode_Backend_2XX", "HTTPCode_Backend_3XX"}, statistics: []string{"Sum"}, - tags: []aws.Tag{ - { - Key: "name", - Value: []string{"test-elb"}, - }, - }, + tags: nameELBTag, }, { resourceTypeFilter: "ec2:instance", From 6f8f7ffacd2aed6bb8ae6d5f1e2de916c3598b21 Mon Sep 17 00:00:00 2001 From: girodav <1390902+girodav@users.noreply.github.com> Date: Fri, 16 Dec 2022 15:59:21 +0100 Subject: [PATCH 14/14] Added ec2Instance1Config variables to tests --- .../module/aws/cloudwatch/cloudwatch_test.go | 64 +++++-------------- 1 file changed, 16 insertions(+), 48 deletions(-) diff --git a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go index 752ff02178a..af9e9f2a9ca 100644 --- a/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go +++ b/x-pack/metricbeat/module/aws/cloudwatch/cloudwatch_test.go @@ -153,6 +153,18 @@ var ( tags: nameTestTag, }, } + ec2instance1Config = Config{ + Namespace: namespace, + MetricName: []string{metricName1}, + Dimensions: []Dimension{ + { + Name: "InstanceId", + Value: instanceID1, + }, + }, + ResourceType: resourceTypeEC2, + Statistic: []string{"Average"}, + } ) func TestConstructLabel(t *testing.T) { @@ -402,18 +414,7 @@ func TestReadCloudwatchConfig(t *testing.T) { { "test with a specific metric", []Config{ - { - Namespace: "AWS/EC2", - MetricName: []string{"CPUUtilization"}, - Dimensions: []Dimension{ - { - Name: "InstanceId", - Value: "i-1", - }, - }, - ResourceType: "ec2:instance", - Statistic: []string{"Average"}, - }, + ec2instance1Config, }, nil, expectedListMetricWithDetailEC2, @@ -422,18 +423,7 @@ func TestReadCloudwatchConfig(t *testing.T) { { "test with a specific metric and a namespace", []Config{ - { - Namespace: "AWS/EC2", - MetricName: []string{"CPUUtilization"}, - Dimensions: []Dimension{ - { - Name: "InstanceId", - Value: "i-1", - }, - }, - ResourceType: "ec2:instance", - Statistic: []string{"Average"}, - }, + ec2instance1Config, { Namespace: "AWS/S3", }, @@ -445,18 +435,7 @@ func TestReadCloudwatchConfig(t *testing.T) { { "test with two specific metrics and a namespace", []Config{ - { - Namespace: "AWS/EC2", - MetricName: []string{"CPUUtilization"}, - Dimensions: []Dimension{ - { - Name: "InstanceId", - Value: "i-1", - }, - }, - Statistic: []string{"Average"}, - ResourceType: "ec2:instance", - }, + ec2instance1Config, { Namespace: "AWS/Lambda", }, @@ -589,18 +568,7 @@ func TestReadCloudwatchConfig(t *testing.T) { { Namespace: "AWS/Lambda", }, - { - Namespace: "AWS/EC2", - MetricName: []string{"CPUUtilization"}, - Dimensions: []Dimension{ - { - Name: "InstanceId", - Value: "i-1", - }, - }, - Statistic: []string{"Average"}, - ResourceType: "ec2:instance", - }, + ec2instance1Config, { Namespace: "AWS/RDS", MetricName: []string{"CommitThroughput"},