Chore: Add grafana-apiserver (#70721)

* add grafana-apiserver
* remove watchset & move provisioning and http server to background
services
* remove scheme
* otel fixes (#70874)
* remove module ProvideRegistry test
* use certgenerator from apiserver package
* Control collector/pdata from going to v1.0.0-rc8 (as Tempo 1.5.1 would have it)
This commit is contained in:
Todd Treece
2023-07-14 12:22:10 -07:00
committed by GitHub
parent 8ced4343f3
commit 52121b7165
25 changed files with 690 additions and 838 deletions
+44 -1
View File
@@ -3,11 +3,13 @@ package modules
import (
"context"
"errors"
"fmt"
"github.com/grafana/dskit/modules"
"github.com/grafana/dskit/services"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/systemd"
)
@@ -35,9 +37,14 @@ type service struct {
moduleManager *modules.Manager
serviceManager *services.Manager
serviceMap map[string]services.Service
features *featuremgmt.FeatureManager
}
func ProvideService(cfg *setting.Cfg) *service {
func ProvideService(
cfg *setting.Cfg,
features *featuremgmt.FeatureManager,
) *service {
logger := log.New("modules")
return &service{
@@ -47,6 +54,8 @@ func ProvideService(cfg *setting.Cfg) *service {
moduleManager: modules.NewManager(logger),
serviceMap: map[string]services.Service{},
features: features,
}
}
@@ -54,6 +63,11 @@ func ProvideService(cfg *setting.Cfg) *service {
func (m *service) Init(_ context.Context) error {
var err error
if err = m.processFeatureFlags(); err != nil {
return err
}
m.log.Debug("Initializing module manager", "targets", m.targets)
for mod, targets := range dependencyMap {
if err := m.moduleManager.AddDependency(mod, targets...); err != nil {
return err
@@ -93,6 +107,7 @@ func (m *service) Run(ctx context.Context) error {
listener := newServiceListener(m.log, m)
m.serviceManager.AddListener(listener)
m.log.Debug("Starting module service manager")
// wait until a service fails or stop signal was received
err := m.serviceManager.StartAsync(ctx)
if err != nil {
@@ -149,3 +164,31 @@ func (m *service) RegisterInvisibleModule(name string, initFn func() (services.S
func (m *service) IsModuleEnabled(name string) bool {
return stringsContain(m.targets, name)
}
// processFeatureFlags adds or removes targets based on feature flags.
func (m *service) processFeatureFlags() error {
// add GrafanaAPIServer to targets if feature is enabled
if m.features.IsEnabled(featuremgmt.FlagGrafanaAPIServer) {
m.targets = append(m.targets, GrafanaAPIServer)
}
if !m.features.IsEnabled(featuremgmt.FlagGrafanaAPIServer) {
// error if GrafanaAPIServer is in targets
for _, t := range m.targets {
if t == GrafanaAPIServer {
return fmt.Errorf("feature flag %s is disabled, but target %s is still enabled", featuremgmt.FlagGrafanaAPIServer, GrafanaAPIServer)
}
}
// error if GrafanaAPIServer is a dependency of a target
for parent, targets := range dependencyMap {
for _, t := range targets {
if t == GrafanaAPIServer && m.IsModuleEnabled(parent) {
return fmt.Errorf("feature flag %s is disabled, but target %s is enabled with dependency on %s", featuremgmt.FlagGrafanaAPIServer, parent, GrafanaAPIServer)
}
}
}
}
return nil
}