Modules: Add registry (#70859)
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
package registry
|
||||
|
||||
import (
|
||||
"github.com/grafana/dskit/services"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
"github.com/grafana/grafana/pkg/modules"
|
||||
)
|
||||
|
||||
type Registry interface{}
|
||||
|
||||
type registry struct {
|
||||
moduleManager modules.Manager
|
||||
log log.Logger
|
||||
}
|
||||
|
||||
func ProvideRegistry(
|
||||
moduleManager modules.Manager,
|
||||
) *registry {
|
||||
return newRegistry(
|
||||
log.New("modules.registry"),
|
||||
moduleManager,
|
||||
)
|
||||
}
|
||||
|
||||
func newRegistry(logger log.Logger, moduleManager modules.Manager, svcs ...services.NamedService) *registry {
|
||||
r := ®istry{
|
||||
log: logger,
|
||||
moduleManager: moduleManager,
|
||||
}
|
||||
|
||||
// Register (invisible) modules which act solely as dependencies to module targets
|
||||
for _, svc := range svcs {
|
||||
s := svc
|
||||
logger.Debug("Registering invisible module", "name", s.ServiceName())
|
||||
r.moduleManager.RegisterInvisibleModule(s.ServiceName(), func() (services.Service, error) {
|
||||
return s, nil
|
||||
})
|
||||
}
|
||||
|
||||
// Register module targets
|
||||
logger.Debug("Registering module", "name", modules.All)
|
||||
r.moduleManager.RegisterModule(modules.All, nil)
|
||||
|
||||
return r
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package registry
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/grafana/dskit/services"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
"github.com/grafana/grafana/pkg/modules"
|
||||
)
|
||||
|
||||
func TestRegistry(t *testing.T) {
|
||||
var registeredInvisibleModules []string
|
||||
var registeredModules []string
|
||||
|
||||
moduleManager := &modules.MockModuleManager{
|
||||
RegisterModuleFunc: func(name string, initFn func() (services.Service, error)) {
|
||||
registeredModules = append(registeredModules, name)
|
||||
},
|
||||
RegisterInvisibleModuleFunc: func(name string, initFn func() (services.Service, error)) {
|
||||
registeredInvisibleModules = append(registeredInvisibleModules, name)
|
||||
},
|
||||
}
|
||||
|
||||
mockSvcName := "test-registry"
|
||||
mockSvc := modules.NewMockNamedService(mockSvcName)
|
||||
|
||||
r := newRegistry(log.New("modules.registry"), moduleManager, mockSvc)
|
||||
require.NotNil(t, r)
|
||||
require.Equal(t, []string{mockSvcName}, registeredInvisibleModules)
|
||||
require.Equal(t, []string{modules.All}, registeredModules)
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package registry
|
||||
|
||||
import "github.com/google/wire"
|
||||
|
||||
var WireSet = wire.NewSet(
|
||||
ProvideRegistry,
|
||||
wire.Bind(new(Registry), new(*registry)),
|
||||
)
|
||||
Reference in New Issue
Block a user