diff --git a/pkg/registry/apis/query/client/instance_provider.go b/pkg/registry/apis/query/client/instance_provider.go index 8716ae5a41c..96769229daf 100644 --- a/pkg/registry/apis/query/client/instance_provider.go +++ b/pkg/registry/apis/query/client/instance_provider.go @@ -25,7 +25,7 @@ type singleTenantInstance struct { cfg *setting.Cfg } -func (t *singleTenantInstance) GetDataSourceClient(_ context.Context, _ data.DataSourceRef, _ map[string]string) (clientapi.QueryDataClient, error) { +func (t *singleTenantInstance) GetDataSourceClient(_ context.Context, _ data.DataSourceRef) (clientapi.QueryDataClient, error) { return t.client, nil } @@ -37,7 +37,7 @@ func NewSingleTenantInstanceProvider(cfg *setting.Cfg, features featuremgmt.Feat } } -func (s *singleTenantInstanceProvider) GetInstance(_ context.Context) (clientapi.Instance, error) { +func (s *singleTenantInstanceProvider) GetInstance(_ context.Context, _ map[string]string) (clientapi.Instance, error) { return &singleTenantInstance{ client: s.client, features: s.features, @@ -59,3 +59,7 @@ func (s *singleTenantInstance) GetLogger(parent log.Logger) log.Logger { // currently we do not add any extra info return parent.New() } + +func (s *singleTenantInstance) ReportMetrics() { + // we do not report any metrics currently +} diff --git a/pkg/registry/apis/query/clientapi/clientapi.go b/pkg/registry/apis/query/clientapi/clientapi.go index 46f9167199b..c35e28a4b9e 100644 --- a/pkg/registry/apis/query/clientapi/clientapi.go +++ b/pkg/registry/apis/query/clientapi/clientapi.go @@ -29,12 +29,13 @@ type InstanceConfigurationSettings struct { } type Instance interface { - GetDataSourceClient(ctx context.Context, ref data.DataSourceRef, headers map[string]string) (QueryDataClient, error) + GetDataSourceClient(ctx context.Context, ref data.DataSourceRef) (QueryDataClient, error) // fetch information on the grafana instance (e.g. feature toggles) GetSettings() InstanceConfigurationSettings GetLogger(parent log.Logger) log.Logger + ReportMetrics() // some metrics are only reported at the end } type InstanceProvider interface { - GetInstance(ctx context.Context) (Instance, error) + GetInstance(ctx context.Context, headers map[string]string) (Instance, error) } diff --git a/pkg/registry/apis/query/query.go b/pkg/registry/apis/query/query.go index ae202728a0d..f2b574de933 100644 --- a/pkg/registry/apis/query/query.go +++ b/pkg/registry/apis/query/query.go @@ -246,7 +246,7 @@ func handleQuery(ctx context.Context, raw query.QueryDataRequest, b QueryAPIBuil headers := ExtractKnownHeaders(httpreq.Header) - instance, err := b.instanceProvider.GetInstance(ctx) + instance, err := b.instanceProvider.GetInstance(ctx, headers) if err != nil { connectLogger.Error("failed to get instance configuration settings", "err", err) responder.Error(err) @@ -260,7 +260,6 @@ func handleQuery(ctx context.Context, raw query.QueryDataRequest, b QueryAPIBuil mtDsClientBuilder := mtdsclient.NewMtDatasourceClientBuilderWithInstance( instance, ctx, - headers, dsQuerierLoggerWithSlug, ) @@ -281,6 +280,10 @@ func handleQuery(ctx context.Context, raw query.QueryDataRequest, b QueryAPIBuil qdr, err := service.QueryData(ctx, dsQuerierLoggerWithSlug, cache, exprService, mReq, mtDsClientBuilder, headers) + // tell the `instance` structure that it can now report + // metrics that are only reported once during a request + instance.ReportMetrics() + if err != nil { return qdr, err } diff --git a/pkg/registry/apis/query/query_test.go b/pkg/registry/apis/query/query_test.go index cd74c0dca0f..a1861361b11 100644 --- a/pkg/registry/apis/query/query_test.go +++ b/pkg/registry/apis/query/query_test.go @@ -250,18 +250,21 @@ type mockClient struct { stubbedFrame *data.Frame } -func (m mockClient) GetInstance(ctx context.Context) (clientapi.Instance, error) { +func (m mockClient) GetInstance(ctx context.Context, headers map[string]string) (clientapi.Instance, error) { mclient := mockClient{ stubbedFrame: m.stubbedFrame, } return mclient, nil } +func (m mockClient) ReportMetrics() { +} + func (m mockClient) GetLogger(parent log.Logger) log.Logger { return parent.New() } -func (m mockClient) GetDataSourceClient(ctx context.Context, ref dataapi.DataSourceRef, headers map[string]string) (clientapi.QueryDataClient, error) { +func (m mockClient) GetDataSourceClient(ctx context.Context, ref dataapi.DataSourceRef) (clientapi.QueryDataClient, error) { mclient := mockClient{ stubbedFrame: m.stubbedFrame, } diff --git a/pkg/services/mtdsclient/mt_datasource_client_builder.go b/pkg/services/mtdsclient/mt_datasource_client_builder.go index 3c964aeefd1..5125b975cba 100644 --- a/pkg/services/mtdsclient/mt_datasource_client_builder.go +++ b/pkg/services/mtdsclient/mt_datasource_client_builder.go @@ -26,7 +26,6 @@ func NewNullMTDatasourceClientBuilder() MTDatasourceClientBuilder { type MtDatasourceClientBuilderWithInstance struct { instance clientapi.Instance ctx context.Context - headers map[string]string logger log.Logger } @@ -37,7 +36,6 @@ func (b *MtDatasourceClientBuilderWithInstance) BuildClient(pluginId string, uid Type: pluginId, UID: uid, }, - b.headers, ) if err != nil { b.logger.Debug("failed to get mt ds client", "error", err) @@ -50,13 +48,11 @@ func (b *MtDatasourceClientBuilderWithInstance) BuildClient(pluginId string, uid func NewMtDatasourceClientBuilderWithInstance( instance clientapi.Instance, ctx context.Context, - headers map[string]string, logger log.Logger, ) MTDatasourceClientBuilder { return &MtDatasourceClientBuilderWithInstance{ instance: instance, ctx: ctx, - headers: headers, logger: logger, } }