Prometheus: Migrate metadata queries to use resource calls (#49921)

* Sent resource calls for metadata to the backend

* moved resource calls to the backend

* code review feedback

* fixed post with body

* statuscode >= 300

* cleanup

* fixed tests

* fixed datasource tests

* code review feedback

* force some other endpoints to only GET

* fix linting errors

* fixed tests

* was able to remove section of redundant code

* cleanup and code review feedback

* moved query_exemplars to get request

* fixed return on error

* went back to resource calls, but using the backendsrv directly

* moved to a resource call with fallback

* fixed tests

* check for proper messages

* proper check for invalid calls

* code review changes
This commit is contained in:
Stephanie Closson
2022-06-03 15:56:13 -03:00
committed by GitHub
parent d2f3631a47
commit 53ee72d15d
6 changed files with 181 additions and 28 deletions

View File

@@ -16,6 +16,7 @@ import (
"github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/tsdb/prometheus/buffered"
"github.com/grafana/grafana/pkg/tsdb/prometheus/querydata"
"github.com/grafana/grafana/pkg/tsdb/prometheus/resource"
apiv1 "github.com/prometheus/client_golang/api/prometheus/v1"
)
@@ -29,6 +30,7 @@ type Service struct {
type instance struct {
buffered *buffered.Buffered
queryData *querydata.QueryData
resource *resource.Resource
}
func ProvideService(httpClientProvider httpclient.Provider, cfg *setting.Cfg, features featuremgmt.FeatureToggles, tracer tracing.Tracer) *Service {
@@ -57,9 +59,15 @@ func newInstanceSettings(httpClientProvider httpclient.Provider, cfg *setting.Cf
return nil, err
}
r, err := resource.New(httpClientProvider, cfg, features, settings, plog)
if err != nil {
return nil, err
}
return instance{
buffered: b,
queryData: qd,
resource: r,
}, nil
}
}
@@ -81,6 +89,27 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest)
return i.buffered.ExecuteTimeSeriesQuery(ctx, req)
}
func (s *Service) CallResource(ctx context.Context, req *backend.CallResourceRequest, sender backend.CallResourceResponseSender) error {
i, err := s.getInstance(req.PluginContext)
if err != nil {
return err
}
statusCode, bytes, err := i.resource.Execute(ctx, req)
body := bytes
if err != nil {
body = []byte(err.Error())
}
return sender.Send(&backend.CallResourceResponse{
Status: statusCode,
Headers: map[string][]string{
"content-type": {"application/json"},
},
Body: body,
})
}
func (s *Service) getInstance(pluginCtx backend.PluginContext) (*instance, error) {
i, err := s.im.Get(pluginCtx)
if err != nil {