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'
This commit is contained in:
Gabriel MABILLE
2025-10-06 11:50:02 +02:00
committed by GitHub
parent 2d801eed3c
commit d6e362ade3
5 changed files with 35 additions and 3 deletions
+20
View File
@@ -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{}
}
+10 -1
View File
@@ -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)
}
+1 -1
View File
@@ -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,
+2 -1
View File
@@ -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
}
+2
View File
@@ -191,6 +191,8 @@ var wireExtsModuleServerSet = wire.NewSet(
// Unified storage
resource.ProvideStorageMetrics,
resource.ProvideIndexMetrics,
// Overriden by enterprise
ProvideNoopModuleRegisterer,
)
var wireExtsStandaloneAPIServerSet = wire.NewSet(