2016-09-21 07:01:53 +02:00
|
|
|
package prometheus
|
|
|
|
|
|
|
|
|
|
import (
|
2016-10-03 09:38:03 +02:00
|
|
|
"context"
|
2016-09-21 13:30:41 +02:00
|
|
|
"fmt"
|
2022-01-04 07:22:33 -07:00
|
|
|
|
2024-03-19 14:56:40 +00:00
|
|
|
"github.com/grafana/grafana-azure-sdk-go/v2/azsettings"
|
2021-08-09 12:11:19 +03:00
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
2024-03-11 17:22:33 +01:00
|
|
|
sdkhttpclient "github.com/grafana/grafana-plugin-sdk-go/backend/httpclient"
|
2024-07-17 21:09:55 +07:00
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
|
2023-01-30 09:38:51 +01:00
|
|
|
|
2024-03-11 17:22:33 +01:00
|
|
|
"github.com/grafana/grafana/pkg/promlib"
|
|
|
|
|
"github.com/grafana/grafana/pkg/tsdb/prometheus/azureauth"
|
2021-10-15 13:37:27 +02:00
|
|
|
)
|
|
|
|
|
|
2021-08-09 12:11:19 +03:00
|
|
|
type Service struct {
|
2024-03-11 17:22:33 +01:00
|
|
|
lib *promlib.Service
|
2021-08-09 12:11:19 +03:00
|
|
|
}
|
|
|
|
|
|
2024-03-11 17:22:33 +01:00
|
|
|
func ProvideService(httpClientProvider *sdkhttpclient.Provider) *Service {
|
2023-10-20 09:54:27 -04:00
|
|
|
plog := backend.NewLoggerWith("logger", "tsdb.prometheus")
|
2023-09-04 22:25:43 +02:00
|
|
|
plog.Debug("Initializing")
|
2022-01-20 18:16:22 +01:00
|
|
|
return &Service{
|
2024-03-11 17:22:33 +01:00
|
|
|
lib: promlib.NewService(httpClientProvider, plog, extendClientOpts),
|
2021-08-25 15:11:22 +02:00
|
|
|
}
|
2017-02-06 16:22:09 +02:00
|
|
|
}
|
|
|
|
|
|
2024-03-11 17:22:33 +01:00
|
|
|
func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest) (*backend.QueryDataResponse, error) {
|
|
|
|
|
return s.lib.QueryData(ctx, req)
|
|
|
|
|
}
|
2022-05-13 14:28:54 -04:00
|
|
|
|
2024-03-11 17:22:33 +01:00
|
|
|
func (s *Service) CallResource(ctx context.Context, req *backend.CallResourceRequest, sender backend.CallResourceResponseSender) error {
|
|
|
|
|
return s.lib.CallResource(ctx, req, sender)
|
|
|
|
|
}
|
2022-02-03 08:06:31 -08:00
|
|
|
|
2024-03-11 17:22:33 +01:00
|
|
|
func (s *Service) GetBuildInfo(ctx context.Context, req promlib.BuildInfoRequest) (*promlib.BuildInfoResponse, error) {
|
|
|
|
|
return s.lib.GetBuildInfo(ctx, req)
|
|
|
|
|
}
|
2022-06-03 15:56:13 -03:00
|
|
|
|
2024-03-11 17:22:33 +01:00
|
|
|
func (s *Service) GetHeuristics(ctx context.Context, req promlib.HeuristicsRequest) (*promlib.Heuristics, error) {
|
|
|
|
|
return s.lib.GetHeuristics(ctx, req)
|
2021-08-09 12:11:19 +03:00
|
|
|
}
|
2021-05-19 23:53:41 +02:00
|
|
|
|
2024-03-11 17:22:33 +01:00
|
|
|
func (s *Service) CheckHealth(ctx context.Context, req *backend.CheckHealthRequest) (*backend.CheckHealthResult,
|
|
|
|
|
error) {
|
|
|
|
|
return s.lib.CheckHealth(ctx, req)
|
|
|
|
|
}
|
2021-08-09 12:11:19 +03:00
|
|
|
|
2024-07-04 10:49:51 +02:00
|
|
|
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)
|
|
|
|
|
}
|
2024-08-15 16:02:21 -04:00
|
|
|
func (s *Service) ConvertObjects(ctx context.Context, req *backend.ConversionRequest) (*backend.ConversionResponse, error) {
|
|
|
|
|
return s.lib.ConvertObjects(ctx, req)
|
2024-07-04 10:49:51 +02:00
|
|
|
}
|
|
|
|
|
|
2024-07-17 21:09:55 +07:00
|
|
|
func extendClientOpts(ctx context.Context, settings backend.DataSourceInstanceSettings, clientOpts *sdkhttpclient.Options, plog log.Logger) error {
|
2024-03-11 17:22:33 +01:00
|
|
|
// Set SigV4 service namespace
|
|
|
|
|
if clientOpts.SigV4 != nil {
|
|
|
|
|
clientOpts.SigV4.Service = "aps"
|
2021-08-09 12:11:19 +03:00
|
|
|
}
|
2021-10-13 03:22:26 -05:00
|
|
|
|
2024-03-11 17:22:33 +01:00
|
|
|
azureSettings, err := azsettings.ReadSettings(ctx)
|
2022-06-03 15:56:13 -03:00
|
|
|
if err != nil {
|
2024-03-11 17:22:33 +01:00
|
|
|
return fmt.Errorf("failed to read Azure settings from Grafana: %v", err)
|
2022-06-03 15:56:13 -03:00
|
|
|
}
|
|
|
|
|
|
2024-07-17 21:09:55 +07:00
|
|
|
audienceOverride := backend.GrafanaConfigFromContext(ctx).FeatureToggles().IsEnabled("prometheusAzureOverrideAudience")
|
|
|
|
|
|
2024-03-11 17:22:33 +01:00
|
|
|
// Set Azure authentication
|
|
|
|
|
if azureSettings.AzureAuthEnabled {
|
2024-07-17 21:09:55 +07:00
|
|
|
err = azureauth.ConfigureAzureAuthentication(settings, azureSettings, clientOpts, audienceOverride, plog)
|
2022-10-24 14:53:11 -05:00
|
|
|
if err != nil {
|
2024-03-11 17:22:33 +01:00
|
|
|
return fmt.Errorf("error configuring Azure auth: %v", err)
|
2022-10-24 14:53:11 -05:00
|
|
|
}
|
2022-06-03 15:56:13 -03:00
|
|
|
}
|
|
|
|
|
|
2024-03-11 17:22:33 +01:00
|
|
|
return nil
|
2020-11-26 13:38:36 +01:00
|
|
|
}
|