diff --git a/pkg/tsdb/cloudwatch/cloudwatch_integration_test.go b/pkg/tsdb/cloudwatch/cloudwatch_integration_test.go index 01789cfc95c..37a6ab40f68 100644 --- a/pkg/tsdb/cloudwatch/cloudwatch_integration_test.go +++ b/pkg/tsdb/cloudwatch/cloudwatch_integration_test.go @@ -221,7 +221,7 @@ func Test_CloudWatch_CallResource_Integration_Test(t *testing.T) { t.Run("Should handle log group fields request", func(t *testing.T) { logApi = mocks.LogsAPI{} - logApi.On("GetLogGroupFields", mock.Anything).Return(&cloudwatchlogs.GetLogGroupFieldsOutput{ + logApi.On("GetLogGroupFieldsWithContext", mock.Anything).Return(&cloudwatchlogs.GetLogGroupFieldsOutput{ LogGroupFields: []*cloudwatchlogs.LogGroupField{ { Name: aws.String("field1"), diff --git a/pkg/tsdb/cloudwatch/mocks/logs.go b/pkg/tsdb/cloudwatch/mocks/logs.go index 54ac6737a16..51d838cf73c 100644 --- a/pkg/tsdb/cloudwatch/mocks/logs.go +++ b/pkg/tsdb/cloudwatch/mocks/logs.go @@ -1,6 +1,8 @@ package mocks import ( + "context" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/request" "github.com/aws/aws-sdk-go/service/cloudwatchlogs" @@ -19,7 +21,7 @@ func (l *LogsAPI) DescribeLogGroups(input *cloudwatchlogs.DescribeLogGroupsInput return args.Get(0).(*cloudwatchlogs.DescribeLogGroupsOutput), args.Error(1) } -func (l *LogsAPI) GetLogGroupFields(input *cloudwatchlogs.GetLogGroupFieldsInput) (*cloudwatchlogs.GetLogGroupFieldsOutput, error) { +func (l *LogsAPI) GetLogGroupFieldsWithContext(ctx context.Context, input *cloudwatchlogs.GetLogGroupFieldsInput, option ...request.Option) (*cloudwatchlogs.GetLogGroupFieldsOutput, error) { args := l.Called(input) return args.Get(0).(*cloudwatchlogs.GetLogGroupFieldsOutput), args.Error(1) @@ -35,7 +37,7 @@ func (l *LogsService) GetLogGroups(request resources.LogGroupsRequest) ([]resour return args.Get(0).([]resources.ResourceResponse[resources.LogGroup]), args.Error(1) } -func (l *LogsService) GetLogGroupFields(request resources.LogGroupFieldsRequest) ([]resources.ResourceResponse[resources.LogGroupField], error) { +func (l *LogsService) GetLogGroupFieldsWithContext(ctx context.Context, request resources.LogGroupFieldsRequest, option ...request.Option) ([]resources.ResourceResponse[resources.LogGroupField], error) { args := l.Called(request) return args.Get(0).([]resources.ResourceResponse[resources.LogGroupField]), args.Error(1) diff --git a/pkg/tsdb/cloudwatch/models/api.go b/pkg/tsdb/cloudwatch/models/api.go index dc540f54d6f..fc1af9c4d53 100644 --- a/pkg/tsdb/cloudwatch/models/api.go +++ b/pkg/tsdb/cloudwatch/models/api.go @@ -38,7 +38,7 @@ type ListMetricsProvider interface { type LogGroupsProvider interface { GetLogGroups(request resources.LogGroupsRequest) ([]resources.ResourceResponse[resources.LogGroup], error) - GetLogGroupFields(request resources.LogGroupFieldsRequest) ([]resources.ResourceResponse[resources.LogGroupField], error) + GetLogGroupFieldsWithContext(ctx context.Context, request resources.LogGroupFieldsRequest, option ...request.Option) ([]resources.ResourceResponse[resources.LogGroupField], error) } type AccountsProvider interface { @@ -61,7 +61,7 @@ type CloudWatchMetricsAPIProvider interface { type CloudWatchLogsAPIProvider interface { DescribeLogGroups(*cloudwatchlogs.DescribeLogGroupsInput) (*cloudwatchlogs.DescribeLogGroupsOutput, error) - GetLogGroupFields(*cloudwatchlogs.GetLogGroupFieldsInput) (*cloudwatchlogs.GetLogGroupFieldsOutput, error) + GetLogGroupFieldsWithContext(ctx context.Context, in *cloudwatchlogs.GetLogGroupFieldsInput, option ...request.Option) (*cloudwatchlogs.GetLogGroupFieldsOutput, error) } type OAMAPIProvider interface { diff --git a/pkg/tsdb/cloudwatch/routes/log_group_fields.go b/pkg/tsdb/cloudwatch/routes/log_group_fields.go index 72352a20646..455c2860368 100644 --- a/pkg/tsdb/cloudwatch/routes/log_group_fields.go +++ b/pkg/tsdb/cloudwatch/routes/log_group_fields.go @@ -22,7 +22,7 @@ func LogGroupFieldsHandler(ctx context.Context, pluginCtx backend.PluginContext, return nil, models.NewHttpError("newLogGroupsService error", http.StatusInternalServerError, err) } - logGroupFields, err := service.GetLogGroupFields(request) + logGroupFields, err := service.GetLogGroupFieldsWithContext(ctx, request) if err != nil { return nil, models.NewHttpError("GetLogGroupFields error", http.StatusInternalServerError, err) } diff --git a/pkg/tsdb/cloudwatch/routes/log_group_fields_test.go b/pkg/tsdb/cloudwatch/routes/log_group_fields_test.go index 25f69937b06..84f5c17681c 100644 --- a/pkg/tsdb/cloudwatch/routes/log_group_fields_test.go +++ b/pkg/tsdb/cloudwatch/routes/log_group_fields_test.go @@ -31,7 +31,7 @@ func TestLogGroupFieldsRoute(t *testing.T) { t.Run("returns 500 if GetLogGroupFields method fails", func(t *testing.T) { mockLogsService := mocks.LogsService{} - mockLogsService.On("GetLogGroupFields", mock.Anything).Return([]resources.ResourceResponse[resources.LogGroupField]{}, fmt.Errorf("error from api")) + mockLogsService.On("GetLogGroupFieldsWithContext", mock.Anything).Return([]resources.ResourceResponse[resources.LogGroupField]{}, fmt.Errorf("error from api")) newLogGroupsService = func(_ context.Context, pluginCtx backend.PluginContext, reqCtxFactory models.RequestContextFactoryFunc, region string) (models.LogGroupsProvider, error) { return &mockLogsService, nil } @@ -47,7 +47,7 @@ func TestLogGroupFieldsRoute(t *testing.T) { t.Run("returns valid json response if everything is ok", func(t *testing.T) { mockLogsService := mocks.LogsService{} - mockLogsService.On("GetLogGroupFields", mock.Anything).Return([]resources.ResourceResponse[resources.LogGroupField]{ + mockLogsService.On("GetLogGroupFieldsWithContext", mock.Anything).Return([]resources.ResourceResponse[resources.LogGroupField]{ { AccountId: new(string), Value: resources.LogGroupField{ diff --git a/pkg/tsdb/cloudwatch/services/log_groups.go b/pkg/tsdb/cloudwatch/services/log_groups.go index 54d2e5ada5d..ee146786f47 100644 --- a/pkg/tsdb/cloudwatch/services/log_groups.go +++ b/pkg/tsdb/cloudwatch/services/log_groups.go @@ -1,7 +1,10 @@ package services import ( + "context" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/request" "github.com/aws/aws-sdk-go/service/cloudwatchlogs" "github.com/grafana/grafana/pkg/tsdb/cloudwatch/models" "github.com/grafana/grafana/pkg/tsdb/cloudwatch/models/resources" @@ -60,7 +63,7 @@ func (s *LogGroupsService) GetLogGroups(req resources.LogGroupsRequest) ([]resou return result, nil } -func (s *LogGroupsService) GetLogGroupFields(request resources.LogGroupFieldsRequest) ([]resources.ResourceResponse[resources.LogGroupField], error) { +func (s *LogGroupsService) GetLogGroupFieldsWithContext(ctx context.Context, request resources.LogGroupFieldsRequest, option ...request.Option) ([]resources.ResourceResponse[resources.LogGroupField], error) { input := &cloudwatchlogs.GetLogGroupFieldsInput{ LogGroupName: aws.String(request.LogGroupName), } @@ -70,7 +73,7 @@ func (s *LogGroupsService) GetLogGroupFields(request resources.LogGroupFieldsReq // input.LogGroupName = nil // } - getLogGroupFieldsOutput, err := s.logGroupsAPI.GetLogGroupFields(input) + getLogGroupFieldsOutput, err := s.logGroupsAPI.GetLogGroupFieldsWithContext(ctx, input) if err != nil { return nil, err } diff --git a/pkg/tsdb/cloudwatch/services/log_groups_test.go b/pkg/tsdb/cloudwatch/services/log_groups_test.go index 80dcaa32e6c..9c2c5c0f8d5 100644 --- a/pkg/tsdb/cloudwatch/services/log_groups_test.go +++ b/pkg/tsdb/cloudwatch/services/log_groups_test.go @@ -1,6 +1,7 @@ package services import ( + "context" "fmt" "testing" @@ -290,7 +291,7 @@ func TestGetLogGroupsCrossAccountQuerying(t *testing.T) { func TestGetLogGroupFields(t *testing.T) { t.Run("Should map log group fields response", func(t *testing.T) { mockLogsAPI := &mocks.LogsAPI{} - mockLogsAPI.On("GetLogGroupFields", mock.Anything).Return( + mockLogsAPI.On("GetLogGroupFieldsWithContext", mock.Anything).Return( &cloudwatchlogs.GetLogGroupFieldsOutput{ LogGroupFields: []*cloudwatchlogs.LogGroupField{ { @@ -307,7 +308,7 @@ func TestGetLogGroupFields(t *testing.T) { }, nil) service := NewLogGroupsService(mockLogsAPI, false) - resp, err := service.GetLogGroupFields(resources.LogGroupFieldsRequest{}) + resp, err := service.GetLogGroupFieldsWithContext(context.Background(), resources.LogGroupFieldsRequest{}) assert.NoError(t, err) assert.Equal(t, []resources.ResourceResponse[resources.LogGroupField]{ @@ -355,16 +356,16 @@ func TestGetLogGroupFields(t *testing.T) { // remove this test once the above test is uncommented t.Run("Should only set LogGroupName as api input in case both LogGroupName and LogGroupARN are specified", func(t *testing.T) { mockLogsAPI := &mocks.LogsAPI{} - mockLogsAPI.On("GetLogGroupFields", mock.Anything).Return( + mockLogsAPI.On("GetLogGroupFieldsWithContext", mock.Anything).Return( &cloudwatchlogs.GetLogGroupFieldsOutput{}, nil) service := NewLogGroupsService(mockLogsAPI, false) - resp, err := service.GetLogGroupFields(resources.LogGroupFieldsRequest{ + resp, err := service.GetLogGroupFieldsWithContext(context.Background(), resources.LogGroupFieldsRequest{ LogGroupName: "logGroupName", LogGroupARN: "logGroupARN", }) - mockLogsAPI.AssertCalled(t, "GetLogGroupFields", &cloudwatchlogs.GetLogGroupFieldsInput{ + mockLogsAPI.AssertCalled(t, "GetLogGroupFieldsWithContext", &cloudwatchlogs.GetLogGroupFieldsInput{ LogGroupIdentifier: nil, LogGroupName: utils.Pointer("logGroupName"), }) @@ -374,16 +375,16 @@ func TestGetLogGroupFields(t *testing.T) { t.Run("Should only set LogGroupName as api input in case only LogGroupName is specified", func(t *testing.T) { mockLogsAPI := &mocks.LogsAPI{} - mockLogsAPI.On("GetLogGroupFields", mock.Anything).Return( + mockLogsAPI.On("GetLogGroupFieldsWithContext", mock.Anything).Return( &cloudwatchlogs.GetLogGroupFieldsOutput{}, nil) service := NewLogGroupsService(mockLogsAPI, false) - resp, err := service.GetLogGroupFields(resources.LogGroupFieldsRequest{ + resp, err := service.GetLogGroupFieldsWithContext(context.Background(), resources.LogGroupFieldsRequest{ LogGroupName: "logGroupName", LogGroupARN: "", }) - mockLogsAPI.AssertCalled(t, "GetLogGroupFields", &cloudwatchlogs.GetLogGroupFieldsInput{ + mockLogsAPI.AssertCalled(t, "GetLogGroupFieldsWithContext", &cloudwatchlogs.GetLogGroupFieldsInput{ LogGroupIdentifier: nil, LogGroupName: utils.Pointer("logGroupName"), }) diff --git a/pkg/tsdb/cloudwatch/test_utils.go b/pkg/tsdb/cloudwatch/test_utils.go index 9dff03b03bf..a54972305a1 100644 --- a/pkg/tsdb/cloudwatch/test_utils.go +++ b/pkg/tsdb/cloudwatch/test_utils.go @@ -214,7 +214,7 @@ func (c fakeCheckHealthClient) DescribeLogGroups(input *cloudwatchlogs.DescribeL return nil, nil } -func (c fakeCheckHealthClient) GetLogGroupFields(input *cloudwatchlogs.GetLogGroupFieldsInput) (*cloudwatchlogs.GetLogGroupFieldsOutput, error) { +func (c fakeCheckHealthClient) GetLogGroupFieldsWithContext(ctx context.Context, input *cloudwatchlogs.GetLogGroupFieldsInput, option ...request.Option) (*cloudwatchlogs.GetLogGroupFieldsOutput, error) { return nil, nil }