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"
2023-10-21 05:45:19 +08:00
"github.com/aws/aws-sdk-go/aws/request"
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-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
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 {
2023-10-23 22:17:06 +08:00
GetDimensionKeysByDimensionFilter ( ctx context . Context , r resources . DimensionKeysRequest ) ( [ ] resources . ResourceResponse [ string ] , error )
GetDimensionValuesByDimensionFilter ( ctx context . Context , r resources . DimensionValuesRequest ) ( [ ] resources . ResourceResponse [ string ] , error )
GetMetricsByNamespace ( ctx context . Context , 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 {
2023-11-02 03:06:06 +08:00
GetLogGroupsWithContext ( ctx context . Context , request resources . LogGroupsRequest ) ( [ ] resources . ResourceResponse [ resources . LogGroup ] , error )
2023-10-31 03:14:18 +08:00
GetLogGroupFieldsWithContext ( ctx context . Context , request resources . LogGroupFieldsRequest , option ... request . Option ) ( [ ] resources . ResourceResponse [ resources . LogGroupField ] , error )
2022-12-02 17:21:46 +08:00
}
type AccountsProvider interface {
2023-10-27 16:49:37 +08:00
GetAccountsForCurrentUserOrRole ( ctx context . Context ) ( [ ] resources . ResourceResponse [ resources . Account ] , error )
2022-12-02 17:21:46 +08:00
}
2023-09-26 02:19:12 +08:00
type RegionsAPIProvider interface {
2023-10-23 22:39:07 +08:00
GetRegions ( ctx context . Context ) ( [ ] resources . ResourceResponse [ resources . Region ] , error )
2023-09-26 02:19:12 +08:00
}
2022-12-02 17:21:46 +08:00
// Clients
2022-10-20 18:53:28 +08:00
type MetricsClientProvider interface {
2023-10-23 22:17:06 +08:00
ListMetricsWithPageLimit ( ctx context . Context , 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 {
2023-10-23 22:17:06 +08:00
ListMetricsPagesWithContext ( ctx context . Context , in * cloudwatch . ListMetricsInput , fn func ( * cloudwatch . ListMetricsOutput , bool ) bool , opts ... request . Option ) error
2022-10-20 18:53:28 +08:00
}
2022-11-28 19:39:12 +08:00
type CloudWatchLogsAPIProvider interface {
2023-11-02 03:06:06 +08:00
DescribeLogGroupsWithContext ( ctx context . Context , in * cloudwatchlogs . DescribeLogGroupsInput , opts ... request . Option ) ( * cloudwatchlogs . DescribeLogGroupsOutput , error )
2023-10-31 03:14:18 +08:00
GetLogGroupFieldsWithContext ( ctx context . Context , in * cloudwatchlogs . GetLogGroupFieldsInput , option ... request . Option ) ( * cloudwatchlogs . GetLogGroupFieldsOutput , error )
2022-11-28 19:39:12 +08:00
}
2022-12-02 17:21:46 +08:00
type OAMAPIProvider interface {
2023-10-27 16:49:37 +08:00
ListSinksWithContext ( ctx context . Context , in * oam . ListSinksInput , opts ... request . Option ) ( * oam . ListSinksOutput , error )
ListAttachedLinksWithContext ( ctx context . Context , in * oam . ListAttachedLinksInput , opts ... request . Option ) ( * oam . ListAttachedLinksOutput , error )
2022-11-28 19:39:12 +08:00
}
2023-04-12 01:55:57 +08:00
type EC2APIProvider interface {
2023-10-23 22:39:07 +08:00
DescribeRegionsWithContext ( ctx context . Context , in * ec2 . DescribeRegionsInput , opts ... request . Option ) ( * ec2 . DescribeRegionsOutput , error )
2023-10-21 05:45:19 +08:00
DescribeInstancesPagesWithContext ( ctx context . Context , in * ec2 . DescribeInstancesInput , fn func ( * ec2 . DescribeInstancesOutput , bool ) bool , opts ... request . Option ) error
2023-04-12 01:55:57 +08:00
}