Modules: Add registry (#70859)

This commit is contained in:
Todd Treece
2023-06-29 07:58:45 -04:00
committed by GitHub
parent 703bf4afcc
commit 8f975cfdb8
10 changed files with 213 additions and 48 deletions
+46
View File
@@ -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 := &registry{
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
}
+34
View File
@@ -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)
}
+8
View File
@@ -0,0 +1,8 @@
package registry
import "github.com/google/wire"
var WireSet = wire.NewSet(
ProvideRegistry,
wire.Bind(new(Registry), new(*registry)),
)