mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
PluginManager: Increase DI priority (#32111)
* PluginManager: Increase DI priority Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com> * BackendPluginManager: Don't rely on Init Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com> * BackendPluginManager: Fix tests Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com> * Simplify code Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com> * Remove stale field Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com> * Simplify code Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com> Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
This commit is contained in:
parent
862cd473eb
commit
d3544d6df1
@ -27,7 +27,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
registry.RegisterServiceWithPriority(&manager{}, registry.MediumHigh)
|
registry.RegisterServiceWithPriority(&manager{
|
||||||
|
logger: log.New("plugins.backend"),
|
||||||
|
plugins: map[string]backendplugin.Plugin{},
|
||||||
|
}, registry.MediumHigh)
|
||||||
}
|
}
|
||||||
|
|
||||||
type manager struct {
|
type manager struct {
|
||||||
@ -37,14 +40,9 @@ type manager struct {
|
|||||||
pluginsMu sync.RWMutex
|
pluginsMu sync.RWMutex
|
||||||
plugins map[string]backendplugin.Plugin
|
plugins map[string]backendplugin.Plugin
|
||||||
logger log.Logger
|
logger log.Logger
|
||||||
pluginSettings map[string]pluginSettings
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manager) Init() error {
|
func (m *manager) Init() error {
|
||||||
m.plugins = make(map[string]backendplugin.Plugin)
|
|
||||||
m.logger = log.New("plugins.backend")
|
|
||||||
m.pluginSettings = extractPluginSettings(m.Cfg)
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,11 +63,6 @@ func (m *manager) Register(pluginID string, factory backendplugin.PluginFactoryF
|
|||||||
return fmt.Errorf("backend plugin %s already registered", pluginID)
|
return fmt.Errorf("backend plugin %s already registered", pluginID)
|
||||||
}
|
}
|
||||||
|
|
||||||
pluginSettings := pluginSettings{}
|
|
||||||
if ps, exists := m.pluginSettings[pluginID]; exists {
|
|
||||||
pluginSettings = ps
|
|
||||||
}
|
|
||||||
|
|
||||||
hostEnv := []string{
|
hostEnv := []string{
|
||||||
fmt.Sprintf("GF_VERSION=%s", m.Cfg.BuildVersion),
|
fmt.Sprintf("GF_VERSION=%s", m.Cfg.BuildVersion),
|
||||||
fmt.Sprintf("GF_EDITION=%s", m.License.Edition()),
|
fmt.Sprintf("GF_EDITION=%s", m.License.Edition()),
|
||||||
@ -89,7 +82,7 @@ func (m *manager) Register(pluginID string, factory backendplugin.PluginFactoryF
|
|||||||
}
|
}
|
||||||
|
|
||||||
hostEnv = append(hostEnv, m.getAWSEnvironmentVariables()...)
|
hostEnv = append(hostEnv, m.getAWSEnvironmentVariables()...)
|
||||||
|
pluginSettings := getPluginSettings(pluginID, m.Cfg)
|
||||||
env := pluginSettings.ToEnv("GF_PLUGIN", hostEnv)
|
env := pluginSettings.ToEnv("GF_PLUGIN", hostEnv)
|
||||||
|
|
||||||
pluginLogger := m.logger.New("pluginId", pluginID)
|
pluginLogger := m.logger.New("pluginId", pluginID)
|
||||||
|
@ -294,6 +294,8 @@ func newManagerScenario(t *testing.T, managed bool, fn func(t *testing.T, ctx *m
|
|||||||
Cfg: cfg,
|
Cfg: cfg,
|
||||||
License: license,
|
License: license,
|
||||||
PluginRequestValidator: validator,
|
PluginRequestValidator: validator,
|
||||||
|
logger: log.New("test"),
|
||||||
|
plugins: map[string]backendplugin.Plugin{},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,11 +20,9 @@ func (ps pluginSettings) ToEnv(prefix string, hostEnv []string) []string {
|
|||||||
return env
|
return env
|
||||||
}
|
}
|
||||||
|
|
||||||
func extractPluginSettings(cfg *setting.Cfg) map[string]pluginSettings {
|
func getPluginSettings(plugID string, cfg *setting.Cfg) pluginSettings {
|
||||||
psMap := map[string]pluginSettings{}
|
|
||||||
for pluginID, settings := range cfg.PluginSettings {
|
|
||||||
ps := pluginSettings{}
|
ps := pluginSettings{}
|
||||||
for k, v := range settings {
|
for k, v := range cfg.PluginSettings[plugID] {
|
||||||
if k == "path" || strings.ToLower(k) == "id" {
|
if k == "path" || strings.ToLower(k) == "id" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -32,8 +30,5 @@ func extractPluginSettings(cfg *setting.Cfg) map[string]pluginSettings {
|
|||||||
ps[k] = v
|
ps[k] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
psMap[pluginID] = ps
|
return ps
|
||||||
}
|
|
||||||
|
|
||||||
return psMap
|
|
||||||
}
|
}
|
||||||
|
@ -19,25 +19,24 @@ func TestPluginSettings(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
ps := extractPluginSettings(cfg)
|
ps := getPluginSettings("plugin", cfg)
|
||||||
require.Len(t, ps, 1)
|
require.Len(t, ps, 2)
|
||||||
require.Len(t, ps["plugin"], 2)
|
|
||||||
|
|
||||||
t.Run("Should skip path setting", func(t *testing.T) {
|
t.Run("Should skip path setting", func(t *testing.T) {
|
||||||
cfg.PluginSettings["plugin"]["path"] = "value"
|
cfg.PluginSettings["plugin"]["path"] = "value"
|
||||||
ps := extractPluginSettings(cfg)
|
ps := getPluginSettings("plugin", cfg)
|
||||||
require.Len(t, ps["plugin"], 2)
|
require.Len(t, ps, 2)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Should skip id setting", func(t *testing.T) {
|
t.Run("Should skip id setting", func(t *testing.T) {
|
||||||
cfg.PluginSettings["plugin"]["id"] = "value"
|
cfg.PluginSettings["plugin"]["id"] = "value"
|
||||||
ps := extractPluginSettings(cfg)
|
ps := getPluginSettings("plugin", cfg)
|
||||||
require.Len(t, ps["plugin"], 2)
|
require.Len(t, ps, 2)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Should return expected environment variables from plugin settings ", func(t *testing.T) {
|
t.Run("Should return expected environment variables from plugin settings ", func(t *testing.T) {
|
||||||
ps := extractPluginSettings(cfg)
|
ps := getPluginSettings("plugin", cfg)
|
||||||
env := ps["plugin"].ToEnv("GF_PLUGIN", []string{"GF_VERSION=6.7.0"})
|
env := ps.ToEnv("GF_PLUGIN", []string{"GF_VERSION=6.7.0"})
|
||||||
sort.Strings(env)
|
sort.Strings(env)
|
||||||
require.Len(t, env, 3)
|
require.Len(t, env, 3)
|
||||||
require.EqualValues(t, []string{"GF_PLUGIN_KEY1=value1", "GF_PLUGIN_KEY2=value2", "GF_VERSION=6.7.0"}, env)
|
require.EqualValues(t, []string{"GF_PLUGIN_KEY1=value1", "GF_PLUGIN_KEY2=value2", "GF_VERSION=6.7.0"}, env)
|
||||||
|
@ -70,6 +70,7 @@ func init() {
|
|||||||
registry.Register(®istry.Descriptor{
|
registry.Register(®istry.Descriptor{
|
||||||
Name: "PluginManager",
|
Name: "PluginManager",
|
||||||
Instance: newManager(nil),
|
Instance: newManager(nil),
|
||||||
|
InitPriority: registry.MediumHigh,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user