diff --git a/pkg/registry/apis/query/client.go b/pkg/registry/apis/query/client.go deleted file mode 100644 index 364e8e5cf9d..00000000000 --- a/pkg/registry/apis/query/client.go +++ /dev/null @@ -1,21 +0,0 @@ -package query - -import ( - "context" - - data "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1" - "github.com/grafana/grafana/pkg/registry/apis/query/clientapi" -) - -type CommonDataSourceClientSupplier struct { - Client clientapi.QueryDataClient -} - -func (s *CommonDataSourceClientSupplier) GetDataSourceClient(_ context.Context, _ data.DataSourceRef, _ map[string]string, _ clientapi.InstanceConfigurationSettings) (clientapi.QueryDataClient, error) { - return s.Client, nil -} - -func (s *CommonDataSourceClientSupplier) GetInstanceConfigurationSettings(_ context.Context) (clientapi.InstanceConfigurationSettings, error) { - // FIXME: for now it's an empty structure, we'll find a way to fill it correctly. - return clientapi.InstanceConfigurationSettings{}, nil -} diff --git a/pkg/registry/apis/query/client/plugin.go b/pkg/registry/apis/query/client/plugin.go index 728346bf865..3cd805919d1 100644 --- a/pkg/registry/apis/query/client/plugin.go +++ b/pkg/registry/apis/query/client/plugin.go @@ -64,7 +64,7 @@ var k8sNotFoundError error = &apierrors.StatusError{ } // NewQueryClientForPluginClient creates a client that delegates to the internal plugins.Client stack -func NewQueryClientForPluginClient(p plugins.Client, ctx *plugincontext.Provider, accessControl accesscontrol.AccessControl) clientapi.QueryDataClient { +func newQueryClientForPluginClient(p plugins.Client, ctx *plugincontext.Provider, accessControl accesscontrol.AccessControl) clientapi.QueryDataClient { return &pluginClient{ pluginClient: p, pCtxProvider: ctx, diff --git a/pkg/registry/apis/query/client/supplier.go b/pkg/registry/apis/query/client/supplier.go new file mode 100644 index 00000000000..08c462d466c --- /dev/null +++ b/pkg/registry/apis/query/client/supplier.go @@ -0,0 +1,44 @@ +package client + +import ( + "context" + + data "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1" + "github.com/grafana/grafana/pkg/plugins" + "github.com/grafana/grafana/pkg/registry/apis/query/clientapi" + "github.com/grafana/grafana/pkg/services/accesscontrol" + "github.com/grafana/grafana/pkg/services/featuremgmt" + "github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext" + "github.com/grafana/grafana/pkg/setting" +) + +type singleTenantClientSupplier struct { + client clientapi.QueryDataClient + features featuremgmt.FeatureToggles + cfg *setting.Cfg +} + +func NewSingleTenantClientSupplier(cfg *setting.Cfg, features featuremgmt.FeatureToggles, p plugins.Client, ctxProv *plugincontext.Provider, accessControl accesscontrol.AccessControl) clientapi.DataSourceClientSupplier { + return &singleTenantClientSupplier{ + cfg: cfg, + features: features, + client: newQueryClientForPluginClient(p, ctxProv, accessControl), + } +} + +func (s *singleTenantClientSupplier) GetDataSourceClient(_ context.Context, _ data.DataSourceRef, _ map[string]string, _ clientapi.InstanceConfigurationSettings) (clientapi.QueryDataClient, error) { + return s.client, nil +} + +func (s *singleTenantClientSupplier) GetInstanceConfigurationSettings(ctx context.Context) (clientapi.InstanceConfigurationSettings, error) { + return clientapi.InstanceConfigurationSettings{ + StackID: 0, + FeatureToggles: s.features, + FullConfig: nil, + Options: nil, + SQLExpressionCellLimit: s.cfg.SQLExpressionCellLimit, + SQLExpressionOutputCellLimit: s.cfg.SQLExpressionOutputCellLimit, + SQLExpressionTimeout: s.cfg.SQLExpressionTimeout, + ExpressionsEnabled: s.cfg.ExpressionsEnabled, + }, nil +} diff --git a/pkg/registry/apis/query/register.go b/pkg/registry/apis/query/register.go index bfb99a8cd8d..1efd3efdb2a 100644 --- a/pkg/registry/apis/query/register.go +++ b/pkg/registry/apis/query/register.go @@ -31,6 +31,7 @@ import ( "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" + "github.com/grafana/grafana/pkg/setting" ) var _ builder.APIGroupBuilder = (*QueryAPIBuilder)(nil) @@ -93,7 +94,9 @@ func NewQueryAPIBuilder( }, nil } -func RegisterAPIService(features featuremgmt.FeatureToggles, +func RegisterAPIService( + cfg *setting.Cfg, + features featuremgmt.FeatureToggles, apiregistration builder.APIRegistrar, dataSourcesService datasources.DataSourceService, pluginStore pluginstore.Store, @@ -126,9 +129,7 @@ func RegisterAPIService(features featuremgmt.FeatureToggles, builder, err := NewQueryAPIBuilder( features, - &CommonDataSourceClientSupplier{ - Client: client.NewQueryClientForPluginClient(pluginClient, pCtxProvider, accessControl), - }, + client.NewSingleTenantClientSupplier(cfg, features, pluginClient, pCtxProvider, accessControl), ar, client.NewDataSourceRegistryFromStore(pluginStore, dataSourcesService), registerer, diff --git a/pkg/server/wire_gen.go b/pkg/server/wire_gen.go index 9153346ef18..440ede3c8b9 100644 --- a/pkg/server/wire_gen.go +++ b/pkg/server/wire_gen.go @@ -740,7 +740,7 @@ func Initialize(cfg *setting.Cfg, opts Options, apiOpts api.ServerOptions) (*Ser return nil, err } legacyDataSourceLookup := service7.ProvideLegacyDataSourceLookup(service15) - queryAPIBuilder, err := query2.RegisterAPIService(featureToggles, apiserverService, service15, pluginstoreService, accessControl, middlewareHandler, plugincontextProvider, registerer, tracingService, legacyDataSourceLookup, exprService) + queryAPIBuilder, err := query2.RegisterAPIService(cfg, featureToggles, apiserverService, service15, pluginstoreService, accessControl, middlewareHandler, plugincontextProvider, registerer, tracingService, legacyDataSourceLookup, exprService) if err != nil { return nil, err } @@ -1298,7 +1298,7 @@ func InitializeForTest(t sqlutil.ITestDB, testingT interface { return nil, err } legacyDataSourceLookup := service7.ProvideLegacyDataSourceLookup(service15) - queryAPIBuilder, err := query2.RegisterAPIService(featureToggles, apiserverService, service15, pluginstoreService, accessControl, middlewareHandler, plugincontextProvider, registerer, tracingService, legacyDataSourceLookup, exprService) + queryAPIBuilder, err := query2.RegisterAPIService(cfg, featureToggles, apiserverService, service15, pluginstoreService, accessControl, middlewareHandler, plugincontextProvider, registerer, tracingService, legacyDataSourceLookup, exprService) if err != nil { return nil, err }