From d6e362ade32c655abc3105b634d7661bc200f453 Mon Sep 17 00:00:00 2001 From: Gabriel MABILLE Date: Mon, 6 Oct 2025 11:50:02 +0200 Subject: [PATCH] Server: Add possibility to register build-specific targets (#111988) * Server: Add possibility to register Enterprise targets * wip authz service * Restore vscode * Better comment * Better comment v2' --- pkg/server/module_registerer.go | 20 ++++++++++++++++++++ pkg/server/module_server.go | 11 ++++++++++- pkg/server/search_server_distributor_test.go | 2 +- pkg/server/wire_gen.go | 3 ++- pkg/server/wireexts_oss.go | 2 ++ 5 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 pkg/server/module_registerer.go diff --git a/pkg/server/module_registerer.go b/pkg/server/module_registerer.go new file mode 100644 index 00000000000..8a459588937 --- /dev/null +++ b/pkg/server/module_registerer.go @@ -0,0 +1,20 @@ +package server + +import ( + "github.com/grafana/grafana/pkg/modules" +) + +// ModuleRegisterer is used to inject enterprise dskit modules into +// the module manager. This abstraction allows other builds (e.g. enterprise) to register +// additional modules while keeping the core server decoupled from build-specific dependencies. +type ModuleRegisterer interface { + RegisterModules(manager modules.Registry) +} + +type noopModuleRegisterer struct{} + +func (noopModuleRegisterer) RegisterModules(manager modules.Registry) {} + +func ProvideNoopModuleRegisterer() ModuleRegisterer { + return &noopModuleRegisterer{} +} diff --git a/pkg/server/module_server.go b/pkg/server/module_server.go index 5c1517d354d..5c420b9d219 100644 --- a/pkg/server/module_server.go +++ b/pkg/server/module_server.go @@ -44,8 +44,9 @@ func NewModule(opts Options, promGatherer prometheus.Gatherer, tracer tracing.Tracer, // Ensures tracing is initialized license licensing.Licensing, + moduleRegisterer ModuleRegisterer, ) (*ModuleServer, error) { - s, err := newModuleServer(opts, apiOpts, features, cfg, storageMetrics, indexMetrics, reg, promGatherer, license) + s, err := newModuleServer(opts, apiOpts, features, cfg, storageMetrics, indexMetrics, reg, promGatherer, license, moduleRegisterer) if err != nil { return nil, err } @@ -66,6 +67,7 @@ func newModuleServer(opts Options, reg prometheus.Registerer, promGatherer prometheus.Gatherer, license licensing.Licensing, + moduleRegisterer ModuleRegisterer, ) (*ModuleServer, error) { rootCtx, shutdownFn := context.WithCancel(context.Background()) @@ -87,6 +89,7 @@ func newModuleServer(opts Options, promGatherer: promGatherer, registerer: reg, license: license, + moduleRegisterer: moduleRegisterer, } return s, nil @@ -124,6 +127,9 @@ type ModuleServer struct { httpServerRouter *mux.Router searchServerRing *ring.Ring searchServerRingClientPool *ringclient.Pool + + // moduleRegisterer allows registration of modules provided by other builds (e.g. enterprise). + moduleRegisterer ModuleRegisterer } // init initializes the server and its services. @@ -202,6 +208,9 @@ func (s *ModuleServer) Run() error { m.RegisterModule(modules.All, nil) + // Register modules provided by other builds (e.g. enterprise). + s.moduleRegisterer.RegisterModules(m) + return m.Run(s.context) } diff --git a/pkg/server/search_server_distributor_test.go b/pkg/server/search_server_distributor_test.go index 18b5431ed89..e7304876688 100644 --- a/pkg/server/search_server_distributor_test.go +++ b/pkg/server/search_server_distributor_test.go @@ -326,7 +326,7 @@ func initModuleServerForTest( ) testModuleServer { tracer := tracing.InitializeTracerForTest() - ms, err := NewModule(opts, apiOpts, featuremgmt.WithFeatures(featuremgmt.FlagUnifiedStorageSearch), cfg, nil, nil, prometheus.NewRegistry(), prometheus.DefaultGatherer, tracer, nil) + ms, err := NewModule(opts, apiOpts, featuremgmt.WithFeatures(featuremgmt.FlagUnifiedStorageSearch), cfg, nil, nil, prometheus.NewRegistry(), prometheus.DefaultGatherer, tracer, nil, ProvideNoopModuleRegisterer()) require.NoError(t, err) conn, err := grpc.NewClient(cfg.GRPCServer.Address, diff --git a/pkg/server/wire_gen.go b/pkg/server/wire_gen.go index bcbb569df18..005ee68b230 100644 --- a/pkg/server/wire_gen.go +++ b/pkg/server/wire_gen.go @@ -1621,7 +1621,8 @@ func InitializeModuleServer(cfg *setting.Cfg, opts Options, apiOpts api.ServerOp } hooksService := hooks.ProvideService() ossLicensingService := licensing.ProvideService(cfg, hooksService) - moduleServer, err := NewModule(opts, apiOpts, featureToggles, cfg, storageMetrics, bleveIndexMetrics, registerer, gatherer, tracingService, ossLicensingService) + moduleRegisterer := ProvideNoopModuleRegisterer() + moduleServer, err := NewModule(opts, apiOpts, featureToggles, cfg, storageMetrics, bleveIndexMetrics, registerer, gatherer, tracingService, ossLicensingService, moduleRegisterer) if err != nil { return nil, err } diff --git a/pkg/server/wireexts_oss.go b/pkg/server/wireexts_oss.go index 5ba3b26347f..6b2163f4e34 100644 --- a/pkg/server/wireexts_oss.go +++ b/pkg/server/wireexts_oss.go @@ -191,6 +191,8 @@ var wireExtsModuleServerSet = wire.NewSet( // Unified storage resource.ProvideStorageMetrics, resource.ProvideIndexMetrics, + // Overriden by enterprise + ProvideNoopModuleRegisterer, ) var wireExtsStandaloneAPIServerSet = wire.NewSet(