@@ -9,17 +9,21 @@ import (
9
9
"sync"
10
10
11
11
"github.com/aws/aws-sdk-go/service/cloudwatch"
12
- "github.com/grafana/regexp"
13
12
14
13
"github.com/nerdswords/yet-another-cloudwatch-exporter/pkg/apicloudwatch"
15
14
"github.com/nerdswords/yet-another-cloudwatch-exporter/pkg/apitagging"
16
15
"github.com/nerdswords/yet-another-cloudwatch-exporter/pkg/config"
16
+ "github.com/nerdswords/yet-another-cloudwatch-exporter/pkg/job/associator"
17
17
"github.com/nerdswords/yet-another-cloudwatch-exporter/pkg/job/maxdimassociator"
18
18
"github.com/nerdswords/yet-another-cloudwatch-exporter/pkg/logging"
19
19
"github.com/nerdswords/yet-another-cloudwatch-exporter/pkg/model"
20
20
"github.com/nerdswords/yet-another-cloudwatch-exporter/pkg/session"
21
21
)
22
22
23
+ type resourceAssociator interface {
24
+ AssociateMetricToResource (cwMetric * cloudwatch.Metric ) (* model.TaggedResource , bool )
25
+ }
26
+
23
27
func runDiscoveryJob (
24
28
ctx context.Context ,
25
29
logger logging.Logger ,
@@ -199,8 +203,19 @@ func getMetricDataForQueries(
199
203
for _ , metric := range discoveryJob .Metrics {
200
204
go func (metric * config.Metric ) {
201
205
defer wg .Done ()
206
+
207
+ var assoc resourceAssociator
208
+ if config .FlagsFromCtx (ctx ).IsFeatureEnabled (config .MaxDimensionsAssociator ) {
209
+ assoc = maxdimassociator .NewAssociator (svc .DimensionRegexps , resources )
210
+ } else {
211
+ assoc = associator .NewAssociator (svc .DimensionRegexps , resources )
212
+ }
213
+ if logger .IsDebugEnabled () {
214
+ logger .Debug ("associator" , assoc )
215
+ }
216
+
202
217
_ , err := clientCloudwatch .ListMetrics (ctx , svc .Namespace , metric , func (page * cloudwatch.ListMetricsOutput ) {
203
- data := getFilteredMetricDatas (ctx , logger , region , accountID , discoveryJob .Type , discoveryJob .CustomTags , tagsOnMetrics , svc . DimensionRegexps , resources , page .Metrics , discoveryJob .DimensionNameRequirements , metric )
218
+ data := getFilteredMetricDatas (ctx , logger , region , accountID , discoveryJob .Type , discoveryJob .CustomTags , tagsOnMetrics , page .Metrics , discoveryJob .DimensionNameRequirements , metric , assoc )
204
219
205
220
mux .Lock ()
206
221
getMetricDatas = append (getMetricDatas , data ... )
@@ -217,13 +232,23 @@ func getMetricDataForQueries(
217
232
go func (metric * config.Metric ) {
218
233
defer wg .Done ()
219
234
235
+ var assoc resourceAssociator
236
+ if config .FlagsFromCtx (ctx ).IsFeatureEnabled (config .MaxDimensionsAssociator ) {
237
+ assoc = maxdimassociator .NewAssociator (svc .DimensionRegexps , resources )
238
+ } else {
239
+ assoc = associator .NewAssociator (svc .DimensionRegexps , resources )
240
+ }
241
+ if logger .IsDebugEnabled () {
242
+ logger .Debug ("associator" , assoc )
243
+ }
244
+
220
245
metricsList , err := clientCloudwatch .ListMetrics (ctx , svc .Namespace , metric , nil )
221
246
if err != nil {
222
247
logger .Error (err , "Failed to get full metric list" , "metric_name" , metric .Name , "namespace" , svc .Namespace )
223
248
return
224
249
}
225
250
226
- data := getFilteredMetricDatas (ctx , logger , region , accountID , discoveryJob .Type , discoveryJob .CustomTags , tagsOnMetrics , svc . DimensionRegexps , resources , metricsList .Metrics , discoveryJob .DimensionNameRequirements , metric )
251
+ data := getFilteredMetricDatas (ctx , logger , region , accountID , discoveryJob .Type , discoveryJob .CustomTags , tagsOnMetrics , metricsList .Metrics , discoveryJob .DimensionNameRequirements , metric , assoc )
227
252
228
253
mux .Lock ()
229
254
getMetricDatas = append (getMetricDatas , data ... )
@@ -244,27 +269,11 @@ func getFilteredMetricDatas(
244
269
namespace string ,
245
270
customTags []model.Tag ,
246
271
tagsOnMetrics model.ExportedTagsOnMetrics ,
247
- dimensionRegexps []* regexp.Regexp ,
248
- resources []* model.TaggedResource ,
249
272
metricsList []* cloudwatch.Metric ,
250
273
dimensionNameList []string ,
251
274
m * config.Metric ,
275
+ assoc resourceAssociator ,
252
276
) []* model.CloudwatchData {
253
- type resourceAssociator interface {
254
- AssociateMetricToResource (cwMetric * cloudwatch.Metric ) (* model.TaggedResource , bool )
255
- }
256
-
257
- var assoc resourceAssociator
258
- if config .FlagsFromCtx (ctx ).IsFeatureEnabled (config .MaxDimensionsAssociator ) {
259
- assoc = maxdimassociator .NewAssociator (dimensionRegexps , resources )
260
- } else {
261
- assoc = newMetricsToResourceAssociator (dimensionRegexps , resources )
262
- }
263
-
264
- if logger .IsDebugEnabled () {
265
- logger .Debug ("FilterMetricData DimensionsFilter" , "dimensionsFilter" , assoc )
266
- }
267
-
268
277
getMetricsData := make ([]* model.CloudwatchData , 0 , len (metricsList ))
269
278
for _ , cwMetric := range metricsList {
270
279
if len (dimensionNameList ) > 0 && ! metricDimensionsMatchNames (cwMetric , dimensionNameList ) {
0 commit comments