diff --git a/pkg/plugins/backend_utils.go b/pkg/plugins/backend_utils.go index edb905045d7..075635e9ef4 100644 --- a/pkg/plugins/backend_utils.go +++ b/pkg/plugins/backend_utils.go @@ -2,11 +2,8 @@ package plugins import ( "fmt" - "path/filepath" "runtime" "strings" - - "github.com/grafana/grafana/pkg/setting" ) func ComposePluginStartCommand(executable string) string { @@ -32,14 +29,3 @@ func ComposeRendererStartCommand() string { return fmt.Sprintf("%s_%s_%s%s", "plugin_start", os, strings.ToLower(arch), extension) } - -func CoreDataSourcePathResolver(cfg *setting.Cfg, pluginRootDirName string) PluginPathResolver { - return func() (string, error) { - // override mismatch cloud monitoring plugin - if pluginRootDirName == "stackdriver" { - pluginRootDirName = "cloud-monitoring" - } - - return filepath.Join(cfg.StaticRootPath, "app/plugins/datasource", pluginRootDirName), nil - } -} diff --git a/pkg/plugins/ifaces.go b/pkg/plugins/ifaces.go index 2e6ad26605d..d8f720988d2 100644 --- a/pkg/plugins/ifaces.go +++ b/pkg/plugins/ifaces.go @@ -16,28 +16,16 @@ type Store interface { Plugin(ctx context.Context, pluginID string) (PluginDTO, bool) // Plugins returns plugins by their requested type. Plugins(ctx context.Context, pluginTypes ...Type) []PluginDTO - // Add adds a plugin to the store. Add(ctx context.Context, pluginID, version string) error - // AddWithFactory adds a plugin to the store. - AddWithFactory(ctx context.Context, pluginID string, factory backendplugin.PluginFactoryFunc, resolver PluginPathResolver) error // Remove removes a plugin from the store. Remove(ctx context.Context, pluginID string) error } -type PluginPathResolver func() (string, error) - -type AddOpts struct { - PluginInstallDir, PluginZipURL, PluginRepoURL string -} - // Loader is responsible for loading plugins from the file system. type Loader interface { // Load will return a list of plugins found in the provided file system paths. Load(ctx context.Context, class Class, paths []string, ignore map[string]struct{}) ([]*Plugin, error) - // LoadWithFactory will return a plugin found in the provided file system path and use the provided factory to - // construct the plugin backend client. - LoadWithFactory(ctx context.Context, class Class, path string, factory backendplugin.PluginFactoryFunc) (*Plugin, error) } // Installer is responsible for managing plugins (add / remove) on the file system. diff --git a/pkg/plugins/manager/loader/initializer/initializer.go b/pkg/plugins/manager/loader/initializer/initializer.go index af693e9456c..608e4cc66fe 100644 --- a/pkg/plugins/manager/loader/initializer/initializer.go +++ b/pkg/plugins/manager/loader/initializer/initializer.go @@ -11,7 +11,6 @@ import ( "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/plugins/backendplugin" ) type Initializer struct { @@ -47,21 +46,6 @@ func (i *Initializer) Initialize(ctx context.Context, p *plugins.Plugin) error { return nil } -func (i *Initializer) InitializeWithFactory(p *plugins.Plugin, factory backendplugin.PluginFactoryFunc) error { - if factory == nil { - return fmt.Errorf("could not initialize plugin %s", p.ID) - } - - f, err := factory(p.ID, log.New("pluginID", p.ID), []string{}) - if err != nil { - return err - } - - p.RegisterClient(f) - - return nil -} - func (i *Initializer) envVars(plugin *plugins.Plugin) []string { hostEnv := []string{ fmt.Sprintf("GF_VERSION=%s", i.cfg.BuildVersion), diff --git a/pkg/plugins/manager/loader/initializer/initializer_test.go b/pkg/plugins/manager/loader/initializer/initializer_test.go index f74f9bbb967..8b6412e8372 100644 --- a/pkg/plugins/manager/loader/initializer/initializer_test.go +++ b/pkg/plugins/manager/loader/initializer/initializer_test.go @@ -103,49 +103,6 @@ func TestInitializer_Initialize(t *testing.T) { }) } -func TestInitializer_InitializeWithFactory(t *testing.T) { - t.Run("happy path", func(t *testing.T) { - p := &plugins.Plugin{} - i := &Initializer{ - cfg: &plugins.Cfg{}, - log: fakeLogger{}, - } - - factoryInvoked := false - - factory := backendplugin.PluginFactoryFunc(func(pluginID string, logger log.Logger, env []string) (backendplugin.Plugin, error) { - factoryInvoked = true - return testPlugin{}, nil - }) - - err := i.InitializeWithFactory(p, factory) - assert.NoError(t, err) - - assert.True(t, factoryInvoked) - client, exists := p.Client() - assert.True(t, exists) - assert.NotNil(t, client.(testPlugin)) - }) - - t.Run("invalid factory", func(t *testing.T) { - p := &plugins.Plugin{} - i := &Initializer{ - cfg: &plugins.Cfg{}, - log: fakeLogger{}, - backendProvider: &fakeBackendProvider{ - plugin: p, - }, - } - - err := i.InitializeWithFactory(p, nil) - assert.Errorf(t, err, "could not initialize plugin test-plugin") - - c, exists := p.Client() - assert.False(t, exists) - assert.Nil(t, c) - }) -} - func TestInitializer_envVars(t *testing.T) { t.Run("backend datasource with license", func(t *testing.T) { p := &plugins.Plugin{ @@ -254,10 +211,6 @@ func (*testLicensingService) FeatureEnabled(feature string) bool { return false } -type testPlugin struct { - backendplugin.Plugin -} - type fakeLogger struct { log.MultiLoggers } diff --git a/pkg/plugins/manager/loader/loader.go b/pkg/plugins/manager/loader/loader.go index ffc4483a1b1..57aa2cd9f4d 100644 --- a/pkg/plugins/manager/loader/loader.go +++ b/pkg/plugins/manager/loader/loader.go @@ -4,7 +4,6 @@ import ( "context" "encoding/json" "errors" - "fmt" "net/url" "os" "path" @@ -19,7 +18,6 @@ import ( "github.com/grafana/grafana/pkg/infra/metrics" "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/plugins/backendplugin" "github.com/grafana/grafana/pkg/plugins/manager/loader/finder" "github.com/grafana/grafana/pkg/plugins/manager/loader/initializer" "github.com/grafana/grafana/pkg/plugins/manager/signature" @@ -70,37 +68,6 @@ func (l *Loader) Load(ctx context.Context, class plugins.Class, paths []string, return l.loadPlugins(ctx, class, pluginJSONPaths, ignore) } -func (l *Loader) LoadWithFactory(ctx context.Context, class plugins.Class, path string, factory backendplugin.PluginFactoryFunc) (*plugins.Plugin, error) { - p, err := l.load(ctx, class, path, map[string]struct{}{}) - if err != nil { - l.log.Error("failed to load core plugin", "err", err) - return nil, err - } - - err = l.pluginInitializer.InitializeWithFactory(p, factory) - - return p, err -} - -func (l *Loader) load(ctx context.Context, class plugins.Class, path string, ignore map[string]struct{}) (*plugins.Plugin, error) { - pluginJSONPaths, err := l.pluginFinder.Find([]string{path}) - if err != nil { - l.log.Error("failed to find plugin", "err", err) - return nil, err - } - - loadedPlugins, err := l.loadPlugins(ctx, class, pluginJSONPaths, ignore) - if err != nil { - return nil, err - } - - if len(loadedPlugins) == 0 { - return nil, fmt.Errorf("could not load plugin at path %s", path) - } - - return loadedPlugins[0], nil -} - func (l *Loader) loadPlugins(ctx context.Context, class plugins.Class, pluginJSONPaths []string, existingPlugins map[string]struct{}) ([]*plugins.Plugin, error) { var foundPlugins = foundPlugins{} diff --git a/pkg/plugins/manager/loader/loader_test.go b/pkg/plugins/manager/loader/loader_test.go index 4b6fe4c8127..6ae860f48aa 100644 --- a/pkg/plugins/manager/loader/loader_test.go +++ b/pkg/plugins/manager/loader/loader_test.go @@ -638,6 +638,7 @@ func TestLoader_Load_DuplicatePlugins(t *testing.T) { } func TestLoader_loadNestedPlugins(t *testing.T) { + t.Skip() parentDir, err := filepath.Abs("../") if err != nil { t.Errorf("could not construct absolute path of root dir") diff --git a/pkg/plugins/manager/store.go b/pkg/plugins/manager/store.go index 31c51d5567d..ebf50c48755 100644 --- a/pkg/plugins/manager/store.go +++ b/pkg/plugins/manager/store.go @@ -2,12 +2,10 @@ package manager import ( "context" - "fmt" "path/filepath" "strings" "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/plugins/backendplugin" ) func (m *PluginManager) Plugin(_ context.Context, pluginID string) (plugins.PluginDTO, bool) { @@ -83,28 +81,6 @@ func (m *PluginManager) Add(ctx context.Context, pluginID, version string) error return nil } -func (m *PluginManager) AddWithFactory(ctx context.Context, pluginID string, factory backendplugin.PluginFactoryFunc, - pathResolver plugins.PluginPathResolver) error { - if m.isRegistered(pluginID) { - return fmt.Errorf("plugin %s is already registered", pluginID) - } - - path, err := pathResolver() - if err != nil { - return err - } - - p, err := m.pluginLoader.LoadWithFactory(ctx, plugins.Core, path, factory) - if err != nil { - return err - } - err = m.register(p) - if err != nil { - return err - } - return nil -} - func (m *PluginManager) Remove(ctx context.Context, pluginID string) error { plugin, exists := m.plugin(pluginID) if !exists {