mirror of
https://github.com/grafana/grafana.git
synced 2025-07-30 14:32:15 +08:00
Elasticsearch: Replace error source http client with a new error source methods (#96570)
* Elasticsearch: Replace error source http client with methods * Update * Update * Update tests * Update * Update * Update pkg/tsdb/elasticsearch/data_query.go Co-authored-by: Nathan Vērzemnieks <njvrzm@gmail.com> * Trigger build --------- Co-authored-by: Nathan Vērzemnieks <njvrzm@gmail.com>
This commit is contained in:
@ -77,10 +77,17 @@ func (e *elasticsearchDataQuery) execute() (*backend.QueryDataResponse, error) {
|
|||||||
e.logger.Info("Prepared request", "queriesLength", len(queries), "duration", time.Since(start), "stage", es.StagePrepareRequest)
|
e.logger.Info("Prepared request", "queriesLength", len(queries), "duration", time.Since(start), "stage", es.StagePrepareRequest)
|
||||||
res, err := e.client.ExecuteMultisearch(req)
|
res, err := e.client.ExecuteMultisearch(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// We are returning error containing the source that was added through errorsource.Middleware
|
if backend.IsDownstreamHTTPError(err) {
|
||||||
|
err = errorsource.DownstreamError(err, false)
|
||||||
|
}
|
||||||
return errorsource.AddErrorToResponse(e.dataQueries[0].RefID, response, err), nil
|
return errorsource.AddErrorToResponse(e.dataQueries[0].RefID, response, err), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if res.Status >= 400 {
|
||||||
|
errWithSource := errorsource.SourceError(backend.ErrorSourceFromHTTPStatus(res.Status), fmt.Errorf("unexpected status code: %d", res.Status), false)
|
||||||
|
return errorsource.AddErrorToResponse(e.dataQueries[0].RefID, response, errWithSource), nil
|
||||||
|
}
|
||||||
|
|
||||||
return parseResponse(e.ctx, res.Responses, queries, e.client.GetConfiguredFields(), e.keepLabelsInResponse, e.logger)
|
return parseResponse(e.ctx, res.Responses, queries, e.client.GetConfiguredFields(), e.keepLabelsInResponse, e.logger)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,6 @@ import (
|
|||||||
"github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt"
|
"github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt"
|
||||||
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
|
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
|
||||||
exp "github.com/grafana/grafana-plugin-sdk-go/experimental/errorsource"
|
exp "github.com/grafana/grafana-plugin-sdk-go/experimental/errorsource"
|
||||||
exphttpclient "github.com/grafana/grafana-plugin-sdk-go/experimental/errorsource/httpclient"
|
|
||||||
|
|
||||||
es "github.com/grafana/grafana/pkg/tsdb/elasticsearch/client"
|
es "github.com/grafana/grafana/pkg/tsdb/elasticsearch/client"
|
||||||
)
|
)
|
||||||
@ -90,10 +89,7 @@ func newInstanceSettings(httpClientProvider *httpclient.Provider) datasource.Ins
|
|||||||
httpCliOpts.SigV4.Service = "es"
|
httpCliOpts.SigV4.Service = "es"
|
||||||
}
|
}
|
||||||
|
|
||||||
// set the default middlewars from the httpClientProvider
|
httpCli, err := httpClientProvider.New(httpCliOpts)
|
||||||
httpCliOpts.Middlewares = httpClientProvider.Opts.Middlewares
|
|
||||||
// enable experimental http client to support errors with source
|
|
||||||
httpCli, err := exphttpclient.New(httpCliOpts)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||||
"github.com/grafana/grafana-plugin-sdk-go/experimental/errorsource"
|
"github.com/grafana/grafana-plugin-sdk-go/experimental/errorsource"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
@ -43,7 +44,8 @@ func TestErrorAvgMissingField(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// FIXME: we should return the received error message
|
// FIXME: we should return the received error message
|
||||||
require.Len(t, result.response.Responses, 0)
|
require.Equal(t, "unexpected status code: 400", result.response.Responses["A"].Error.Error())
|
||||||
|
require.Equal(t, backend.ErrorSourceDownstream, result.response.Responses["A"].ErrorSource)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestErrorAvgMissingFieldNoDetailedErrors(t *testing.T) {
|
func TestErrorAvgMissingFieldNoDetailedErrors(t *testing.T) {
|
||||||
@ -71,7 +73,7 @@ func TestErrorAvgMissingFieldNoDetailedErrors(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// FIXME: we should return the received error message
|
// FIXME: we should return the received error message
|
||||||
require.Len(t, result.response.Responses, 0)
|
require.Equal(t, "unexpected status code: 400", result.response.Responses["A"].Error.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestErrorTooManyDateHistogramBuckets(t *testing.T) {
|
func TestErrorTooManyDateHistogramBuckets(t *testing.T) {
|
||||||
|
Reference in New Issue
Block a user