mirror of
https://github.com/grafana/grafana.git
synced 2025-08-02 12:32:11 +08:00

* cleanup cloudwatch.go * streamline interface naming * use utility func * rename test utils file * move util function to where they are used * move dtos to models * split integration tests from the rest * Update pkg/tsdb/cloudwatch/cloudwatch.go Co-authored-by: Isabella Siu <Isabella.siu@grafana.com> * refactor error codes aggregation * move error messages to models Co-authored-by: Isabella Siu <Isabella.siu@grafana.com>
43 lines
1.5 KiB
Go
43 lines
1.5 KiB
Go
package clients
|
|
|
|
import (
|
|
"github.com/aws/aws-sdk-go/aws/awsutil"
|
|
"github.com/aws/aws-sdk-go/service/cloudwatch"
|
|
"github.com/grafana/grafana/pkg/infra/metrics"
|
|
"github.com/grafana/grafana/pkg/setting"
|
|
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models"
|
|
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models/resources"
|
|
)
|
|
|
|
// this client wraps the CloudWatch API and handles pagination and the composition of the MetricResponse DTO
|
|
type metricsClient struct {
|
|
models.CloudWatchMetricsAPIProvider
|
|
config *setting.Cfg
|
|
}
|
|
|
|
func NewMetricsClient(api models.CloudWatchMetricsAPIProvider, config *setting.Cfg) *metricsClient {
|
|
return &metricsClient{CloudWatchMetricsAPIProvider: api, config: config}
|
|
}
|
|
|
|
func (l *metricsClient) ListMetricsWithPageLimit(params *cloudwatch.ListMetricsInput) ([]resources.MetricResponse, error) {
|
|
var cloudWatchMetrics []resources.MetricResponse
|
|
pageNum := 0
|
|
err := l.ListMetricsPages(params, func(page *cloudwatch.ListMetricsOutput, lastPage bool) bool {
|
|
pageNum++
|
|
metrics.MAwsCloudWatchListMetrics.Inc()
|
|
metrics, err := awsutil.ValuesAtPath(page, "Metrics")
|
|
if err == nil {
|
|
for idx, metric := range metrics {
|
|
metric := resources.MetricResponse{Metric: metric.(*cloudwatch.Metric)}
|
|
if len(page.OwningAccounts) >= idx && params.IncludeLinkedAccounts != nil && *params.IncludeLinkedAccounts {
|
|
metric.AccountId = page.OwningAccounts[idx]
|
|
}
|
|
cloudWatchMetrics = append(cloudWatchMetrics, metric)
|
|
}
|
|
}
|
|
return !lastPage && pageNum < l.config.AWSListMetricsPageLimit
|
|
})
|
|
|
|
return cloudWatchMetrics, err
|
|
}
|