From 399df82f0b258c56d5f65f9d3a52d0d7cf64b18e Mon Sep 17 00:00:00 2001 From: ismail simsek Date: Fri, 14 Mar 2025 13:54:19 +0100 Subject: [PATCH] Prometheus: Read feature toggles once when creating plugin instance (#102131) * initialize an instance with feature toggles * read grafana config only once * use feature toggles directly --- pkg/promlib/library.go | 4 +++- pkg/promlib/querydata/request.go | 8 +++++--- pkg/promlib/querydata/request_test.go | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pkg/promlib/library.go b/pkg/promlib/library.go index cbee4a19ffc..f1438ed585e 100644 --- a/pkg/promlib/library.go +++ b/pkg/promlib/library.go @@ -67,8 +67,10 @@ func newInstanceSettings(httpClientProvider *sdkhttpclient.Provider, log log.Log return nil, fmt.Errorf("error creating http client: %v", err) } + featureToggles := backend.GrafanaConfigFromContext(ctx).FeatureToggles() + // New version using custom client and better response parsing - qd, err := querydata.New(httpClient, settings, log) + qd, err := querydata.New(httpClient, settings, log, featureToggles) if err != nil { return nil, err } diff --git a/pkg/promlib/querydata/request.go b/pkg/promlib/querydata/request.go index 20126f0b98f..7739bf46222 100644 --- a/pkg/promlib/querydata/request.go +++ b/pkg/promlib/querydata/request.go @@ -46,12 +46,14 @@ type QueryData struct { URL string TimeInterval string exemplarSampler func() exemplar.Sampler + featureToggles backend.FeatureToggles } func New( httpClient *http.Client, settings backend.DataSourceInstanceSettings, plog log.Logger, + featureToggles backend.FeatureToggles, ) (*QueryData, error) { jsonData, err := utils.GetJsonData(settings) if err != nil { @@ -86,6 +88,7 @@ func New( ID: settings.ID, URL: settings.URL, exemplarSampler: exemplarSampler, + featureToggles: featureToggles, }, nil } @@ -98,9 +101,8 @@ func (s *QueryData) Execute(ctx context.Context, req *backend.QueryDataRequest) } var ( - cfg = backend.GrafanaConfigFromContext(ctx) - hasPromQLScopeFeatureFlag = cfg.FeatureToggles().IsEnabled("promQLScope") - hasPrometheusRunQueriesInParallel = cfg.FeatureToggles().IsEnabled("prometheusRunQueriesInParallel") + hasPromQLScopeFeatureFlag = s.featureToggles.IsEnabled("promQLScope") + hasPrometheusRunQueriesInParallel = s.featureToggles.IsEnabled("prometheusRunQueriesInParallel") ) if hasPrometheusRunQueriesInParallel { diff --git a/pkg/promlib/querydata/request_test.go b/pkg/promlib/querydata/request_test.go index bfbde8dfb96..d462b82d693 100644 --- a/pkg/promlib/querydata/request_test.go +++ b/pkg/promlib/querydata/request_test.go @@ -472,7 +472,7 @@ func setup() (*testContext, error) { return nil, err } - queryData, _ := querydata.New(httpClient, settings, log.New()) + queryData, _ := querydata.New(httpClient, settings, log.New(), backend.FeatureToggles{}) return &testContext{ httpProvider: httpProvider,