2022-10-20 18:53:28 +08:00
package models
import (
2023-05-24 16:19:34 +08:00
"context"
2022-11-28 19:39:12 +08:00
"net/url"
2022-10-20 18:53:28 +08:00
"github.com/aws/aws-sdk-go/service/cloudwatch"
2022-11-28 19:39:12 +08:00
"github.com/aws/aws-sdk-go/service/cloudwatchlogs"
2023-04-12 01:55:57 +08:00
"github.com/aws/aws-sdk-go/service/ec2"
2022-11-28 19:39:12 +08:00
"github.com/aws/aws-sdk-go/service/oam"
"github.com/grafana/grafana-plugin-sdk-go/backend"
2023-10-17 22:14:33 +08:00
"github.com/grafana/grafana/pkg/infra/log"
2022-11-28 19:39:12 +08:00
"github.com/grafana/grafana/pkg/services/featuremgmt"
2022-11-22 22:59:11 +08:00
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models/resources"
2022-10-20 18:53:28 +08:00
)
2023-05-24 16:19:34 +08:00
type RequestContextFactoryFunc func ( ctx context . Context , pluginCtx backend . PluginContext , region string ) ( reqCtx RequestContext , err error )
2022-11-28 19:39:12 +08:00
2023-05-24 16:19:34 +08:00
type RouteHandlerFunc func ( ctx context . Context , pluginCtx backend . PluginContext , reqContextFactory RequestContextFactoryFunc , parameters url . Values ) ( [ ] byte , * HttpError )
2022-11-28 19:39:12 +08:00
type RequestContext struct {
MetricsClientProvider MetricsClientProvider
LogsAPIProvider CloudWatchLogsAPIProvider
2022-12-02 17:21:46 +08:00
OAMAPIProvider OAMAPIProvider
2023-09-26 02:19:12 +08:00
EC2APIProvider EC2APIProvider
2022-11-28 19:39:12 +08:00
Settings CloudWatchSettings
Features featuremgmt . FeatureToggles
2023-10-17 22:14:33 +08:00
Logger log . Logger
2022-11-28 19:39:12 +08:00
}
2022-12-02 17:21:46 +08:00
// Services
2022-10-20 18:53:28 +08:00
type ListMetricsProvider interface {
2022-11-28 19:39:12 +08:00
GetDimensionKeysByDimensionFilter ( resources . DimensionKeysRequest ) ( [ ] resources . ResourceResponse [ string ] , error )
GetDimensionValuesByDimensionFilter ( resources . DimensionValuesRequest ) ( [ ] resources . ResourceResponse [ string ] , error )
GetMetricsByNamespace ( r resources . MetricsRequest ) ( [ ] resources . ResourceResponse [ resources . Metric ] , error )
2022-10-20 18:53:28 +08:00
}
2022-12-02 17:21:46 +08:00
type LogGroupsProvider interface {
GetLogGroups ( request resources . LogGroupsRequest ) ( [ ] resources . ResourceResponse [ resources . LogGroup ] , error )
2023-01-11 15:12:58 +08:00
GetLogGroupFields ( request resources . LogGroupFieldsRequest ) ( [ ] resources . ResourceResponse [ resources . LogGroupField ] , error )
2022-12-02 17:21:46 +08:00
}
type AccountsProvider interface {
GetAccountsForCurrentUserOrRole ( ) ( [ ] resources . ResourceResponse [ resources . Account ] , error )
}
2023-09-26 02:19:12 +08:00
type RegionsAPIProvider interface {
GetRegions ( ) ( [ ] resources . ResourceResponse [ resources . Region ] , error )
}
2022-12-02 17:21:46 +08:00
// Clients
2022-10-20 18:53:28 +08:00
type MetricsClientProvider interface {
2022-11-28 19:39:12 +08:00
ListMetricsWithPageLimit ( params * cloudwatch . ListMetricsInput ) ( [ ] resources . MetricResponse , error )
2022-10-20 18:53:28 +08:00
}
2022-12-02 17:21:46 +08:00
// APIs - instead of using the API defined in the services within the aws-sdk-go directly, specify a subset of the API with methods that are actually used in a service or a client
2022-10-20 18:53:28 +08:00
type CloudWatchMetricsAPIProvider interface {
ListMetricsPages ( * cloudwatch . ListMetricsInput , func ( * cloudwatch . ListMetricsOutput , bool ) bool ) error
}
2022-11-28 19:39:12 +08:00
type CloudWatchLogsAPIProvider interface {
DescribeLogGroups ( * cloudwatchlogs . DescribeLogGroupsInput ) ( * cloudwatchlogs . DescribeLogGroupsOutput , error )
2023-01-11 15:12:58 +08:00
GetLogGroupFields ( * cloudwatchlogs . GetLogGroupFieldsInput ) ( * cloudwatchlogs . GetLogGroupFieldsOutput , error )
2022-11-28 19:39:12 +08:00
}
2022-12-02 17:21:46 +08:00
type OAMAPIProvider interface {
2022-11-28 19:39:12 +08:00
ListSinks ( * oam . ListSinksInput ) ( * oam . ListSinksOutput , error )
ListAttachedLinks ( * oam . ListAttachedLinksInput ) ( * oam . ListAttachedLinksOutput , error )
}
2023-04-12 01:55:57 +08:00
type EC2APIProvider interface {
DescribeRegions ( in * ec2 . DescribeRegionsInput ) ( * ec2 . DescribeRegionsOutput , error )
DescribeInstancesPages ( in * ec2 . DescribeInstancesInput , fn func ( * ec2 . DescribeInstancesOutput , bool ) bool ) error
}