grafana/pkg/tsdb/prometheus/prometheus.go
2024-07-04 10:49:51 +02:00

80 lines
2.5 KiB
Go

package prometheus
import (
"context"
"fmt"
"github.com/grafana/grafana-azure-sdk-go/v2/azsettings"
"github.com/grafana/grafana-plugin-sdk-go/backend"
sdkhttpclient "github.com/grafana/grafana-plugin-sdk-go/backend/httpclient"
"github.com/grafana/grafana/pkg/promlib"
"github.com/grafana/grafana/pkg/tsdb/prometheus/azureauth"
)
type Service struct {
lib *promlib.Service
}
func ProvideService(httpClientProvider *sdkhttpclient.Provider) *Service {
plog := backend.NewLoggerWith("logger", "tsdb.prometheus")
plog.Debug("Initializing")
return &Service{
lib: promlib.NewService(httpClientProvider, plog, extendClientOpts),
}
}
func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest) (*backend.QueryDataResponse, error) {
return s.lib.QueryData(ctx, req)
}
func (s *Service) CallResource(ctx context.Context, req *backend.CallResourceRequest, sender backend.CallResourceResponseSender) error {
return s.lib.CallResource(ctx, req, sender)
}
func (s *Service) GetBuildInfo(ctx context.Context, req promlib.BuildInfoRequest) (*promlib.BuildInfoResponse, error) {
return s.lib.GetBuildInfo(ctx, req)
}
func (s *Service) GetHeuristics(ctx context.Context, req promlib.HeuristicsRequest) (*promlib.Heuristics, error) {
return s.lib.GetHeuristics(ctx, req)
}
func (s *Service) CheckHealth(ctx context.Context, req *backend.CheckHealthRequest) (*backend.CheckHealthResult,
error) {
return s.lib.CheckHealth(ctx, req)
}
func (s *Service) ValidateAdmission(ctx context.Context, req *backend.AdmissionRequest) (*backend.ValidationResponse, error) {
return s.lib.ValidateAdmission(ctx, req)
}
func (s *Service) MutateAdmission(ctx context.Context, req *backend.AdmissionRequest) (*backend.MutationResponse, error) {
return s.lib.MutateAdmission(ctx, req)
}
func (s *Service) ConvertObject(ctx context.Context, req *backend.ConversionRequest) (*backend.ConversionResponse, error) {
return s.lib.ConvertObject(ctx, req)
}
func extendClientOpts(ctx context.Context, settings backend.DataSourceInstanceSettings, clientOpts *sdkhttpclient.Options) error {
// Set SigV4 service namespace
if clientOpts.SigV4 != nil {
clientOpts.SigV4.Service = "aps"
}
azureSettings, err := azsettings.ReadSettings(ctx)
if err != nil {
return fmt.Errorf("failed to read Azure settings from Grafana: %v", err)
}
// Set Azure authentication
if azureSettings.AzureAuthEnabled {
err = azureauth.ConfigureAzureAuthentication(settings, azureSettings, clientOpts)
if err != nil {
return fmt.Errorf("error configuring Azure auth: %v", err)
}
}
return nil
}