mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Chore: Promlib allows extendOptions to be nil (#84463)
* use logger from service * allow extendOptions to be nil * Update logger
This commit is contained in:
parent
94a9aeaccc
commit
eae9bfe4bc
@ -16,11 +16,8 @@ const (
|
||||
refID = "__healthcheck__"
|
||||
)
|
||||
|
||||
var logger = backend.NewLoggerWith("logger", "tsdb.prometheus")
|
||||
|
||||
func (s *Service) CheckHealth(ctx context.Context, req *backend.CheckHealthRequest) (*backend.CheckHealthResult,
|
||||
error) {
|
||||
logger := logger.FromContext(ctx)
|
||||
ds, err := s.getInstance(ctx, req.PluginContext)
|
||||
|
||||
// check that the datasource exists
|
||||
@ -32,13 +29,15 @@ func (s *Service) CheckHealth(ctx context.Context, req *backend.CheckHealthReque
|
||||
return getHealthCheckMessage("", errors.New("invalid datasource info received"))
|
||||
}
|
||||
|
||||
logger := s.logger.FromContext(ctx)
|
||||
|
||||
hc, err := healthcheck(ctx, req, ds)
|
||||
if err != nil {
|
||||
logger.Warn("Error performing prometheus healthcheck", "err", err.Error())
|
||||
return nil, err
|
||||
}
|
||||
|
||||
heuristics, err := getHeuristics(ctx, ds)
|
||||
heuristics, err := getHeuristics(ctx, ds, logger)
|
||||
if err != nil {
|
||||
logger.Warn("Failed to get prometheus heuristics", "err", err.Error())
|
||||
} else {
|
||||
|
@ -82,8 +82,10 @@ func getMockProvider[T http.RoundTripper]() *sdkhttpclient.Provider {
|
||||
func Test_healthcheck(t *testing.T) {
|
||||
t.Run("should do a successful health check", func(t *testing.T) {
|
||||
httpProvider := getMockProvider[*healthCheckSuccessRoundTripper]()
|
||||
logger := backend.NewLoggerWith("logger", "test")
|
||||
s := &Service{
|
||||
im: datasource.NewInstanceManager(newInstanceSettings(httpProvider, backend.NewLoggerWith("logger", "test"), mockExtendClientOpts)),
|
||||
im: datasource.NewInstanceManager(newInstanceSettings(httpProvider, logger, mockExtendClientOpts)),
|
||||
logger: logger,
|
||||
}
|
||||
|
||||
req := &backend.CheckHealthRequest{
|
||||
@ -98,8 +100,10 @@ func Test_healthcheck(t *testing.T) {
|
||||
|
||||
t.Run("should return an error for an unsuccessful health check", func(t *testing.T) {
|
||||
httpProvider := getMockProvider[*healthCheckFailRoundTripper]()
|
||||
logger := backend.NewLoggerWith("logger", "test")
|
||||
s := &Service{
|
||||
im: datasource.NewInstanceManager(newInstanceSettings(httpProvider, backend.NewLoggerWith("logger", "test"), mockExtendClientOpts)),
|
||||
im: datasource.NewInstanceManager(newInstanceSettings(httpProvider, logger, mockExtendClientOpts)),
|
||||
logger: logger,
|
||||
}
|
||||
|
||||
req := &backend.CheckHealthRequest{
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
"net/http"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -85,10 +86,11 @@ func (s *Service) GetHeuristics(ctx context.Context, req HeuristicsRequest) (*He
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return getHeuristics(ctx, ds)
|
||||
logger := s.logger.FromContext(ctx)
|
||||
return getHeuristics(ctx, ds, logger)
|
||||
}
|
||||
|
||||
func getHeuristics(ctx context.Context, i *instance) (*Heuristics, error) {
|
||||
func getHeuristics(ctx context.Context, i *instance, logger log.Logger) (*Heuristics, error) {
|
||||
heuristics := Heuristics{
|
||||
Application: "unknown",
|
||||
Features: Features{
|
||||
|
@ -52,8 +52,10 @@ func Test_GetHeuristics(t *testing.T) {
|
||||
status: http.StatusOK,
|
||||
}
|
||||
httpProvider := newHeuristicsSDKProvider(rt)
|
||||
logger := backend.NewLoggerWith("logger", "test")
|
||||
s := &Service{
|
||||
im: datasource.NewInstanceManager(newInstanceSettings(httpProvider, backend.NewLoggerWith("logger", "test"), mockExtendClientOpts)),
|
||||
im: datasource.NewInstanceManager(newInstanceSettings(httpProvider, logger, mockExtendClientOpts)),
|
||||
logger: logger,
|
||||
}
|
||||
|
||||
req := HeuristicsRequest{
|
||||
@ -72,8 +74,10 @@ func Test_GetHeuristics(t *testing.T) {
|
||||
status: http.StatusOK,
|
||||
}
|
||||
httpProvider := newHeuristicsSDKProvider(rt)
|
||||
logger := backend.NewLoggerWith("logger", "test")
|
||||
s := &Service{
|
||||
im: datasource.NewInstanceManager(newInstanceSettings(httpProvider, backend.NewLoggerWith("logger", "test"), mockExtendClientOpts)),
|
||||
im: datasource.NewInstanceManager(newInstanceSettings(httpProvider, logger, mockExtendClientOpts)),
|
||||
logger: logger,
|
||||
}
|
||||
|
||||
req := HeuristicsRequest{
|
||||
|
@ -52,9 +52,11 @@ func newInstanceSettings(httpClientProvider *sdkhttpclient.Provider, log log.Log
|
||||
return nil, fmt.Errorf("error creating transport options: %v", err)
|
||||
}
|
||||
|
||||
err = extendOptions(ctx, settings, opts)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error extending transport options: %v", err)
|
||||
if extendOptions != nil {
|
||||
err = extendOptions(ctx, settings, opts)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error extending transport options: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
httpClient, err := httpClientProvider.New(*opts)
|
||||
|
@ -2,6 +2,7 @@ package promlib
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"testing"
|
||||
@ -71,32 +72,7 @@ func TestService(t *testing.T) {
|
||||
httpProvider := getMockPromTestSDKProvider(f)
|
||||
service := NewService(httpProvider, backend.NewLoggerWith("logger", "test"), mockExtendTransportOptions)
|
||||
|
||||
req := &backend.CallResourceRequest{
|
||||
PluginContext: backend.PluginContext{
|
||||
OrgID: 0,
|
||||
PluginID: "prometheus",
|
||||
User: nil,
|
||||
AppInstanceSettings: nil,
|
||||
DataSourceInstanceSettings: &backend.DataSourceInstanceSettings{
|
||||
ID: 0,
|
||||
UID: "",
|
||||
Type: "prometheus",
|
||||
Name: "test-prom",
|
||||
URL: "http://localhost:9090",
|
||||
User: "",
|
||||
Database: "",
|
||||
BasicAuthEnabled: true,
|
||||
BasicAuthUser: "admin",
|
||||
Updated: time.Time{},
|
||||
JSONData: []byte("{}"),
|
||||
},
|
||||
},
|
||||
Path: "/api/v1/series",
|
||||
Method: http.MethodPost,
|
||||
URL: "/api/v1/series",
|
||||
Body: []byte("match%5B%5D: ALERTS\nstart: 1655271408\nend: 1655293008"),
|
||||
}
|
||||
|
||||
req := mockRequest()
|
||||
sender := &fakeSender{}
|
||||
err := service.CallResource(context.Background(), req, sender)
|
||||
require.NoError(t, err)
|
||||
@ -115,4 +91,57 @@ func TestService(t *testing.T) {
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("no extendOptions function provided", func(t *testing.T) {
|
||||
f := &fakeHTTPClientProvider{}
|
||||
httpProvider := getMockPromTestSDKProvider(f)
|
||||
service := NewService(httpProvider, backend.NewLoggerWith("logger", "test"), nil)
|
||||
require.NotNil(t, service)
|
||||
require.NotNil(t, service.im)
|
||||
})
|
||||
|
||||
t.Run("extendOptions function provided", func(t *testing.T) {
|
||||
f := &fakeHTTPClientProvider{}
|
||||
httpProvider := getMockPromTestSDKProvider(f)
|
||||
service := NewService(httpProvider, backend.NewLoggerWith("logger", "test"), func(ctx context.Context, settings backend.DataSourceInstanceSettings, clientOpts *sdkhttpclient.Options) error {
|
||||
fmt.Println(ctx, settings, clientOpts)
|
||||
require.NotNil(t, ctx)
|
||||
require.NotNil(t, settings)
|
||||
require.Equal(t, "test-prom", settings.Name)
|
||||
return nil
|
||||
})
|
||||
|
||||
req := mockRequest()
|
||||
sender := &fakeSender{}
|
||||
err := service.CallResource(context.Background(), req, sender)
|
||||
require.NoError(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func mockRequest() *backend.CallResourceRequest {
|
||||
return &backend.CallResourceRequest{
|
||||
PluginContext: backend.PluginContext{
|
||||
OrgID: 0,
|
||||
PluginID: "prometheus",
|
||||
User: nil,
|
||||
AppInstanceSettings: nil,
|
||||
DataSourceInstanceSettings: &backend.DataSourceInstanceSettings{
|
||||
ID: 0,
|
||||
UID: "",
|
||||
Type: "prometheus",
|
||||
Name: "test-prom",
|
||||
URL: "http://localhost:9090",
|
||||
User: "",
|
||||
Database: "",
|
||||
BasicAuthEnabled: true,
|
||||
BasicAuthUser: "admin",
|
||||
Updated: time.Time{},
|
||||
JSONData: []byte("{}"),
|
||||
},
|
||||
},
|
||||
Path: "/api/v1/series",
|
||||
Method: http.MethodPost,
|
||||
URL: "/api/v1/series",
|
||||
Body: []byte("match%5B%5D: ALERTS\nstart: 1655271408\nend: 1655293008"),
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user