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:
@@ -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{}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -191,6 +191,8 @@ var wireExtsModuleServerSet = wire.NewSet(
|
||||
// Unified storage
|
||||
resource.ProvideStorageMetrics,
|
||||
resource.ProvideIndexMetrics,
|
||||
// Overriden by enterprise
|
||||
ProvideNoopModuleRegisterer,
|
||||
)
|
||||
|
||||
var wireExtsStandaloneAPIServerSet = wire.NewSet(
|
||||
|
||||
Reference in New Issue
Block a user