mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
CloudWatch Logs: Wrap sync error from executeGetQueryResults (#73252)
This commit is contained in:
parent
c9ed2c80b2
commit
870ef7b058
@ -299,7 +299,14 @@ func (e *cloudWatchExecutor) executeGetQueryResults(ctx context.Context, logsCli
|
||||
QueryId: aws.String(logsQuery.QueryId),
|
||||
}
|
||||
|
||||
return logsClient.GetQueryResultsWithContext(ctx, queryInput)
|
||||
getQueryResultsResponse, err := logsClient.GetQueryResultsWithContext(ctx, queryInput)
|
||||
if err != nil {
|
||||
var awsErr awserr.Error
|
||||
if errors.As(err, &awsErr) {
|
||||
return getQueryResultsResponse, &AWSError{Code: awsErr.Code(), Message: err.Error()}
|
||||
}
|
||||
}
|
||||
return getQueryResultsResponse, err
|
||||
}
|
||||
|
||||
func (e *cloudWatchExecutor) handleGetQueryResults(ctx context.Context, logsClient cloudwatchlogsiface.CloudWatchLogsAPI,
|
||||
|
@ -108,7 +108,7 @@ func (e *cloudWatchExecutor) syncQuery(ctx context.Context, logsClient cloudwatc
|
||||
for range ticker.C {
|
||||
res, err := e.executeGetQueryResults(ctx, logsClient, requestParams)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, fmt.Errorf("CloudWatch Error: %w", err)
|
||||
}
|
||||
if isTerminated(*res.Status) {
|
||||
return res, err
|
||||
|
@ -336,4 +336,36 @@ func Test_executeSyncLogQuery_handles_RefId_from_input_queries(t *testing.T) {
|
||||
assert.Error(t, err)
|
||||
cli.AssertNumberOfCalls(t, "GetQueryResultsWithContext", 1)
|
||||
})
|
||||
|
||||
t.Run("when getQueryResults returns aws error is returned, it keeps the context", func(t *testing.T) {
|
||||
cli = &mockLogsSyncClient{}
|
||||
cli.On("StartQueryWithContext", mock.Anything, mock.Anything, mock.Anything).Return(&cloudwatchlogs.StartQueryOutput{
|
||||
QueryId: aws.String("abcd-efgh-ijkl-mnop"),
|
||||
}, nil)
|
||||
cli.On("GetQueryResultsWithContext", mock.Anything, mock.Anything, mock.Anything).Return(
|
||||
&cloudwatchlogs.GetQueryResultsOutput{Status: aws.String("Complete")},
|
||||
&fakeAWSError{code: "foo", message: "bar"},
|
||||
)
|
||||
im := datasource.NewInstanceManager(func(s backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||
return DataSource{Settings: models.CloudWatchSettings{}}, nil
|
||||
})
|
||||
executor := newExecutor(im, newTestConfig(), &fakeSessionCache{}, featuremgmt.WithFeatures())
|
||||
|
||||
res, err := executor.QueryData(context.Background(), &backend.QueryDataRequest{
|
||||
Headers: map[string]string{ngalertmodels.FromAlertHeaderName: "some value"},
|
||||
PluginContext: backend.PluginContext{DataSourceInstanceSettings: &backend.DataSourceInstanceSettings{}},
|
||||
Queries: []backend.DataQuery{
|
||||
{
|
||||
TimeRange: backend.TimeRange{From: time.Unix(0, 0), To: time.Unix(1, 0)},
|
||||
JSON: json.RawMessage(`{
|
||||
"queryMode": "Logs"
|
||||
}`),
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
require.Nil(t, res)
|
||||
require.Error(t, err)
|
||||
require.Equal(t, "CloudWatch Error: foo: bar", err.Error())
|
||||
})
|
||||
}
|
||||
|
@ -254,3 +254,24 @@ func (s *mockedCallResourceResponseSenderForOauth) Send(resp *backend.CallResour
|
||||
s.Response = resp
|
||||
return nil
|
||||
}
|
||||
|
||||
type fakeAWSError struct {
|
||||
code string
|
||||
message string
|
||||
}
|
||||
|
||||
func (e fakeAWSError) OrigErr() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (e fakeAWSError) Error() string {
|
||||
return e.message
|
||||
}
|
||||
|
||||
func (e fakeAWSError) Code() string {
|
||||
return e.code
|
||||
}
|
||||
|
||||
func (e fakeAWSError) Message() string {
|
||||
return e.message
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user