mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Cloudwatch: Ignore error while fetching regions (#76626)
This commit is contained in:
parent
24a14f3cd7
commit
fefdb78640
@ -151,6 +151,7 @@ func (e *cloudWatchExecutor) getRequestContext(ctx context.Context, pluginCtx ba
|
|||||||
EC2APIProvider: ec2Client,
|
EC2APIProvider: ec2Client,
|
||||||
Settings: instance.Settings,
|
Settings: instance.Settings,
|
||||||
Features: e.features,
|
Features: e.features,
|
||||||
|
Logger: logger,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/service/ec2"
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
"github.com/aws/aws-sdk-go/service/oam"
|
"github.com/aws/aws-sdk-go/service/oam"
|
||||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||||
|
"github.com/grafana/grafana/pkg/infra/log"
|
||||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models/resources"
|
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models/resources"
|
||||||
)
|
)
|
||||||
@ -24,6 +25,7 @@ type RequestContext struct {
|
|||||||
EC2APIProvider EC2APIProvider
|
EC2APIProvider EC2APIProvider
|
||||||
Settings CloudWatchSettings
|
Settings CloudWatchSettings
|
||||||
Features featuremgmt.FeatureToggles
|
Features featuremgmt.FeatureToggles
|
||||||
|
Logger log.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
// Services
|
// Services
|
||||||
|
@ -44,5 +44,5 @@ var newRegionsService = func(ctx context.Context, pluginCtx backend.PluginContex
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return services.NewRegionsService(reqCtx.EC2APIProvider), nil
|
return services.NewRegionsService(reqCtx.EC2APIProvider, reqCtx.Logger), nil
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,8 @@ package services
|
|||||||
import (
|
import (
|
||||||
"sort"
|
"sort"
|
||||||
|
|
||||||
|
"github.com/grafana/grafana/pkg/infra/log"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/service/ec2"
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/constants"
|
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/constants"
|
||||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models"
|
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models"
|
||||||
@ -11,11 +13,13 @@ import (
|
|||||||
|
|
||||||
type RegionsService struct {
|
type RegionsService struct {
|
||||||
models.EC2APIProvider
|
models.EC2APIProvider
|
||||||
|
log.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRegionsService(ec2client models.EC2APIProvider) models.RegionsAPIProvider {
|
func NewRegionsService(ec2client models.EC2APIProvider, logger log.Logger) models.RegionsAPIProvider {
|
||||||
return &RegionsService{
|
return &RegionsService{
|
||||||
ec2client,
|
ec2client,
|
||||||
|
logger,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,8 +37,11 @@ func (r *RegionsService) GetRegions() ([]resources.ResourceResponse[resources.Re
|
|||||||
result := make([]resources.ResourceResponse[resources.Region], 0)
|
result := make([]resources.ResourceResponse[resources.Region], 0)
|
||||||
|
|
||||||
ec2Regions, err := r.DescribeRegions(&ec2.DescribeRegionsInput{})
|
ec2Regions, err := r.DescribeRegions(&ec2.DescribeRegionsInput{})
|
||||||
|
// we ignore this error and always send default regions
|
||||||
|
// we only fetch incase a user has enabled additional regions
|
||||||
|
// but we still log it in case the user is expecting to fetch regions specific to their account and are unable to
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
r.Error("Failed to get regions: ", "error", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
mergeEC2RegionsAndConstantRegions(regions, ec2Regions.Regions)
|
mergeEC2RegionsAndConstantRegions(regions, ec2Regions.Regions)
|
||||||
|
@ -4,12 +4,15 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/service/ec2"
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
|
"github.com/grafana/grafana/pkg/infra/log"
|
||||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/mocks"
|
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/mocks"
|
||||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models/resources"
|
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/models/resources"
|
||||||
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/utils"
|
"github.com/grafana/grafana/pkg/tsdb/cloudwatch/utils"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var testLogger = log.New("test logger")
|
||||||
|
|
||||||
func TestRegions(t *testing.T) {
|
func TestRegions(t *testing.T) {
|
||||||
t.Run("returns regions from the api and merges them with default regions", func(t *testing.T) {
|
t.Run("returns regions from the api and merges them with default regions", func(t *testing.T) {
|
||||||
mockRegions := &ec2.DescribeRegionsOutput{
|
mockRegions := &ec2.DescribeRegionsOutput{
|
||||||
@ -21,7 +24,7 @@ func TestRegions(t *testing.T) {
|
|||||||
}
|
}
|
||||||
ec2Mock := &mocks.EC2Mock{}
|
ec2Mock := &mocks.EC2Mock{}
|
||||||
ec2Mock.On("DescribeRegions").Return(mockRegions, nil)
|
ec2Mock.On("DescribeRegions").Return(mockRegions, nil)
|
||||||
regions, err := NewRegionsService(ec2Mock).GetRegions()
|
regions, err := NewRegionsService(ec2Mock, testLogger).GetRegions()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Contains(t, regions, resources.ResourceResponse[resources.Region]{
|
assert.Contains(t, regions, resources.ResourceResponse[resources.Region]{
|
||||||
Value: resources.Region{
|
Value: resources.Region{
|
||||||
@ -35,10 +38,18 @@ func TestRegions(t *testing.T) {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("forwards error if DescribeRegions errors out", func(t *testing.T) {
|
t.Run("always returns default regions, even if fetch fails", func(t *testing.T) {
|
||||||
ec2Mock := &mocks.EC2Mock{}
|
ec2Mock := &mocks.EC2Mock{}
|
||||||
ec2Mock.On("DescribeRegions").Return((*ec2.DescribeRegionsOutput)(nil), assert.AnError)
|
mockRegions := &ec2.DescribeRegionsOutput{
|
||||||
_, err := NewRegionsService(ec2Mock).GetRegions()
|
Regions: []*ec2.Region{},
|
||||||
assert.Error(t, err)
|
}
|
||||||
|
ec2Mock.On("DescribeRegions").Return(mockRegions, assert.AnError)
|
||||||
|
regions, err := NewRegionsService(ec2Mock, testLogger).GetRegions()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Contains(t, regions, resources.ResourceResponse[resources.Region]{
|
||||||
|
Value: resources.Region{
|
||||||
|
Name: "us-east-2",
|
||||||
|
},
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user