diff --git a/pkg/tsdb/cloudwatch/metric_find_query.go b/pkg/tsdb/cloudwatch/metric_find_query.go index b97e69288f0..dce5ea04752 100644 --- a/pkg/tsdb/cloudwatch/metric_find_query.go +++ b/pkg/tsdb/cloudwatch/metric_find_query.go @@ -412,10 +412,7 @@ func (e *cloudWatchExecutor) handleGetDimensions(ctx context.Context, parameters } } else { var err error - dsInfo := e.getDSInfo(region) - dsInfo.Namespace = namespace - - if dimensionValues, err = e.getDimensionsForCustomMetrics(region); err != nil { + if dimensionValues, err = e.getDimensionsForCustomMetrics(region, namespace); err != nil { return nil, errutil.Wrap("unable to call AWS API", err) } } @@ -700,15 +697,14 @@ func (e *cloudWatchExecutor) resourceGroupsGetResources(region string, filters [ return &resp, nil } -func (e *cloudWatchExecutor) getAllMetrics(region string) (cloudwatch.ListMetricsOutput, error) { +func (e *cloudWatchExecutor) getAllMetrics(region, namespace string) (cloudwatch.ListMetricsOutput, error) { client, err := e.getCWClient(region) if err != nil { return cloudwatch.ListMetricsOutput{}, err } - dsInfo := e.getDSInfo(region) params := &cloudwatch.ListMetricsInput{ - Namespace: aws.String(dsInfo.Namespace), + Namespace: aws.String(namespace), } plog.Debug("Listing metrics pages") @@ -737,7 +733,6 @@ func (e *cloudWatchExecutor) getMetricsForCustomMetrics(region, namespace string defer metricsCacheLock.Unlock() dsInfo := e.getDSInfo(region) - dsInfo.Namespace = namespace if _, ok := customMetricsMetricsMap[dsInfo.Profile]; !ok { customMetricsMetricsMap[dsInfo.Profile] = make(map[string]map[string]*customMetricsCache) @@ -745,36 +740,36 @@ func (e *cloudWatchExecutor) getMetricsForCustomMetrics(region, namespace string if _, ok := customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region]; !ok { customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region] = make(map[string]*customMetricsCache) } - if _, ok := customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace]; !ok { - customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace] = &customMetricsCache{} - customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Cache = make([]string, 0) + if _, ok := customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][namespace]; !ok { + customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][namespace] = &customMetricsCache{} + customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][namespace].Cache = make([]string, 0) } - if customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Expire.After(time.Now()) { - return customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Cache, nil + if customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][namespace].Expire.After(time.Now()) { + return customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][namespace].Cache, nil } - result, err := e.getAllMetrics(region) + result, err := e.getAllMetrics(region, namespace) if err != nil { return []string{}, err } - customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Cache = make([]string, 0) - customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Expire = time.Now().Add(5 * time.Minute) + customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][namespace].Cache = make([]string, 0) + customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][namespace].Expire = time.Now().Add(5 * time.Minute) for _, metric := range result.Metrics { - if isDuplicate(customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Cache, *metric.MetricName) { + if isDuplicate(customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][namespace].Cache, *metric.MetricName) { continue } - customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Cache = append( - customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Cache, *metric.MetricName) + customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][namespace].Cache = append( + customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][namespace].Cache, *metric.MetricName) } - return customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Cache, nil + return customMetricsMetricsMap[dsInfo.Profile][dsInfo.Region][namespace].Cache, nil } var dimensionsCacheLock sync.Mutex -func (e *cloudWatchExecutor) getDimensionsForCustomMetrics(region string) ([]string, error) { +func (e *cloudWatchExecutor) getDimensionsForCustomMetrics(region, namespace string) ([]string, error) { dimensionsCacheLock.Lock() defer dimensionsCacheLock.Unlock() @@ -786,32 +781,32 @@ func (e *cloudWatchExecutor) getDimensionsForCustomMetrics(region string) ([]str if _, ok := customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region]; !ok { customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region] = make(map[string]*customMetricsCache) } - if _, ok := customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace]; !ok { - customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace] = &customMetricsCache{} - customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Cache = make([]string, 0) + if _, ok := customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][namespace]; !ok { + customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][namespace] = &customMetricsCache{} + customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][namespace].Cache = make([]string, 0) } - if customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Expire.After(time.Now()) { - return customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Cache, nil + if customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][namespace].Expire.After(time.Now()) { + return customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][namespace].Cache, nil } - result, err := e.getAllMetrics(region) + result, err := e.getAllMetrics(region, namespace) if err != nil { return []string{}, err } - customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Cache = make([]string, 0) - customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Expire = time.Now().Add(5 * time.Minute) + customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][namespace].Cache = make([]string, 0) + customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][namespace].Expire = time.Now().Add(5 * time.Minute) for _, metric := range result.Metrics { for _, dimension := range metric.Dimensions { - if isDuplicate(customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Cache, *dimension.Name) { + if isDuplicate(customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][namespace].Cache, *dimension.Name) { continue } - customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Cache = append( - customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Cache, *dimension.Name) + customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][namespace].Cache = append( + customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][namespace].Cache, *dimension.Name) } } - return customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][dsInfo.Namespace].Cache, nil + return customMetricsDimensionsMap[dsInfo.Profile][dsInfo.Region][namespace].Cache, nil } func isDuplicate(nameList []string, target string) bool {