datasources: querier: handle single-tenant instance config (#108469)

This commit is contained in:
Gábor Farkas 2025-07-28 11:40:26 +02:00 committed by GitHub
parent 15f291aa8e
commit 8d48dbce66
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 52 additions and 28 deletions

View File

@ -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
}

View File

@ -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,

View File

@ -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
}

View File

@ -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,

View File

@ -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
}