From e855efb13de80615d14bdcbf11b64a8ab5b74260 Mon Sep 17 00:00:00 2001 From: Will Browne Date: Mon, 11 Sep 2023 13:59:24 +0200 Subject: [PATCH] Plugins: Move store and plugin dto to pluginsintegration (#74655) move store and plugin dto --- pkg/api/apierrors/dashboard.go | 4 +- pkg/api/dashboard_test.go | 8 +- pkg/api/datasources_test.go | 6 +- pkg/api/frontendsettings.go | 5 +- pkg/api/frontendsettings_test.go | 26 +++---- pkg/api/http_server.go | 5 +- pkg/api/metrics_test.go | 14 ++-- pkg/api/plugins.go | 7 +- pkg/api/plugins_test.go | 6 +- pkg/expr/dataplane_test.go | 6 +- pkg/expr/service_test.go | 6 +- .../usagestats/statscollector/service.go | 5 +- .../usagestats/statscollector/service_test.go | 8 +- pkg/infra/usagestats/validator/impl.go | 6 +- pkg/plugins/ifaces.go | 8 -- pkg/plugins/manager/fakes/fakes.go | 31 -------- .../manager/loader/finder/local_test.go | 19 +---- pkg/plugins/plugins.go | 67 ---------------- .../backgroundsvcs/background_services.go | 2 +- pkg/server/wire.go | 2 +- pkg/services/dashboardimport/api/api.go | 6 +- .../dashboardimport/service/service.go | 4 +- .../datasourceproxy/datasourceproxy.go | 6 +- .../datasourceproxy/datasourceproxy_test.go | 4 +- pkg/services/live/live.go | 5 +- pkg/services/navtree/navtreeimpl/applinks.go | 7 +- .../navtree/navtreeimpl/applinks_test.go | 18 ++--- pkg/services/navtree/navtreeimpl/navtree.go | 6 +- pkg/services/ngalert/eval/eval.go | 5 +- pkg/services/ngalert/eval/eval_test.go | 16 ++-- pkg/services/ngalert/ngalert.go | 6 +- .../ngalert/schedule/schedule_unit_test.go | 4 +- pkg/services/ngalert/tests/util.go | 4 +- .../service/dashboard_updater.go | 10 +-- .../service/dashboard_updater_test.go | 27 +++---- .../plugindashboards/service/service.go | 2 +- .../plugindashboards/service/service_test.go | 2 +- .../dashboards/filestore.go | 5 +- .../dashboards/filestore_test.go | 6 +- .../pluginsintegration}/dashboards/ifaces.go | 0 .../plugincontext/plugincontext.go | 6 +- .../plugins_integration_test.go | 12 +-- .../pluginsintegration/pluginsintegration.go | 12 +-- .../pluginsintegration/pluginstore/fake.go | 38 +++++++++ .../pluginsintegration/pluginstore/plugins.go | 78 +++++++++++++++++++ .../pluginsintegration/pluginstore}/store.go | 24 ++++-- .../pluginstore}/store_test.go | 23 ++++-- .../pluginsintegration/test_helper.go | 6 +- .../provisioning/plugins/config_reader.go | 6 +- .../plugins/config_reader_test.go | 8 +- .../plugins/plugin_provisioner.go | 4 +- pkg/services/provisioning/provisioning.go | 10 +-- .../publicdashboards/api/common_test.go | 6 +- pkg/services/query/query_test.go | 6 +- pkg/services/quota/quotaimpl/quota_test.go | 4 +- pkg/services/store/resolver/ds_cache.go | 4 +- pkg/services/store/resolver/service.go | 5 +- pkg/services/store/resolver/service_test.go | 13 ++-- .../supportbundlesimpl/collectors.go | 3 +- .../supportbundlesimpl/service.go | 6 +- pkg/services/updatechecker/plugins.go | 12 +-- pkg/services/updatechecker/plugins_test.go | 18 ++--- pkg/tsdb/legacydata/service/service_test.go | 6 +- 63 files changed, 359 insertions(+), 335 deletions(-) rename pkg/{plugins/manager => services/pluginsintegration}/dashboards/filestore.go (91%) rename pkg/{plugins/manager => services/pluginsintegration}/dashboards/filestore_test.go (96%) rename pkg/{plugins/manager => services/pluginsintegration}/dashboards/ifaces.go (100%) create mode 100644 pkg/services/pluginsintegration/pluginstore/fake.go create mode 100644 pkg/services/pluginsintegration/pluginstore/plugins.go rename pkg/{plugins/manager/store => services/pluginsintegration/pluginstore}/store.go (86%) rename pkg/{plugins/manager/store => services/pluginsintegration/pluginstore}/store_test.go (93%) diff --git a/pkg/api/apierrors/dashboard.go b/pkg/api/apierrors/dashboard.go index 5ce72dabeab..6b80347e012 100644 --- a/pkg/api/apierrors/dashboard.go +++ b/pkg/api/apierrors/dashboard.go @@ -7,14 +7,14 @@ import ( "net/http" "github.com/grafana/grafana/pkg/api/response" - "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/services/alerting" "github.com/grafana/grafana/pkg/services/dashboards" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/util" ) // ToDashboardErrorResponse returns a different response status according to the dashboard error type -func ToDashboardErrorResponse(ctx context.Context, pluginStore plugins.Store, err error) response.Response { +func ToDashboardErrorResponse(ctx context.Context, pluginStore pluginstore.Store, err error) response.Response { var dashboardErr dashboards.DashboardErr if ok := errors.As(err, &dashboardErr); ok { if body := dashboardErr.Body(); body != nil { diff --git a/pkg/api/dashboard_test.go b/pkg/api/dashboard_test.go index 553117fa006..3d36073a946 100644 --- a/pkg/api/dashboard_test.go +++ b/pkg/api/dashboard_test.go @@ -25,7 +25,6 @@ import ( "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/infra/usagestats" - "github.com/grafana/grafana/pkg/plugins/manager/fakes" "github.com/grafana/grafana/pkg/registry/corekind" "github.com/grafana/grafana/pkg/services/accesscontrol" "github.com/grafana/grafana/pkg/services/accesscontrol/acimpl" @@ -49,6 +48,7 @@ import ( "github.com/grafana/grafana/pkg/services/librarypanels" "github.com/grafana/grafana/pkg/services/live" "github.com/grafana/grafana/pkg/services/org" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" pref "github.com/grafana/grafana/pkg/services/preference" "github.com/grafana/grafana/pkg/services/preference/preftest" "github.com/grafana/grafana/pkg/services/provisioning" @@ -76,7 +76,7 @@ func TestGetHomeDashboard(t *testing.T) { hs := &HTTPServer{ Cfg: cfg, - pluginStore: &fakes.FakePluginStore{}, + pluginStore: &pluginstore.FakePluginStore{}, SQLStore: dbtest.NewFakeDB(), preferenceService: prefService, dashboardVersionService: dashboardVersionService, @@ -782,7 +782,7 @@ func TestDashboardVersionsAPIEndpoint(t *testing.T) { getHS := func(userSvc *usertest.FakeUserService) *HTTPServer { return &HTTPServer{ Cfg: cfg, - pluginStore: &fakes.FakePluginStore{}, + pluginStore: &pluginstore.FakePluginStore{}, SQLStore: mockSQLStore, AccessControl: accesscontrolmock.New(), Features: featuremgmt.WithFeatures(), @@ -976,7 +976,7 @@ func postDashboardScenario(t *testing.T, desc string, url string, routePattern s ProvisioningService: provisioning.NewProvisioningServiceMock(context.Background()), Live: newTestLive(t, db.InitTestDB(t)), QuotaService: quotatest.New(false, nil), - pluginStore: &fakes.FakePluginStore{}, + pluginStore: &pluginstore.FakePluginStore{}, LibraryPanelService: &mockLibraryPanelService{}, LibraryElementService: &mockLibraryElementService{}, DashboardService: dashboardService, diff --git a/pkg/api/datasources_test.go b/pkg/api/datasources_test.go index 9d59a94fee7..f7fec1d0381 100644 --- a/pkg/api/datasources_test.go +++ b/pkg/api/datasources_test.go @@ -15,13 +15,13 @@ import ( "github.com/grafana/grafana/pkg/api/routing" "github.com/grafana/grafana/pkg/components/simplejson" "github.com/grafana/grafana/pkg/infra/db/dbtest" - "github.com/grafana/grafana/pkg/plugins/manager/fakes" ac "github.com/grafana/grafana/pkg/services/accesscontrol" "github.com/grafana/grafana/pkg/services/accesscontrol/acimpl" "github.com/grafana/grafana/pkg/services/accesscontrol/actest" contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model" "github.com/grafana/grafana/pkg/services/datasources" "github.com/grafana/grafana/pkg/services/datasources/guardian" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/web" "github.com/grafana/grafana/pkg/web/webtest" @@ -47,7 +47,7 @@ func TestDataSourcesProxy_userLoggedIn(t *testing.T) { // handler func being tested hs := &HTTPServer{ Cfg: setting.NewCfg(), - pluginStore: &fakes.FakePluginStore{}, + pluginStore: &pluginstore.FakePluginStore{}, DataSourcesService: &dataSourcesServiceMock{ expectedDatasources: ds, }, @@ -71,7 +71,7 @@ func TestDataSourcesProxy_userLoggedIn(t *testing.T) { // handler func being tested hs := &HTTPServer{ Cfg: setting.NewCfg(), - pluginStore: &fakes.FakePluginStore{}, + pluginStore: &pluginstore.FakePluginStore{}, } sc.handlerFunc = hs.DeleteDataSourceByName sc.fakeReqWithParams("DELETE", sc.url, map[string]string{}).exec() diff --git a/pkg/api/frontendsettings.go b/pkg/api/frontendsettings.go index 4341c614ffc..1fffa2a20b1 100644 --- a/pkg/api/frontendsettings.go +++ b/pkg/api/frontendsettings.go @@ -14,6 +14,7 @@ import ( "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/licensing" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/secrets/kvstore" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/tsdb/grafanads" @@ -426,7 +427,7 @@ func (hs *HTTPServer) getFSDataSources(c *contextmodel.ReqContext, availablePlug return dataSources, nil } -func newAppDTO(plugin plugins.PluginDTO, settings pluginsettings.InfoDTO) *plugins.AppDTO { +func newAppDTO(plugin pluginstore.Plugin, settings pluginsettings.InfoDTO) *plugins.AppDTO { app := &plugins.AppDTO{ ID: plugin.ID, Version: plugin.Info.Version, @@ -484,7 +485,7 @@ func getPanelSort(id string) int { } type availablePluginDTO struct { - Plugin plugins.PluginDTO + Plugin pluginstore.Plugin Settings pluginsettings.InfoDTO } diff --git a/pkg/api/frontendsettings_test.go b/pkg/api/frontendsettings_test.go index 79206bd99e8..5d40f01f790 100644 --- a/pkg/api/frontendsettings_test.go +++ b/pkg/api/frontendsettings_test.go @@ -17,12 +17,12 @@ import ( "github.com/grafana/grafana/pkg/login/social" "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/plugins/config" - "github.com/grafana/grafana/pkg/plugins/manager/fakes" "github.com/grafana/grafana/pkg/plugins/pluginscdn" accesscontrolmock "github.com/grafana/grafana/pkg/services/accesscontrol/mock" "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/licensing" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/rendering" "github.com/grafana/grafana/pkg/services/supportbundles/supportbundlestest" "github.com/grafana/grafana/pkg/services/updatechecker" @@ -30,7 +30,7 @@ import ( "github.com/grafana/grafana/pkg/web" ) -func setupTestEnvironment(t *testing.T, cfg *setting.Cfg, features *featuremgmt.FeatureManager, pstore plugins.Store, psettings pluginsettings.Service) (*web.Mux, *HTTPServer) { +func setupTestEnvironment(t *testing.T, cfg *setting.Cfg, features *featuremgmt.FeatureManager, pstore pluginstore.Store, psettings pluginsettings.Service) (*web.Mux, *HTTPServer) { t.Helper() db.InitTestDB(t) cfg.IsFeatureToggleEnabled = features.IsEnabled @@ -48,7 +48,7 @@ func setupTestEnvironment(t *testing.T, cfg *setting.Cfg, features *featuremgmt. var pluginStore = pstore if pluginStore == nil { - pluginStore = &fakes.FakePluginStore{} + pluginStore = &pluginstore.FakePluginStore{} } var pluginsSettings = psettings @@ -212,15 +212,15 @@ func TestHTTPServer_GetFrontendSettings_apps(t *testing.T) { tests := []struct { desc string - pluginStore func() plugins.Store + pluginStore func() pluginstore.Store pluginSettings func() pluginsettings.Service expected settings }{ { desc: "disabled app with preload", - pluginStore: func() plugins.Store { - return &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{ + pluginStore: func() pluginstore.Store { + return &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{ { Module: fmt.Sprintf("/%s/module.js", "test-app"), JSONData: plugins.JSONData{ @@ -251,9 +251,9 @@ func TestHTTPServer_GetFrontendSettings_apps(t *testing.T) { }, { desc: "enabled app with preload", - pluginStore: func() plugins.Store { - return &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{ + pluginStore: func() pluginstore.Store { + return &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{ { Module: fmt.Sprintf("/%s/module.js", "test-app"), JSONData: plugins.JSONData{ @@ -284,9 +284,9 @@ func TestHTTPServer_GetFrontendSettings_apps(t *testing.T) { }, { desc: "angular app plugin", - pluginStore: func() plugins.Store { - return &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{ + pluginStore: func() pluginstore.Store { + return &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{ { Module: fmt.Sprintf("/%s/module.js", "test-app"), JSONData: plugins.JSONData{ diff --git a/pkg/api/http_server.go b/pkg/api/http_server.go index 5257f33a108..898b22d4b47 100644 --- a/pkg/api/http_server.go +++ b/pkg/api/http_server.go @@ -70,6 +70,7 @@ import ( "github.com/grafana/grafana/pkg/services/plugindashboards" "github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext" pluginSettings "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" pref "github.com/grafana/grafana/pkg/services/preference" "github.com/grafana/grafana/pkg/services/provisioning" publicdashboardsApi "github.com/grafana/grafana/pkg/services/publicdashboards/api" @@ -130,7 +131,7 @@ type HTTPServer struct { DataProxy *datasourceproxy.DataSourceProxyService PluginRequestValidator validations.PluginRequestValidator pluginClient plugins.Client - pluginStore plugins.Store + pluginStore pluginstore.Store pluginInstaller plugins.Installer pluginFileStore plugins.FileStore pluginDashboardService plugindashboards.Service @@ -215,7 +216,7 @@ func ProvideHTTPServer(opts ServerOptions, cfg *setting.Cfg, routeRegister routi renderService rendering.Service, licensing licensing.Licensing, hooksService *hooks.HooksService, cacheService *localcache.CacheService, sqlStore *sqlstore.SQLStore, alertEngine *alerting.AlertEngine, pluginRequestValidator validations.PluginRequestValidator, pluginStaticRouteResolver plugins.StaticRouteResolver, - pluginDashboardService plugindashboards.Service, pluginStore plugins.Store, pluginClient plugins.Client, + pluginDashboardService plugindashboards.Service, pluginStore pluginstore.Store, pluginClient plugins.Client, pluginErrorResolver plugins.ErrorResolver, pluginInstaller plugins.Installer, settingsProvider setting.Provider, dataSourceCache datasources.CacheService, userTokenService auth.UserTokenService, cleanUpService *cleanup.CleanUpService, shortURLService shorturls.Service, queryHistoryService queryhistory.Service, diff --git a/pkg/api/metrics_test.go b/pkg/api/metrics_test.go index 279619bcabc..e5076b3a463 100644 --- a/pkg/api/metrics_test.go +++ b/pkg/api/metrics_test.go @@ -20,7 +20,6 @@ import ( "github.com/grafana/grafana/pkg/plugins/backendplugin" "github.com/grafana/grafana/pkg/plugins/config" pluginClient "github.com/grafana/grafana/pkg/plugins/manager/client" - "github.com/grafana/grafana/pkg/plugins/manager/fakes" "github.com/grafana/grafana/pkg/plugins/manager/registry" "github.com/grafana/grafana/pkg/services/datasources" fakeDatasources "github.com/grafana/grafana/pkg/services/datasources/fakes" @@ -28,6 +27,7 @@ import ( "github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" pluginSettings "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings/service" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/query" "github.com/grafana/grafana/pkg/services/quota/quotatest" secretstest "github.com/grafana/grafana/pkg/services/secrets/fakes" @@ -67,8 +67,8 @@ func TestAPIEndpoint_Metrics_QueryMetricsV2(t *testing.T) { return &backend.QueryDataResponse{Responses: resp}, nil }, }, - plugincontext.ProvideService(localcache.ProvideService(), &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{ + plugincontext.ProvideService(localcache.ProvideService(), &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{ { JSONData: plugins.JSONData{ ID: "grafana", @@ -113,8 +113,8 @@ func TestAPIEndpoint_Metrics_PluginDecryptionFailure(t *testing.T) { ds := &fakeDatasources.FakeDataSourceService{SimulatePluginFailure: true} db := &dbtest.FakeDB{ExpectedError: pluginsettings.ErrPluginSettingNotFound} pcp := plugincontext.ProvideService(localcache.ProvideService(), - &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{ + &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{ { JSONData: plugins.JSONData{ ID: "grafana", @@ -294,8 +294,8 @@ func TestDataSourceQueryError(t *testing.T) { nil, &fakePluginRequestValidator{}, pluginClient.ProvideService(r, &config.Cfg{}), - plugincontext.ProvideService(localcache.ProvideService(), &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{p.ToDTO()}, + plugincontext.ProvideService(localcache.ProvideService(), &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{pluginstore.ToGrafanaDTO(p)}, }, ds, pluginSettings.ProvideService(dbtest.NewFakeDB(), secretstest.NewFakeSecretsService()), diff --git a/pkg/api/plugins.go b/pkg/api/plugins.go index 99cf2967ccb..8fa7dbc3d98 100644 --- a/pkg/api/plugins.go +++ b/pkg/api/plugins.go @@ -29,6 +29,7 @@ import ( "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginaccesscontrol" "github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/util" "github.com/grafana/grafana/pkg/web" @@ -72,7 +73,7 @@ func (hs *HTTPServer) GetPluginList(c *contextmodel.ReqContext) response.Respons // Filter plugins pluginDefinitions := hs.pluginStore.Plugins(c.Req.Context()) - filteredPluginDefinitions := []plugins.PluginDTO{} + filteredPluginDefinitions := []pluginstore.Plugin{} filteredPluginIDs := map[string]bool{} for _, pluginDef := range pluginDefinitions { // filter out app sub plugins @@ -347,7 +348,7 @@ func (hs *HTTPServer) getPluginAssets(c *contextmodel.ReqContext) { } // serveLocalPluginAsset returns the content of a plugin asset file from the local filesystem to the http client. -func (hs *HTTPServer) serveLocalPluginAsset(c *contextmodel.ReqContext, plugin plugins.PluginDTO, assetPath string) { +func (hs *HTTPServer) serveLocalPluginAsset(c *contextmodel.ReqContext, plugin pluginstore.Plugin, assetPath string) { f, err := hs.pluginFileStore.File(c.Req.Context(), plugin.ID, assetPath) if err != nil { if errors.Is(err, plugins.ErrFileNotExist) { @@ -368,7 +369,7 @@ func (hs *HTTPServer) serveLocalPluginAsset(c *contextmodel.ReqContext, plugin p } // redirectCDNPluginAsset redirects the http request to specified asset path on the configured plugins CDN. -func (hs *HTTPServer) redirectCDNPluginAsset(c *contextmodel.ReqContext, plugin plugins.PluginDTO, assetPath string) { +func (hs *HTTPServer) redirectCDNPluginAsset(c *contextmodel.ReqContext, plugin pluginstore.Plugin, assetPath string) { remoteURL, err := hs.pluginsCDNService.AssetURL(plugin.ID, plugin.Info.Version, assetPath) if err != nil { c.JsonApiErr(500, "Failed to get CDN plugin asset remote URL", err) diff --git a/pkg/api/plugins_test.go b/pkg/api/plugins_test.go index b21701a1c90..e0f6a1457b2 100644 --- a/pkg/api/plugins_test.go +++ b/pkg/api/plugins_test.go @@ -26,7 +26,6 @@ import ( "github.com/grafana/grafana/pkg/plugins/manager/fakes" "github.com/grafana/grafana/pkg/plugins/manager/filestore" "github.com/grafana/grafana/pkg/plugins/manager/registry" - "github.com/grafana/grafana/pkg/plugins/manager/store" "github.com/grafana/grafana/pkg/plugins/pluginscdn" ac "github.com/grafana/grafana/pkg/services/accesscontrol" contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model" @@ -34,6 +33,7 @@ import ( "github.com/grafana/grafana/pkg/services/org/orgtest" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginaccesscontrol" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/updatechecker" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/web/webtest" @@ -485,7 +485,7 @@ func pluginAssetScenario(t *testing.T, desc string, url string, urlPattern strin cfg.IsFeatureToggleEnabled = func(_ string) bool { return false } hs := HTTPServer{ Cfg: cfg, - pluginStore: store.New(pluginRegistry, &fakes.FakeLoader{}), + pluginStore: pluginstore.New(pluginRegistry, &fakes.FakeLoader{}), pluginFileStore: filestore.ProvideService(pluginRegistry), log: log.NewNopLogger(), pluginsCDNService: pluginscdn.ProvideService(&config.Cfg{ @@ -597,7 +597,7 @@ func Test_PluginsList_AccessControl(t *testing.T) { server := SetupAPITestServer(t, func(hs *HTTPServer) { hs.Cfg = setting.NewCfg() hs.PluginSettings = &pluginSettings - hs.pluginStore = store.New(pluginRegistry, &fakes.FakeLoader{}) + hs.pluginStore = pluginstore.New(pluginRegistry, &fakes.FakeLoader{}) hs.pluginFileStore = filestore.ProvideService(pluginRegistry) var err error hs.pluginsUpdateChecker, err = updatechecker.ProvidePluginsService(hs.Cfg, nil, tracing.InitializeTracerForTest()) diff --git a/pkg/expr/dataplane_test.go b/pkg/expr/dataplane_test.go index 2390b834f74..1b885e7c9ea 100644 --- a/pkg/expr/dataplane_test.go +++ b/pkg/expr/dataplane_test.go @@ -11,11 +11,11 @@ import ( "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/plugins/manager/fakes" "github.com/grafana/grafana/pkg/services/datasources" datafakes "github.com/grafana/grafana/pkg/services/datasources/fakes" "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/user" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/util" @@ -53,8 +53,8 @@ func framesPassThroughService(t *testing.T, frames data.Frames) (data.Frames, er cfg: cfg, dataService: me, features: &featuremgmt.FeatureManager{}, - pCtxProvider: plugincontext.ProvideService(nil, &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{ + pCtxProvider: plugincontext.ProvideService(nil, &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{ {JSONData: plugins.JSONData{ID: "test"}}, }}, &datafakes.FakeDataSourceService{}, nil), diff --git a/pkg/expr/service_test.go b/pkg/expr/service_test.go index 6129a6bd89c..b415ad0267e 100644 --- a/pkg/expr/service_test.go +++ b/pkg/expr/service_test.go @@ -14,11 +14,11 @@ import ( "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/plugins/manager/fakes" "github.com/grafana/grafana/pkg/services/datasources" datafakes "github.com/grafana/grafana/pkg/services/datasources/fakes" "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/user" "github.com/grafana/grafana/pkg/setting" ) @@ -32,8 +32,8 @@ func TestService(t *testing.T) { Frames: []*data.Frame{dsDF}, } - pCtxProvider := plugincontext.ProvideService(nil, &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{ + pCtxProvider := plugincontext.ProvideService(nil, &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{ {JSONData: plugins.JSONData{ID: "test"}}, }, }, &datafakes.FakeDataSourceService{}, nil) diff --git a/pkg/infra/usagestats/statscollector/service.go b/pkg/infra/usagestats/statscollector/service.go index ad436068a23..bbef8db90f9 100644 --- a/pkg/infra/usagestats/statscollector/service.go +++ b/pkg/infra/usagestats/statscollector/service.go @@ -19,6 +19,7 @@ import ( "github.com/grafana/grafana/pkg/registry" "github.com/grafana/grafana/pkg/services/datasources" "github.com/grafana/grafana/pkg/services/featuremgmt" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/stats" "github.com/grafana/grafana/pkg/setting" ) @@ -31,7 +32,7 @@ const ( type Service struct { cfg *setting.Cfg sqlstore db.DB - plugins plugins.Store + plugins pluginstore.Store usageStats usagestats.Service validator validator.Service statsService stats.Service @@ -54,7 +55,7 @@ func ProvideService( cfg *setting.Cfg, store db.DB, social social.Service, - plugins plugins.Store, + plugins pluginstore.Store, features *featuremgmt.FeatureManager, datasourceService datasources.DataSourceService, httpClientProvider httpclient.Provider, diff --git a/pkg/infra/usagestats/statscollector/service_test.go b/pkg/infra/usagestats/statscollector/service_test.go index b66b62517d4..2f102ddc6cc 100644 --- a/pkg/infra/usagestats/statscollector/service_test.go +++ b/pkg/infra/usagestats/statscollector/service_test.go @@ -20,10 +20,10 @@ import ( "github.com/grafana/grafana/pkg/infra/usagestats/validator" "github.com/grafana/grafana/pkg/login/social" "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/plugins/manager/fakes" "github.com/grafana/grafana/pkg/registry" "github.com/grafana/grafana/pkg/services/datasources" "github.com/grafana/grafana/pkg/services/featuremgmt" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/stats" "github.com/grafana/grafana/pkg/services/stats/statstest" "github.com/grafana/grafana/pkg/setting" @@ -355,8 +355,8 @@ func (m *mockSocial) GetOAuthProviders() map[string]bool { func setupSomeDataSourcePlugins(t *testing.T, s *Service) { t.Helper() - s.plugins = &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{ + s.plugins = &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{ {JSONData: plugins.JSONData{ID: datasources.DS_ES}, Signature: "internal"}, {JSONData: plugins.JSONData{ID: datasources.DS_PROMETHEUS}, Signature: "internal"}, {JSONData: plugins.JSONData{ID: datasources.DS_GRAPHITE}, Signature: "internal"}, @@ -381,7 +381,7 @@ func createService(t testing.TB, cfg *setting.Cfg, store db.DB, statsService sta cfg, store, &mockSocial{}, - &fakes.FakePluginStore{}, + &pluginstore.FakePluginStore{}, featuremgmt.WithFeatures("feature1", "feature2"), o.datasources, httpclient.NewProvider(), diff --git a/pkg/infra/usagestats/validator/impl.go b/pkg/infra/usagestats/validator/impl.go index 48ab34ef324..75753fb235b 100644 --- a/pkg/infra/usagestats/validator/impl.go +++ b/pkg/infra/usagestats/validator/impl.go @@ -3,14 +3,14 @@ package validator import ( "context" - "github.com/grafana/grafana/pkg/plugins" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" ) type UsageStatsValidator struct { - pluginStore plugins.Store + pluginStore pluginstore.Store } -func ProvideService(pluginStore plugins.Store) (Service, error) { +func ProvideService(pluginStore pluginstore.Store) (Service, error) { s := &UsageStatsValidator{ pluginStore: pluginStore, } diff --git a/pkg/plugins/ifaces.go b/pkg/plugins/ifaces.go index 48837f61867..2ea6bf6dccb 100644 --- a/pkg/plugins/ifaces.go +++ b/pkg/plugins/ifaces.go @@ -10,14 +10,6 @@ import ( "github.com/grafana/grafana/pkg/plugins/backendplugin" ) -// Store is the publicly accessible storage for plugins. -type Store interface { - // Plugin finds a plugin by its ID. - Plugin(ctx context.Context, pluginID string) (PluginDTO, bool) - // Plugins returns plugins by their requested type. - Plugins(ctx context.Context, pluginTypes ...Type) []PluginDTO -} - type Installer interface { // Add adds a new plugin. Add(ctx context.Context, pluginID, version string, opts CompatOpts) error diff --git a/pkg/plugins/manager/fakes/fakes.go b/pkg/plugins/manager/fakes/fakes.go index 08accd140f1..d7249f6db58 100644 --- a/pkg/plugins/manager/fakes/fakes.go +++ b/pkg/plugins/manager/fakes/fakes.go @@ -433,37 +433,6 @@ func (f *FakeOauthService) RegisterExternalService(ctx context.Context, name str return f.Result, nil } -type FakePluginStore struct { - PluginList []plugins.PluginDTO -} - -func (pr *FakePluginStore) Plugin(_ context.Context, pluginID string) (plugins.PluginDTO, bool) { - for _, v := range pr.PluginList { - if v.ID == pluginID { - return v, true - } - } - - return plugins.PluginDTO{}, false -} - -func (pr *FakePluginStore) Plugins(_ context.Context, pluginTypes ...plugins.Type) []plugins.PluginDTO { - var result []plugins.PluginDTO - if len(pluginTypes) == 0 { - pluginTypes = plugins.PluginTypes - } - - for _, v := range pr.PluginList { - for _, t := range pluginTypes { - if v.Type == t { - result = append(result, v) - } - } - } - - return result -} - type FakeDiscoverer struct { DiscoverFunc func(ctx context.Context, src plugins.PluginSource) ([]*plugins.FoundBundle, error) } diff --git a/pkg/plugins/manager/loader/finder/local_test.go b/pkg/plugins/manager/loader/finder/local_test.go index 907920d24b2..42cefb50a1a 100644 --- a/pkg/plugins/manager/loader/finder/local_test.go +++ b/pkg/plugins/manager/loader/finder/local_test.go @@ -13,9 +13,6 @@ import ( "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/plugins/manager/fakes" - "github.com/grafana/grafana/pkg/services/featuremgmt" - "github.com/grafana/grafana/pkg/services/pluginsintegration/config" - "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/util" ) @@ -25,10 +22,6 @@ func TestFinder_Find(t *testing.T) { require.NoError(t, err) } - cfg := setting.NewCfg() - pCfg, err := config.ProvideConfig(setting.ProvideProvider(cfg), cfg, featuremgmt.WithFeatures()) - require.NoError(t, err) - testCases := []struct { name string pluginDirs []string @@ -255,7 +248,7 @@ func TestFinder_Find(t *testing.T) { } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - f := NewLocalFinder(pCfg.DevMode) + f := NewLocalFinder(false) pluginBundles, err := f.Find(context.Background(), &fakes.FakePluginSource{ PluginURIsFunc: func(ctx context.Context) []string { return tc.pluginDirs @@ -279,10 +272,6 @@ func TestFinder_Find(t *testing.T) { } func TestFinder_getAbsPluginJSONPaths(t *testing.T) { - cfg := setting.NewCfg() - pCfg, err := config.ProvideConfig(setting.ProvideProvider(cfg), cfg, featuremgmt.WithFeatures()) - require.NoError(t, err) - t.Run("When scanning a folder that doesn't exists shouldn't return an error", func(t *testing.T) { origWalk := walk walk = func(path string, followSymlinks, detectSymlinkInfiniteLoop bool, walkFn util.WalkFunc) error { @@ -292,7 +281,7 @@ func TestFinder_getAbsPluginJSONPaths(t *testing.T) { walk = origWalk }) - finder := NewLocalFinder(pCfg.DevMode) + finder := NewLocalFinder(false) paths, err := finder.getAbsPluginJSONPaths("test") require.NoError(t, err) require.Empty(t, paths) @@ -307,7 +296,7 @@ func TestFinder_getAbsPluginJSONPaths(t *testing.T) { walk = origWalk }) - finder := NewLocalFinder(pCfg.DevMode) + finder := NewLocalFinder(false) paths, err := finder.getAbsPluginJSONPaths("test") require.NoError(t, err) require.Empty(t, paths) @@ -322,7 +311,7 @@ func TestFinder_getAbsPluginJSONPaths(t *testing.T) { walk = origWalk }) - finder := NewLocalFinder(pCfg.DevMode) + finder := NewLocalFinder(false) paths, err := finder.getAbsPluginJSONPaths("test") require.Error(t, err) require.Empty(t, paths) diff --git a/pkg/plugins/plugins.go b/pkg/plugins/plugins.go index e00bf1ce11f..4befa80a212 100644 --- a/pkg/plugins/plugins.go +++ b/pkg/plugins/plugins.go @@ -69,52 +69,6 @@ type Plugin struct { Alias string `json:"alias,omitempty"` } -type PluginDTO struct { - JSONData - - fs FS - logger log.Logger - supportsStreaming bool - - Class Class - - // App fields - IncludedInAppID string - DefaultNavURL string - Pinned bool - - // Signature fields - Signature SignatureStatus - SignatureType SignatureType - SignatureOrg string - SignatureError *SignatureError - - // SystemJS fields - Module string - BaseURL string - - AngularDetected bool - - // This will be moved to plugin.json when we have general support in gcom - Alias string `json:"alias,omitempty"` -} - -func (p PluginDTO) SupportsStreaming() bool { - return p.supportsStreaming -} - -func (p PluginDTO) Base() string { - return p.fs.Base() -} - -func (p PluginDTO) IsApp() bool { - return p.Type == TypeApp -} - -func (p PluginDTO) IsCorePlugin() bool { - return p.Class == ClassCore -} - // JSONData represents the plugin's plugin.json type JSONData struct { // Common settings @@ -446,27 +400,6 @@ type PluginClient interface { backend.StreamHandler } -func (p *Plugin) ToDTO() PluginDTO { - return PluginDTO{ - logger: p.Logger(), - fs: p.FS, - supportsStreaming: p.client != nil && p.client.(backend.StreamHandler) != nil, - Class: p.Class, - JSONData: p.JSONData, - IncludedInAppID: p.IncludedInAppID, - DefaultNavURL: p.DefaultNavURL, - Pinned: p.Pinned, - Signature: p.Signature, - SignatureType: p.SignatureType, - SignatureOrg: p.SignatureOrg, - SignatureError: p.SignatureError, - Module: p.Module, - BaseURL: p.BaseURL, - AngularDetected: p.AngularDetected, - Alias: p.Alias, - } -} - func (p *Plugin) StaticRoute() *StaticRoute { if p.IsCorePlugin() { return nil diff --git a/pkg/registry/backgroundsvcs/background_services.go b/pkg/registry/backgroundsvcs/background_services.go index 22f540fd5df..a71835837dd 100644 --- a/pkg/registry/backgroundsvcs/background_services.go +++ b/pkg/registry/backgroundsvcs/background_services.go @@ -7,7 +7,6 @@ import ( "github.com/grafana/grafana/pkg/infra/tracing" uss "github.com/grafana/grafana/pkg/infra/usagestats/service" "github.com/grafana/grafana/pkg/infra/usagestats/statscollector" - pluginStore "github.com/grafana/grafana/pkg/plugins/manager/store" "github.com/grafana/grafana/pkg/registry" "github.com/grafana/grafana/pkg/services/alerting" "github.com/grafana/grafana/pkg/services/auth" @@ -25,6 +24,7 @@ import ( plugindashboardsservice "github.com/grafana/grafana/pkg/services/plugindashboards/service" "github.com/grafana/grafana/pkg/services/pluginsintegration/angulardetectorsprovider" "github.com/grafana/grafana/pkg/services/pluginsintegration/keyretriever/dynamic" + pluginStore "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/provisioning" publicdashboardsmetric "github.com/grafana/grafana/pkg/services/publicdashboards/metric" "github.com/grafana/grafana/pkg/services/rendering" diff --git a/pkg/server/wire.go b/pkg/server/wire.go index 2389a519e2c..ec9804e7d10 100644 --- a/pkg/server/wire.go +++ b/pkg/server/wire.go @@ -32,7 +32,6 @@ import ( "github.com/grafana/grafana/pkg/login/social" "github.com/grafana/grafana/pkg/middleware/csrf" "github.com/grafana/grafana/pkg/middleware/loggermw" - pluginDashboards "github.com/grafana/grafana/pkg/plugins/manager/dashboards" "github.com/grafana/grafana/pkg/registry/corekind" "github.com/grafana/grafana/pkg/services/accesscontrol" "github.com/grafana/grafana/pkg/services/accesscontrol/acimpl" @@ -93,6 +92,7 @@ import ( "github.com/grafana/grafana/pkg/services/plugindashboards" plugindashboardsservice "github.com/grafana/grafana/pkg/services/plugindashboards/service" "github.com/grafana/grafana/pkg/services/pluginsintegration" + pluginDashboards "github.com/grafana/grafana/pkg/services/pluginsintegration/dashboards" "github.com/grafana/grafana/pkg/services/preference/prefimpl" "github.com/grafana/grafana/pkg/services/publicdashboards" publicdashboardsApi "github.com/grafana/grafana/pkg/services/publicdashboards/api" diff --git a/pkg/services/dashboardimport/api/api.go b/pkg/services/dashboardimport/api/api.go index 91761490e5b..819aa30ab03 100644 --- a/pkg/services/dashboardimport/api/api.go +++ b/pkg/services/dashboardimport/api/api.go @@ -7,11 +7,11 @@ import ( "github.com/grafana/grafana/pkg/api/response" "github.com/grafana/grafana/pkg/api/routing" "github.com/grafana/grafana/pkg/middleware" - "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/services/accesscontrol" contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model" "github.com/grafana/grafana/pkg/services/dashboardimport" "github.com/grafana/grafana/pkg/services/dashboards" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/quota" "github.com/grafana/grafana/pkg/web" ) @@ -19,12 +19,12 @@ import ( type ImportDashboardAPI struct { dashboardImportService dashboardimport.Service quotaService QuotaService - pluginStore plugins.Store + pluginStore pluginstore.Store ac accesscontrol.AccessControl } func New(dashboardImportService dashboardimport.Service, quotaService QuotaService, - pluginStore plugins.Store, ac accesscontrol.AccessControl) *ImportDashboardAPI { + pluginStore pluginstore.Store, ac accesscontrol.AccessControl) *ImportDashboardAPI { return &ImportDashboardAPI{ dashboardImportService: dashboardImportService, quotaService: quotaService, diff --git a/pkg/services/dashboardimport/service/service.go b/pkg/services/dashboardimport/service/service.go index 33083b7f0f9..ff53ac0d7f0 100644 --- a/pkg/services/dashboardimport/service/service.go +++ b/pkg/services/dashboardimport/service/service.go @@ -5,7 +5,6 @@ import ( "github.com/grafana/grafana/pkg/api/routing" "github.com/grafana/grafana/pkg/components/simplejson" - "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/services/accesscontrol" "github.com/grafana/grafana/pkg/services/auth/identity" "github.com/grafana/grafana/pkg/services/dashboardimport" @@ -15,12 +14,13 @@ import ( "github.com/grafana/grafana/pkg/services/folder" "github.com/grafana/grafana/pkg/services/librarypanels" "github.com/grafana/grafana/pkg/services/plugindashboards" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/quota" ) func ProvideService(routeRegister routing.RouteRegister, quotaService quota.Service, - pluginDashboardService plugindashboards.Service, pluginStore plugins.Store, + pluginDashboardService plugindashboards.Service, pluginStore pluginstore.Store, libraryPanelService librarypanels.Service, dashboardService dashboards.DashboardService, ac accesscontrol.AccessControl, folderService folder.Service, ) *ImportDashboardService { diff --git a/pkg/services/datasourceproxy/datasourceproxy.go b/pkg/services/datasourceproxy/datasourceproxy.go index f186f94abaa..b2d9e8bd358 100644 --- a/pkg/services/datasourceproxy/datasourceproxy.go +++ b/pkg/services/datasourceproxy/datasourceproxy.go @@ -12,10 +12,10 @@ import ( "github.com/grafana/grafana/pkg/infra/httpclient" "github.com/grafana/grafana/pkg/infra/metrics" "github.com/grafana/grafana/pkg/infra/tracing" - "github.com/grafana/grafana/pkg/plugins" contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model" "github.com/grafana/grafana/pkg/services/datasources" "github.com/grafana/grafana/pkg/services/oauthtoken" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/secrets" "github.com/grafana/grafana/pkg/services/validations" "github.com/grafana/grafana/pkg/setting" @@ -24,7 +24,7 @@ import ( ) func ProvideService(dataSourceCache datasources.CacheService, plugReqValidator validations.PluginRequestValidator, - pluginStore plugins.Store, cfg *setting.Cfg, httpClientProvider httpclient.Provider, + pluginStore pluginstore.Store, cfg *setting.Cfg, httpClientProvider httpclient.Provider, oauthTokenService *oauthtoken.Service, dsService datasources.DataSourceService, tracer tracing.Tracer, secretsService secrets.Service) *DataSourceProxyService { return &DataSourceProxyService{ @@ -43,7 +43,7 @@ func ProvideService(dataSourceCache datasources.CacheService, plugReqValidator v type DataSourceProxyService struct { DataSourceCache datasources.CacheService PluginRequestValidator validations.PluginRequestValidator - pluginStore plugins.Store + pluginStore pluginstore.Store Cfg *setting.Cfg HTTPClientProvider httpclient.Provider OAuthTokenService *oauthtoken.Service diff --git a/pkg/services/datasourceproxy/datasourceproxy_test.go b/pkg/services/datasourceproxy/datasourceproxy_test.go index 235fc1b3fce..5d60a43e9cf 100644 --- a/pkg/services/datasourceproxy/datasourceproxy_test.go +++ b/pkg/services/datasourceproxy/datasourceproxy_test.go @@ -11,9 +11,9 @@ import ( "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/plugins/manager/fakes" contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model" "github.com/grafana/grafana/pkg/services/datasources" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/web" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -88,7 +88,7 @@ func TestDatasourceProxy_proxyDatasourceRequest(t *testing.T) { t.Run(tc.name, func(t *testing.T) { pluginID := datasources.DS_PROMETHEUS - pluginStore := &fakes.FakePluginStore{PluginList: []plugins.PluginDTO{ + pluginStore := &pluginstore.FakePluginStore{PluginList: []pluginstore.Plugin{ {JSONData: plugins.JSONData{ID: pluginID}}, }} diff --git a/pkg/services/live/live.go b/pkg/services/live/live.go index 1100cad8ce6..bb6babd1292 100644 --- a/pkg/services/live/live.go +++ b/pkg/services/live/live.go @@ -50,6 +50,7 @@ import ( "github.com/grafana/grafana/pkg/services/live/survey" "github.com/grafana/grafana/pkg/services/org" "github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/query" "github.com/grafana/grafana/pkg/services/secrets" "github.com/grafana/grafana/pkg/services/user" @@ -73,7 +74,7 @@ type CoreGrafanaScope struct { } func ProvideService(plugCtxProvider *plugincontext.Provider, cfg *setting.Cfg, routeRegister routing.RouteRegister, - pluginStore plugins.Store, pluginClient plugins.Client, cacheService *localcache.CacheService, + pluginStore pluginstore.Store, pluginClient plugins.Client, cacheService *localcache.CacheService, dataSourceCache datasources.CacheService, sqlStore db.DB, secretsService secrets.Service, usageStatsService usagestats.Service, queryDataService query.Service, toggles featuremgmt.FeatureToggles, accessControl accesscontrol.AccessControl, dashboardService dashboards.DashboardService, annotationsRepo annotations.Repository, @@ -356,7 +357,7 @@ type GrafanaLive struct { DataSourceCache datasources.CacheService SQLStore db.DB SecretsService secrets.Service - pluginStore plugins.Store + pluginStore pluginstore.Store pluginClient plugins.Client queryDataService query.Service orgService org.Service diff --git a/pkg/services/navtree/navtreeimpl/applinks.go b/pkg/services/navtree/navtreeimpl/applinks.go index bff1d923fcb..0a78ee27fa4 100644 --- a/pkg/services/navtree/navtreeimpl/applinks.go +++ b/pkg/services/navtree/navtreeimpl/applinks.go @@ -12,6 +12,7 @@ import ( "github.com/grafana/grafana/pkg/services/navtree" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginaccesscontrol" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/util" ) @@ -24,7 +25,7 @@ func (s *ServiceImpl) addAppLinks(treeRoot *navtree.NavTreeRoot, c *contextmodel return err } - isPluginEnabled := func(plugin plugins.PluginDTO) bool { + isPluginEnabled := func(plugin pluginstore.Plugin) bool { if plugin.AutoEnabled { return true } @@ -63,7 +64,7 @@ func (s *ServiceImpl) addAppLinks(treeRoot *navtree.NavTreeRoot, c *contextmodel return nil } -func (s *ServiceImpl) processAppPlugin(plugin plugins.PluginDTO, c *contextmodel.ReqContext, treeRoot *navtree.NavTreeRoot) *navtree.NavLink { +func (s *ServiceImpl) processAppPlugin(plugin pluginstore.Plugin, c *contextmodel.ReqContext, treeRoot *navtree.NavTreeRoot) *navtree.NavLink { hasAccessToInclude := s.hasAccessToInclude(c, plugin.ID) appLink := &navtree.NavLink{ Text: plugin.Name, @@ -165,7 +166,7 @@ func (s *ServiceImpl) processAppPlugin(plugin plugins.PluginDTO, c *contextmodel return nil } -func (s *ServiceImpl) addPluginToSection(c *contextmodel.ReqContext, treeRoot *navtree.NavTreeRoot, plugin plugins.PluginDTO, appLink *navtree.NavLink) { +func (s *ServiceImpl) addPluginToSection(c *contextmodel.ReqContext, treeRoot *navtree.NavTreeRoot, plugin pluginstore.Plugin, appLink *navtree.NavLink) { // Handle moving apps into specific navtree sections alertingNode := treeRoot.FindById(navtree.NavIDAlerting) if alertingNode == nil { diff --git a/pkg/services/navtree/navtreeimpl/applinks_test.go b/pkg/services/navtree/navtreeimpl/applinks_test.go index d2b789f443f..6d19b8cf67b 100644 --- a/pkg/services/navtree/navtreeimpl/applinks_test.go +++ b/pkg/services/navtree/navtreeimpl/applinks_test.go @@ -9,7 +9,6 @@ import ( "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/models/roletype" "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/plugins/manager/fakes" ac "github.com/grafana/grafana/pkg/services/accesscontrol" "github.com/grafana/grafana/pkg/services/accesscontrol/acimpl" accesscontrolmock "github.com/grafana/grafana/pkg/services/accesscontrol/mock" @@ -19,6 +18,7 @@ import ( "github.com/grafana/grafana/pkg/services/navtree" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginaccesscontrol" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/user" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/web" @@ -34,7 +34,7 @@ func TestAddAppLinks(t *testing.T) { {Action: datasources.ActionRead, Scope: "*"}, } - testApp1 := plugins.PluginDTO{ + testApp1 := pluginstore.Plugin{ JSONData: plugins.JSONData{ ID: "test-app1", Name: "Test app1 name", @@ -57,7 +57,7 @@ func TestAddAppLinks(t *testing.T) { }, } - testApp2 := plugins.PluginDTO{ + testApp2 := pluginstore.Plugin{ JSONData: plugins.JSONData{ ID: "test-app2", Name: "Test app2 name", @@ -74,7 +74,7 @@ func TestAddAppLinks(t *testing.T) { }, } - testApp3 := plugins.PluginDTO{ + testApp3 := pluginstore.Plugin{ JSONData: plugins.JSONData{ ID: "test-app3", Name: "Test app3 name", @@ -115,8 +115,8 @@ func TestAddAppLinks(t *testing.T) { accessControl: accesscontrolmock.New().WithPermissions(permissions), pluginSettings: &pluginSettings, features: featuremgmt.WithFeatures(), - pluginStore: &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{testApp1, testApp2, testApp3}, + pluginStore: &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{testApp1, testApp2, testApp3}, }, } @@ -399,7 +399,7 @@ func TestAddAppLinksAccessControl(t *testing.T) { reqCtx := &contextmodel.ReqContext{SignedInUser: user, Context: &web.Context{Req: httpReq}} catalogReadAction := "test-app1.catalog:read" - testApp1 := plugins.PluginDTO{ + testApp1 := pluginstore.Plugin{ JSONData: plugins.JSONData{ ID: "test-app1", Name: "Test app1 name", Type: plugins.TypeApp, Includes: []*plugins.Includes{ @@ -435,8 +435,8 @@ func TestAddAppLinksAccessControl(t *testing.T) { accessControl: acimpl.ProvideAccessControl(cfg), pluginSettings: &pluginSettings, features: featuremgmt.WithFeatures(), - pluginStore: &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{testApp1}, + pluginStore: &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{testApp1}, }, } diff --git a/pkg/services/navtree/navtreeimpl/navtree.go b/pkg/services/navtree/navtreeimpl/navtree.go index a09261395b9..251eed9afc6 100644 --- a/pkg/services/navtree/navtreeimpl/navtree.go +++ b/pkg/services/navtree/navtreeimpl/navtree.go @@ -7,7 +7,6 @@ import ( "github.com/grafana/grafana/pkg/api/dtos" "github.com/grafana/grafana/pkg/infra/kvstore" "github.com/grafana/grafana/pkg/infra/log" - "github.com/grafana/grafana/pkg/plugins" ac "github.com/grafana/grafana/pkg/services/accesscontrol" "github.com/grafana/grafana/pkg/services/apikey" contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model" @@ -18,6 +17,7 @@ import ( "github.com/grafana/grafana/pkg/services/navtree" "github.com/grafana/grafana/pkg/services/org" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" pref "github.com/grafana/grafana/pkg/services/preference" "github.com/grafana/grafana/pkg/services/star" "github.com/grafana/grafana/pkg/services/supportbundles/supportbundlesimpl" @@ -28,7 +28,7 @@ type ServiceImpl struct { cfg *setting.Cfg log log.Logger accessControl ac.AccessControl - pluginStore plugins.Store + pluginStore pluginstore.Store pluginSettings pluginsettings.Service starService star.Service features *featuremgmt.FeatureManager @@ -50,7 +50,7 @@ type NavigationAppConfig struct { Icon string } -func ProvideService(cfg *setting.Cfg, accessControl ac.AccessControl, pluginStore plugins.Store, pluginSettings pluginsettings.Service, starService star.Service, features *featuremgmt.FeatureManager, dashboardService dashboards.DashboardService, accesscontrolService ac.Service, kvStore kvstore.KVStore, apiKeyService apikey.Service, license licensing.Licensing) navtree.Service { +func ProvideService(cfg *setting.Cfg, accessControl ac.AccessControl, pluginStore pluginstore.Store, pluginSettings pluginsettings.Service, starService star.Service, features *featuremgmt.FeatureManager, dashboardService dashboards.DashboardService, accesscontrolService ac.Service, kvStore kvstore.KVStore, apiKeyService apikey.Service, license licensing.Licensing) navtree.Service { service := &ServiceImpl{ cfg: cfg, log: log.New("navtree service"), diff --git a/pkg/services/ngalert/eval/eval.go b/pkg/services/ngalert/eval/eval.go index 9359e3bd4a6..ba5beb78ae1 100644 --- a/pkg/services/ngalert/eval/eval.go +++ b/pkg/services/ngalert/eval/eval.go @@ -21,6 +21,7 @@ import ( "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/services/datasources" "github.com/grafana/grafana/pkg/services/ngalert/models" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/setting" ) @@ -88,14 +89,14 @@ type evaluatorImpl struct { evaluationTimeout time.Duration dataSourceCache datasources.CacheService expressionService *expr.Service - pluginsStore plugins.Store + pluginsStore pluginstore.Store } func NewEvaluatorFactory( cfg setting.UnifiedAlertingSettings, datasourceCache datasources.CacheService, expressionService *expr.Service, - pluginsStore plugins.Store, + pluginsStore pluginstore.Store, ) EvaluatorFactory { return &evaluatorImpl{ evaluationTimeout: cfg.EvaluationTimeout, diff --git a/pkg/services/ngalert/eval/eval_test.go b/pkg/services/ngalert/eval/eval_test.go index ae05282c6f5..7820036edf6 100644 --- a/pkg/services/ngalert/eval/eval_test.go +++ b/pkg/services/ngalert/eval/eval_test.go @@ -15,11 +15,11 @@ import ( "github.com/grafana/grafana/pkg/expr" "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/plugins" - pluginFakes "github.com/grafana/grafana/pkg/plugins/manager/fakes" "github.com/grafana/grafana/pkg/services/datasources" fakes "github.com/grafana/grafana/pkg/services/datasources/fakes" "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/ngalert/models" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/user" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/util" @@ -359,7 +359,7 @@ func TestEvaluateExecutionResultsNoData(t *testing.T) { func TestValidate(t *testing.T) { type services struct { cache *fakes.FakeCacheService - pluginsStore *pluginFakes.FakePluginStore + pluginsStore *pluginstore.FakePluginStore } testCases := []struct { @@ -387,7 +387,7 @@ func TestValidate(t *testing.T) { Type: util.GenerateShortUID(), } services.cache.DataSources = append(services.cache.DataSources, ds) - services.pluginsStore.PluginList = append(services.pluginsStore.PluginList, plugins.PluginDTO{ + services.pluginsStore.PluginList = append(services.pluginsStore.PluginList, pluginstore.Plugin{ JSONData: plugins.JSONData{ ID: ds.Type, Backend: true, @@ -413,7 +413,7 @@ func TestValidate(t *testing.T) { Type: util.GenerateShortUID(), } services.cache.DataSources = append(services.cache.DataSources, ds) - services.pluginsStore.PluginList = append(services.pluginsStore.PluginList, plugins.PluginDTO{ + services.pluginsStore.PluginList = append(services.pluginsStore.PluginList, pluginstore.Plugin{ JSONData: plugins.JSONData{ ID: ds.Type, Backend: true, @@ -476,12 +476,12 @@ func TestValidate(t *testing.T) { Type: util.GenerateShortUID(), } services.cache.DataSources = append(services.cache.DataSources, ds1, ds2) - services.pluginsStore.PluginList = append(services.pluginsStore.PluginList, plugins.PluginDTO{ + services.pluginsStore.PluginList = append(services.pluginsStore.PluginList, pluginstore.Plugin{ JSONData: plugins.JSONData{ ID: ds1.Type, Backend: false, }, - }, plugins.PluginDTO{ + }, pluginstore.Plugin{ JSONData: plugins.JSONData{ ID: ds2.Type, Backend: true, @@ -507,7 +507,7 @@ func TestValidate(t *testing.T) { Type: util.GenerateShortUID(), } services.cache.DataSources = append(services.cache.DataSources, ds) - services.pluginsStore.PluginList = append(services.pluginsStore.PluginList, plugins.PluginDTO{ + services.pluginsStore.PluginList = append(services.pluginsStore.PluginList, pluginstore.Plugin{ JSONData: plugins.JSONData{ ID: ds.Type, Backend: true, @@ -530,7 +530,7 @@ func TestValidate(t *testing.T) { t.Run(testCase.name, func(t *testing.T) { cacheService := &fakes.FakeCacheService{} - store := &pluginFakes.FakePluginStore{} + store := &pluginstore.FakePluginStore{} condition := testCase.condition(services{ cache: cacheService, pluginsStore: store, diff --git a/pkg/services/ngalert/ngalert.go b/pkg/services/ngalert/ngalert.go index b30b024f725..4f38e250326 100644 --- a/pkg/services/ngalert/ngalert.go +++ b/pkg/services/ngalert/ngalert.go @@ -17,7 +17,6 @@ import ( "github.com/grafana/grafana/pkg/infra/kvstore" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/infra/tracing" - "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/services/accesscontrol" "github.com/grafana/grafana/pkg/services/annotations" "github.com/grafana/grafana/pkg/services/dashboards" @@ -38,6 +37,7 @@ import ( "github.com/grafana/grafana/pkg/services/ngalert/state/historian" "github.com/grafana/grafana/pkg/services/ngalert/store" "github.com/grafana/grafana/pkg/services/notifications" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/quota" "github.com/grafana/grafana/pkg/services/rendering" "github.com/grafana/grafana/pkg/services/secrets" @@ -65,7 +65,7 @@ func ProvideService( bus bus.Bus, accesscontrolService accesscontrol.Service, annotationsRepo annotations.Repository, - pluginsStore plugins.Store, + pluginsStore pluginstore.Store, tracer tracing.Tracer, ruleStore *store.DBstore, ) (*AlertNG, error) { @@ -140,7 +140,7 @@ type AlertNG struct { store *store.DBstore bus bus.Bus - pluginsStore plugins.Store + pluginsStore pluginstore.Store tracer tracing.Tracer } diff --git a/pkg/services/ngalert/schedule/schedule_unit_test.go b/pkg/services/ngalert/schedule/schedule_unit_test.go index b59daceafa0..1ca89170302 100644 --- a/pkg/services/ngalert/schedule/schedule_unit_test.go +++ b/pkg/services/ngalert/schedule/schedule_unit_test.go @@ -23,13 +23,13 @@ import ( "github.com/grafana/grafana/pkg/expr" "github.com/grafana/grafana/pkg/infra/tracing" - "github.com/grafana/grafana/pkg/plugins/manager/fakes" "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" "github.com/grafana/grafana/pkg/services/ngalert/eval" "github.com/grafana/grafana/pkg/services/ngalert/metrics" "github.com/grafana/grafana/pkg/services/ngalert/models" "github.com/grafana/grafana/pkg/services/ngalert/state" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/util" ) @@ -855,7 +855,7 @@ func setupScheduler(t *testing.T, rs *fakeRulesStore, is *state.FakeInstanceStor var evaluator = evalMock if evalMock == nil { - evaluator = eval.NewEvaluatorFactory(setting.UnifiedAlertingSettings{}, nil, expr.ProvideService(&setting.Cfg{ExpressionsEnabled: true}, nil, nil, &featuremgmt.FeatureManager{}, nil, tracing.InitializeTracerForTest()), &fakes.FakePluginStore{}) + evaluator = eval.NewEvaluatorFactory(setting.UnifiedAlertingSettings{}, nil, expr.ProvideService(&setting.Cfg{ExpressionsEnabled: true}, nil, nil, &featuremgmt.FeatureManager{}, nil, tracing.InitializeTracerForTest()), &pluginstore.FakePluginStore{}) } if registry == nil { diff --git a/pkg/services/ngalert/tests/util.go b/pkg/services/ngalert/tests/util.go index 8c74ac5be00..5bc796909d1 100644 --- a/pkg/services/ngalert/tests/util.go +++ b/pkg/services/ngalert/tests/util.go @@ -17,7 +17,6 @@ import ( "github.com/grafana/grafana/pkg/infra/db" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/infra/tracing" - "github.com/grafana/grafana/pkg/plugins/manager/fakes" acmock "github.com/grafana/grafana/pkg/services/accesscontrol/mock" "github.com/grafana/grafana/pkg/services/annotations/annotationstest" "github.com/grafana/grafana/pkg/services/dashboards" @@ -30,6 +29,7 @@ import ( "github.com/grafana/grafana/pkg/services/ngalert/store" "github.com/grafana/grafana/pkg/services/ngalert/testutil" "github.com/grafana/grafana/pkg/services/org" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/quota/quotatest" "github.com/grafana/grafana/pkg/services/secrets/database" secretsManager "github.com/grafana/grafana/pkg/services/secrets/manager" @@ -68,7 +68,7 @@ func SetupTestEnv(tb testing.TB, baseInterval time.Duration) (*ngalert.AlertNG, ng, err := ngalert.ProvideService( cfg, featuremgmt.WithFeatures(), nil, nil, routing.NewRouteRegister(), sqlStore, nil, nil, nil, quotatest.New(false, nil), secretsService, nil, m, folderService, ac, &dashboards.FakeDashboardService{}, nil, bus, ac, - annotationstest.NewFakeAnnotationsRepo(), &fakes.FakePluginStore{}, tracer, ruleStore, + annotationstest.NewFakeAnnotationsRepo(), &pluginstore.FakePluginStore{}, tracer, ruleStore, ) require.NoError(tb, err) return ng, &store.DBstore{ diff --git a/pkg/services/plugindashboards/service/dashboard_updater.go b/pkg/services/plugindashboards/service/dashboard_updater.go index 977f8d19b26..ce35611c30a 100644 --- a/pkg/services/plugindashboards/service/dashboard_updater.go +++ b/pkg/services/plugindashboards/service/dashboard_updater.go @@ -6,16 +6,16 @@ import ( "github.com/grafana/grafana/pkg/bus" "github.com/grafana/grafana/pkg/infra/log" - "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/services/accesscontrol" "github.com/grafana/grafana/pkg/services/dashboardimport" "github.com/grafana/grafana/pkg/services/dashboards" "github.com/grafana/grafana/pkg/services/org" "github.com/grafana/grafana/pkg/services/plugindashboards" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" ) -func ProvideDashboardUpdater(bus bus.Bus, pluginStore plugins.Store, pluginDashboardService plugindashboards.Service, +func ProvideDashboardUpdater(bus bus.Bus, pluginStore pluginstore.Store, pluginDashboardService plugindashboards.Service, dashboardImportService dashboardimport.Service, pluginSettingsService pluginsettings.Service, dashboardPluginService dashboards.PluginService, dashboardService dashboards.DashboardService) *DashboardUpdater { du := newDashboardUpdater(bus, pluginStore, pluginDashboardService, dashboardImportService, @@ -24,7 +24,7 @@ func ProvideDashboardUpdater(bus bus.Bus, pluginStore plugins.Store, pluginDashb return du } -func newDashboardUpdater(bus bus.Bus, pluginStore plugins.Store, +func newDashboardUpdater(bus bus.Bus, pluginStore pluginstore.Store, pluginDashboardService plugindashboards.Service, dashboardImportService dashboardimport.Service, pluginSettingsService pluginsettings.Service, dashboardPluginService dashboards.PluginService, dashboardService dashboards.DashboardService) *DashboardUpdater { @@ -43,7 +43,7 @@ func newDashboardUpdater(bus bus.Bus, pluginStore plugins.Store, } type DashboardUpdater struct { - pluginStore plugins.Store + pluginStore pluginstore.Store pluginDashboardService plugindashboards.Service dashboardImportService dashboardimport.Service pluginSettingsService pluginsettings.Service @@ -75,7 +75,7 @@ func (du *DashboardUpdater) updateAppDashboards() { } } -func (du *DashboardUpdater) syncPluginDashboards(ctx context.Context, plugin plugins.PluginDTO, orgID int64) { +func (du *DashboardUpdater) syncPluginDashboards(ctx context.Context, plugin pluginstore.Plugin, orgID int64) { du.logger.Info("Syncing plugin dashboards to DB", "pluginId", plugin.ID) // Get plugin dashboards diff --git a/pkg/services/plugindashboards/service/dashboard_updater_test.go b/pkg/services/plugindashboards/service/dashboard_updater_test.go index ceb5b093182..aff8bac7512 100644 --- a/pkg/services/plugindashboards/service/dashboard_updater_test.go +++ b/pkg/services/plugindashboards/service/dashboard_updater_test.go @@ -16,6 +16,7 @@ import ( "github.com/grafana/grafana/pkg/services/plugindashboards" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings/service" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" ) func TestDashboardUpdater(t *testing.T) { @@ -83,7 +84,7 @@ func TestDashboardUpdater(t *testing.T) { PluginVersion: "1.0.0", }, }, - installedPlugins: []plugins.PluginDTO{ + installedPlugins: []pluginstore.Plugin{ { JSONData: plugins.JSONData{ Info: plugins.Info{ @@ -115,7 +116,7 @@ func TestDashboardUpdater(t *testing.T) { PluginVersion: "1.0.0", }, }, - installedPlugins: []plugins.PluginDTO{ + installedPlugins: []pluginstore.Plugin{ { JSONData: plugins.JSONData{ Info: plugins.Info{ @@ -151,7 +152,7 @@ func TestDashboardUpdater(t *testing.T) { OrgID: 2, }, }, - installedPlugins: []plugins.PluginDTO{ + installedPlugins: []pluginstore.Plugin{ { JSONData: plugins.JSONData{ ID: "test", @@ -225,7 +226,7 @@ func TestDashboardUpdater(t *testing.T) { OrgID: 2, }, }, - installedPlugins: []plugins.PluginDTO{ + installedPlugins: []pluginstore.Plugin{ { JSONData: plugins.JSONData{ ID: "test", @@ -273,7 +274,7 @@ func TestDashboardUpdater(t *testing.T) { PluginVersion: "1.0.0", }, }, - installedPlugins: []plugins.PluginDTO{ + installedPlugins: []pluginstore.Plugin{ { JSONData: plugins.JSONData{ ID: "test", @@ -341,16 +342,16 @@ func TestDashboardUpdater(t *testing.T) { } type pluginStoreMock struct { - plugins.Store - pluginFunc func(ctx context.Context, pluginID string) (plugins.PluginDTO, bool) + pluginstore.Store + pluginFunc func(ctx context.Context, pluginID string) (pluginstore.Plugin, bool) } -func (m *pluginStoreMock) Plugin(ctx context.Context, pluginID string) (plugins.PluginDTO, bool) { +func (m *pluginStoreMock) Plugin(ctx context.Context, pluginID string) (pluginstore.Plugin, bool) { if m.pluginFunc != nil { return m.pluginFunc(ctx, pluginID) } - return plugins.PluginDTO{}, false + return pluginstore.Plugin{}, false } type pluginDashboardServiceMock struct { @@ -464,7 +465,7 @@ func (s *dashboardServiceMock) GetDashboardByPublicUid(ctx context.Context, dash type scenarioInput struct { storedPluginSettings []*pluginsettings.DTO - installedPlugins []plugins.PluginDTO + installedPlugins []pluginstore.Plugin pluginDashboards []*plugindashboards.PluginDashboard } @@ -472,7 +473,7 @@ type scenarioContext struct { t *testing.T bus bus.Bus pluginSettingsService *pluginsSettingsServiceMock - pluginStore plugins.Store + pluginStore pluginstore.Store pluginDashboardService plugindashboards.Service importDashboardService dashboardimport.Service dashboardPluginService *dashboardPluginServiceMock @@ -496,14 +497,14 @@ func scenario(t *testing.T, desc string, input scenarioInput, f func(ctx *scenar updatePluginSettingVersionArgs: []*pluginsettings.UpdatePluginSettingVersionCmd{}, } - getPlugin := func(ctx context.Context, pluginID string) (plugins.PluginDTO, bool) { + getPlugin := func(ctx context.Context, pluginID string) (pluginstore.Plugin, bool) { for _, p := range input.installedPlugins { if p.ID == pluginID { return p, true } } - return plugins.PluginDTO{}, false + return pluginstore.Plugin{}, false } sCtx.pluginSettingsService = &pluginsSettingsServiceMock{ diff --git a/pkg/services/plugindashboards/service/service.go b/pkg/services/plugindashboards/service/service.go index 861fedc8382..910f9f113f3 100644 --- a/pkg/services/plugindashboards/service/service.go +++ b/pkg/services/plugindashboards/service/service.go @@ -7,9 +7,9 @@ import ( "github.com/grafana/grafana/pkg/components/simplejson" "github.com/grafana/grafana/pkg/infra/log" - pluginDashboardsManager "github.com/grafana/grafana/pkg/plugins/manager/dashboards" "github.com/grafana/grafana/pkg/services/dashboards" "github.com/grafana/grafana/pkg/services/plugindashboards" + pluginDashboardsManager "github.com/grafana/grafana/pkg/services/pluginsintegration/dashboards" ) func ProvideService(pluginDashboardStore pluginDashboardsManager.FileStore, dashboardPluginService dashboards.PluginService) *Service { diff --git a/pkg/services/plugindashboards/service/service_test.go b/pkg/services/plugindashboards/service/service_test.go index 891b1ebcb07..16b30cca5e0 100644 --- a/pkg/services/plugindashboards/service/service_test.go +++ b/pkg/services/plugindashboards/service/service_test.go @@ -10,9 +10,9 @@ import ( "github.com/grafana/grafana/pkg/components/simplejson" "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/plugins/manager/dashboards" dashmodels "github.com/grafana/grafana/pkg/services/dashboards" "github.com/grafana/grafana/pkg/services/plugindashboards" + "github.com/grafana/grafana/pkg/services/pluginsintegration/dashboards" ) func TestGetPluginDashboards(t *testing.T) { diff --git a/pkg/plugins/manager/dashboards/filestore.go b/pkg/services/pluginsintegration/dashboards/filestore.go similarity index 91% rename from pkg/plugins/manager/dashboards/filestore.go rename to pkg/services/pluginsintegration/dashboards/filestore.go index df6b6580a5e..988650e2a42 100644 --- a/pkg/plugins/manager/dashboards/filestore.go +++ b/pkg/services/pluginsintegration/dashboards/filestore.go @@ -6,17 +6,18 @@ import ( "strings" "github.com/grafana/grafana/pkg/plugins" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/util" ) var _ FileStore = (*FileStoreManager)(nil) type FileStoreManager struct { - pluginStore plugins.Store + pluginStore pluginstore.Store pluginFileStore plugins.FileStore } -func ProvideFileStoreManager(pluginStore plugins.Store, pluginFileStore plugins.FileStore) *FileStoreManager { +func ProvideFileStoreManager(pluginStore pluginstore.Store, pluginFileStore plugins.FileStore) *FileStoreManager { return &FileStoreManager{ pluginStore: pluginStore, pluginFileStore: pluginFileStore, diff --git a/pkg/plugins/manager/dashboards/filestore_test.go b/pkg/services/pluginsintegration/dashboards/filestore_test.go similarity index 96% rename from pkg/plugins/manager/dashboards/filestore_test.go rename to pkg/services/pluginsintegration/dashboards/filestore_test.go index f0b78fa9a18..9981e768d02 100644 --- a/pkg/plugins/manager/dashboards/filestore_test.go +++ b/pkg/services/pluginsintegration/dashboards/filestore_test.go @@ -10,7 +10,7 @@ import ( "github.com/stretchr/testify/require" "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/plugins/manager/fakes" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" ) func TestDashboardFileStore(t *testing.T) { @@ -221,8 +221,8 @@ func setupPluginDashboardsForTest(t *testing.T) *FileStoreManager { } return &FileStoreManager{ - pluginStore: &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{p1.ToDTO(), p2.ToDTO()}, + pluginStore: &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{pluginstore.ToGrafanaDTO(p1), pluginstore.ToGrafanaDTO(p2)}, }, } } diff --git a/pkg/plugins/manager/dashboards/ifaces.go b/pkg/services/pluginsintegration/dashboards/ifaces.go similarity index 100% rename from pkg/plugins/manager/dashboards/ifaces.go rename to pkg/services/pluginsintegration/dashboards/ifaces.go diff --git a/pkg/services/pluginsintegration/plugincontext/plugincontext.go b/pkg/services/pluginsintegration/plugincontext/plugincontext.go index 31342549762..a04343c56e7 100644 --- a/pkg/services/pluginsintegration/plugincontext/plugincontext.go +++ b/pkg/services/pluginsintegration/plugincontext/plugincontext.go @@ -10,16 +10,16 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana/pkg/infra/localcache" - "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/services/auth/identity" "github.com/grafana/grafana/pkg/services/datasources" "github.com/grafana/grafana/pkg/services/pluginsintegration/adapters" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" ) var ErrPluginNotFound = errors.New("plugin not found") -func ProvideService(cacheService *localcache.CacheService, pluginStore plugins.Store, +func ProvideService(cacheService *localcache.CacheService, pluginStore pluginstore.Store, dataSourceService datasources.DataSourceService, pluginSettingsService pluginsettings.Service) *Provider { return &Provider{ cacheService: cacheService, @@ -31,7 +31,7 @@ func ProvideService(cacheService *localcache.CacheService, pluginStore plugins.S type Provider struct { cacheService *localcache.CacheService - pluginStore plugins.Store + pluginStore pluginstore.Store dataSourceService datasources.DataSourceService pluginSettingsService pluginsettings.Service } diff --git a/pkg/services/pluginsintegration/plugins_integration_test.go b/pkg/services/pluginsintegration/plugins_integration_test.go index 8caa1cc2caa..85e9c0cbf65 100644 --- a/pkg/services/pluginsintegration/plugins_integration_test.go +++ b/pkg/services/pluginsintegration/plugins_integration_test.go @@ -18,9 +18,9 @@ import ( "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/plugins/backendplugin/coreplugin" "github.com/grafana/grafana/pkg/plugins/manager/registry" - "github.com/grafana/grafana/pkg/plugins/manager/store" "github.com/grafana/grafana/pkg/services/accesscontrol/acimpl" "github.com/grafana/grafana/pkg/services/featuremgmt" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/searchV2" "github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/tsdb/azuremonitor" @@ -134,7 +134,7 @@ func verifyPluginQuery(t *testing.T, ctx context.Context, c plugins.Client) { require.JSONEq(t, `{"results":{"A":{"frames":[{"schema":{"refId":"A","fields":[{"name":"time","type":"time","typeInfo":{"frame":"time.Time"}},{"name":"A-series","type":"number","typeInfo":{"frame":"int64","nullable":true}}]},"data":{"values":[[1661420570000,1661420630000,1661420690000,1661420750000,1661420810000,1661420870000],[1,20,90,30,5,0]]}}],"status":200}}}`, string(payload)) } -func verifyCorePluginCatalogue(t *testing.T, ctx context.Context, ps *store.Service) { +func verifyCorePluginCatalogue(t *testing.T, ctx context.Context, ps *pluginstore.Service) { t.Helper() expPanels := map[string]struct{}{ @@ -207,7 +207,7 @@ func verifyCorePluginCatalogue(t *testing.T, ctx context.Context, ps *store.Serv require.Equal(t, len(expPanels), len(panels)) for _, p := range panels { p, exists := ps.Plugin(ctx, p.ID) - require.NotEqual(t, plugins.PluginDTO{}, p) + require.NotEqual(t, pluginstore.Plugin{}, p) require.True(t, exists) require.Contains(t, expPanels, p.ID) } @@ -216,7 +216,7 @@ func verifyCorePluginCatalogue(t *testing.T, ctx context.Context, ps *store.Serv require.Equal(t, len(expDataSources), len(dataSources)) for _, ds := range dataSources { p, exists := ps.Plugin(ctx, ds.ID) - require.NotEqual(t, plugins.PluginDTO{}, p) + require.NotEqual(t, pluginstore.Plugin{}, p) require.True(t, exists) require.Contains(t, expDataSources, ds.ID) } @@ -233,7 +233,7 @@ func verifyCorePluginCatalogue(t *testing.T, ctx context.Context, ps *store.Serv require.Equal(t, len(expPanels)+len(expDataSources)+len(expApps), len(ps.Plugins(ctx))) } -func verifyBundledPlugins(t *testing.T, ctx context.Context, ps *store.Service) { +func verifyBundledPlugins(t *testing.T, ctx context.Context, ps *pluginstore.Service) { t.Helper() dsPlugins := make(map[string]struct{}) @@ -243,7 +243,7 @@ func verifyBundledPlugins(t *testing.T, ctx context.Context, ps *store.Service) inputPlugin, exists := ps.Plugin(ctx, "input") require.True(t, exists) - require.NotEqual(t, plugins.PluginDTO{}, inputPlugin) + require.NotEqual(t, pluginstore.Plugin{}, inputPlugin) require.NotNil(t, dsPlugins["input"]) pluginRoutes := make(map[string]*plugins.StaticRoute) diff --git a/pkg/services/pluginsintegration/pluginsintegration.go b/pkg/services/pluginsintegration/pluginsintegration.go index eaeabcba025..b32b7579a6a 100644 --- a/pkg/services/pluginsintegration/pluginsintegration.go +++ b/pkg/services/pluginsintegration/pluginsintegration.go @@ -24,7 +24,6 @@ import ( "github.com/grafana/grafana/pkg/plugins/manager/registry" "github.com/grafana/grafana/pkg/plugins/manager/signature" "github.com/grafana/grafana/pkg/plugins/manager/sources" - "github.com/grafana/grafana/pkg/plugins/manager/store" "github.com/grafana/grafana/pkg/plugins/oauth" "github.com/grafana/grafana/pkg/plugins/pluginscdn" "github.com/grafana/grafana/pkg/plugins/repo" @@ -46,6 +45,7 @@ import ( "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginerrs" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" pluginSettings "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings/service" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/pluginsintegration/serviceregistration" "github.com/grafana/grafana/pkg/setting" ) @@ -53,11 +53,11 @@ import ( // WireSet provides a wire.ProviderSet of plugin providers. var WireSet = wire.NewSet( config.ProvideConfig, - store.ProvideService, - wire.Bind(new(plugins.Store), new(*store.Service)), - wire.Bind(new(plugins.RendererManager), new(*store.Service)), - wire.Bind(new(plugins.SecretsPluginManager), new(*store.Service)), - wire.Bind(new(plugins.StaticRouteResolver), new(*store.Service)), + pluginstore.ProvideService, + wire.Bind(new(pluginstore.Store), new(*pluginstore.Service)), + wire.Bind(new(plugins.RendererManager), new(*pluginstore.Service)), + wire.Bind(new(plugins.SecretsPluginManager), new(*pluginstore.Service)), + wire.Bind(new(plugins.StaticRouteResolver), new(*pluginstore.Service)), ProvideClientDecorator, wire.Bind(new(plugins.Client), new(*client.Decorator)), process.ProvideService, diff --git a/pkg/services/pluginsintegration/pluginstore/fake.go b/pkg/services/pluginsintegration/pluginstore/fake.go new file mode 100644 index 00000000000..7c09fb15c67 --- /dev/null +++ b/pkg/services/pluginsintegration/pluginstore/fake.go @@ -0,0 +1,38 @@ +package pluginstore + +import ( + "context" + + "github.com/grafana/grafana/pkg/plugins" +) + +type FakePluginStore struct { + PluginList []Plugin +} + +func (pr *FakePluginStore) Plugin(_ context.Context, pluginID string) (Plugin, bool) { + for _, v := range pr.PluginList { + if v.ID == pluginID { + return v, true + } + } + + return Plugin{}, false +} + +func (pr *FakePluginStore) Plugins(_ context.Context, pluginTypes ...plugins.Type) []Plugin { + var result []Plugin + if len(pluginTypes) == 0 { + pluginTypes = plugins.PluginTypes + } + + for _, v := range pr.PluginList { + for _, t := range pluginTypes { + if v.Type == t { + result = append(result, v) + } + } + } + + return result +} diff --git a/pkg/services/pluginsintegration/pluginstore/plugins.go b/pkg/services/pluginsintegration/pluginstore/plugins.go new file mode 100644 index 00000000000..fe11e33463f --- /dev/null +++ b/pkg/services/pluginsintegration/pluginstore/plugins.go @@ -0,0 +1,78 @@ +package pluginstore + +import ( + "github.com/grafana/grafana-plugin-sdk-go/backend" + + "github.com/grafana/grafana/pkg/plugins" +) + +type Plugin struct { + plugins.JSONData + + fs plugins.FS + supportsStreaming bool + + Class plugins.Class + + // App fields + IncludedInAppID string + DefaultNavURL string + Pinned bool + + // Signature fields + Signature plugins.SignatureStatus + SignatureType plugins.SignatureType + SignatureOrg string + SignatureError *plugins.SignatureError + + // SystemJS fields + Module string + BaseURL string + + AngularDetected bool + + // This will be moved to plugin.json when we have general support in gcom + Alias string `json:"alias,omitempty"` +} + +func (p Plugin) SupportsStreaming() bool { + return p.supportsStreaming +} + +func (p Plugin) Base() string { + return p.fs.Base() +} + +func (p Plugin) IsApp() bool { + return p.Type == plugins.TypeApp +} + +func (p Plugin) IsCorePlugin() bool { + return p.Class == plugins.ClassCore +} + +func ToGrafanaDTO(p *plugins.Plugin) Plugin { + supportsStreaming := false + pc, exists := p.Client() + if exists && pc != nil && pc.(backend.StreamHandler) != nil { + supportsStreaming = false + } + + return Plugin{ + fs: p.FS, + supportsStreaming: supportsStreaming, + Class: p.Class, + JSONData: p.JSONData, + IncludedInAppID: p.IncludedInAppID, + DefaultNavURL: p.DefaultNavURL, + Pinned: p.Pinned, + Signature: p.Signature, + SignatureType: p.SignatureType, + SignatureOrg: p.SignatureOrg, + SignatureError: p.SignatureError, + Module: p.Module, + BaseURL: p.BaseURL, + AngularDetected: p.AngularDetected, + Alias: p.Alias, + } +} diff --git a/pkg/plugins/manager/store/store.go b/pkg/services/pluginsintegration/pluginstore/store.go similarity index 86% rename from pkg/plugins/manager/store/store.go rename to pkg/services/pluginsintegration/pluginstore/store.go index a7ddff6f6f1..ea02358f4b9 100644 --- a/pkg/plugins/manager/store/store.go +++ b/pkg/services/pluginsintegration/pluginstore/store.go @@ -1,4 +1,4 @@ -package store +package pluginstore import ( "context" @@ -11,7 +11,15 @@ import ( "github.com/grafana/grafana/pkg/plugins/manager/sources" ) -var _ plugins.Store = (*Service)(nil) +var _ Store = (*Service)(nil) + +// Store is the publicly accessible storage for plugins. +type Store interface { + // Plugin finds a plugin by its ID. + Plugin(ctx context.Context, pluginID string) (Plugin, bool) + // Plugins returns plugins by their requested type. + Plugins(ctx context.Context, pluginTypes ...plugins.Type) []Plugin +} type Service struct { pluginRegistry registry.Service @@ -42,16 +50,16 @@ func New(pluginRegistry registry.Service, pluginLoader loader.Service) *Service } } -func (s *Service) Plugin(ctx context.Context, pluginID string) (plugins.PluginDTO, bool) { +func (s *Service) Plugin(ctx context.Context, pluginID string) (Plugin, bool) { p, exists := s.plugin(ctx, pluginID) if !exists { - return plugins.PluginDTO{}, false + return Plugin{}, false } - return p.ToDTO(), true + return ToGrafanaDTO(p), true } -func (s *Service) Plugins(ctx context.Context, pluginTypes ...plugins.Type) []plugins.PluginDTO { +func (s *Service) Plugins(ctx context.Context, pluginTypes ...plugins.Type) []Plugin { // if no types passed, assume all if len(pluginTypes) == 0 { pluginTypes = plugins.PluginTypes @@ -62,10 +70,10 @@ func (s *Service) Plugins(ctx context.Context, pluginTypes ...plugins.Type) []pl requestedTypes[pt] = struct{}{} } - pluginsList := make([]plugins.PluginDTO, 0) + pluginsList := make([]Plugin, 0) for _, p := range s.availablePlugins(ctx) { if _, exists := requestedTypes[p.Type]; exists { - pluginsList = append(pluginsList, p.ToDTO()) + pluginsList = append(pluginsList, ToGrafanaDTO(p)) } } return pluginsList diff --git a/pkg/plugins/manager/store/store_test.go b/pkg/services/pluginsintegration/pluginstore/store_test.go similarity index 93% rename from pkg/plugins/manager/store/store_test.go rename to pkg/services/pluginsintegration/pluginstore/store_test.go index 877d6811988..46890aa6fc5 100644 --- a/pkg/plugins/manager/store/store_test.go +++ b/pkg/services/pluginsintegration/pluginstore/store_test.go @@ -1,4 +1,4 @@ -package store +package pluginstore import ( "context" @@ -65,11 +65,11 @@ func TestStore_Plugin(t *testing.T) { p, exists := ps.Plugin(context.Background(), p1.ID) require.False(t, exists) - require.Equal(t, plugins.PluginDTO{}, p) + require.Equal(t, Plugin{}, p) p, exists = ps.Plugin(context.Background(), p2.ID) require.True(t, exists) - require.Equal(t, p, p2.ToDTO()) + require.Equal(t, p, ToGrafanaDTO(p2)) }) } @@ -92,20 +92,27 @@ func TestStore_Plugins(t *testing.T) { }, }, &fakes.FakeLoader{}) + ToGrafanaDTO(p1) pss := ps.Plugins(context.Background()) - require.Equal(t, pss, []plugins.PluginDTO{p1.ToDTO(), p2.ToDTO(), p3.ToDTO(), p4.ToDTO()}) + require.Equal(t, pss, []Plugin{ + ToGrafanaDTO(p1), ToGrafanaDTO(p2), + ToGrafanaDTO(p3), ToGrafanaDTO(p4), + }) pss = ps.Plugins(context.Background(), plugins.TypeApp) - require.Equal(t, pss, []plugins.PluginDTO{p4.ToDTO()}) + require.Equal(t, pss, []Plugin{ToGrafanaDTO(p4)}) pss = ps.Plugins(context.Background(), plugins.TypePanel) - require.Equal(t, pss, []plugins.PluginDTO{p2.ToDTO(), p3.ToDTO()}) + require.Equal(t, pss, []Plugin{ToGrafanaDTO(p2), ToGrafanaDTO(p3)}) pss = ps.Plugins(context.Background(), plugins.TypeDataSource) - require.Equal(t, pss, []plugins.PluginDTO{p1.ToDTO()}) + require.Equal(t, pss, []Plugin{ToGrafanaDTO(p1)}) pss = ps.Plugins(context.Background(), plugins.TypeDataSource, plugins.TypeApp, plugins.TypePanel) - require.Equal(t, pss, []plugins.PluginDTO{p1.ToDTO(), p2.ToDTO(), p3.ToDTO(), p4.ToDTO()}) + require.Equal(t, pss, []Plugin{ + ToGrafanaDTO(p1), ToGrafanaDTO(p2), + ToGrafanaDTO(p3), ToGrafanaDTO(p4), + }) }) } diff --git a/pkg/services/pluginsintegration/test_helper.go b/pkg/services/pluginsintegration/test_helper.go index bbb674118e0..b30996ad451 100644 --- a/pkg/services/pluginsintegration/test_helper.go +++ b/pkg/services/pluginsintegration/test_helper.go @@ -26,18 +26,18 @@ import ( "github.com/grafana/grafana/pkg/plugins/manager/signature" "github.com/grafana/grafana/pkg/plugins/manager/signature/statickey" "github.com/grafana/grafana/pkg/plugins/manager/sources" - "github.com/grafana/grafana/pkg/plugins/manager/store" "github.com/grafana/grafana/pkg/plugins/pluginscdn" "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/pluginsintegration/config" "github.com/grafana/grafana/pkg/services/pluginsintegration/pipeline" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginerrs" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/setting" ) type IntegrationTestCtx struct { PluginClient plugins.Client - PluginStore *store.Service + PluginStore *pluginstore.Service PluginRegistry registry.Service } @@ -66,7 +66,7 @@ func CreateIntegrationTestCtx(t *testing.T, cfg *setting.Cfg, coreRegistry *core Terminator: term, }) - ps, err := store.ProvideService(reg, sources.ProvideService(cfg, pCfg), l) + ps, err := pluginstore.ProvideService(reg, sources.ProvideService(cfg, pCfg), l) require.NoError(t, err) return &IntegrationTestCtx{ diff --git a/pkg/services/provisioning/plugins/config_reader.go b/pkg/services/provisioning/plugins/config_reader.go index bb066cb2e0c..2b626066b46 100644 --- a/pkg/services/provisioning/plugins/config_reader.go +++ b/pkg/services/provisioning/plugins/config_reader.go @@ -11,7 +11,7 @@ import ( "gopkg.in/yaml.v3" "github.com/grafana/grafana/pkg/infra/log" - "github.com/grafana/grafana/pkg/plugins" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" ) type configReader interface { @@ -20,10 +20,10 @@ type configReader interface { type configReaderImpl struct { log log.Logger - pluginStore plugins.Store + pluginStore pluginstore.Store } -func newConfigReader(logger log.Logger, pluginStore plugins.Store) configReader { +func newConfigReader(logger log.Logger, pluginStore pluginstore.Store) configReader { return &configReaderImpl{log: logger, pluginStore: pluginStore} } diff --git a/pkg/services/provisioning/plugins/config_reader_test.go b/pkg/services/provisioning/plugins/config_reader_test.go index 9f4209a5e4a..cb4bdbc4710 100644 --- a/pkg/services/provisioning/plugins/config_reader_test.go +++ b/pkg/services/provisioning/plugins/config_reader_test.go @@ -8,7 +8,7 @@ import ( "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/plugins/manager/fakes" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" ) const ( @@ -34,7 +34,7 @@ func TestConfigReader(t *testing.T) { }) t.Run("Unknown app plugin should return error", func(t *testing.T) { - cfgProvider := newConfigReader(log.New("test logger"), &fakes.FakePluginStore{}) + cfgProvider := newConfigReader(log.New("test logger"), &pluginstore.FakePluginStore{}) _, err := cfgProvider.readConfig(context.Background(), unknownApp) require.Error(t, err) require.Equal(t, "plugin not installed: \"nonexisting\"", err.Error()) @@ -48,8 +48,8 @@ func TestConfigReader(t *testing.T) { }) t.Run("Can read correct properties", func(t *testing.T) { - pm := &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{ + pm := &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{ {JSONData: plugins.JSONData{ID: "test-plugin"}}, {JSONData: plugins.JSONData{ID: "test-plugin-2"}}, }, diff --git a/pkg/services/provisioning/plugins/plugin_provisioner.go b/pkg/services/provisioning/plugins/plugin_provisioner.go index 41c63bd8edf..83d334a573b 100644 --- a/pkg/services/provisioning/plugins/plugin_provisioner.go +++ b/pkg/services/provisioning/plugins/plugin_provisioner.go @@ -5,14 +5,14 @@ import ( "errors" "github.com/grafana/grafana/pkg/infra/log" - "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/services/org" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" ) // Provision scans a directory for provisioning config files // and provisions the app in those files. -func Provision(ctx context.Context, configDirectory string, pluginStore plugins.Store, pluginSettings pluginsettings.Service, orgService org.Service) error { +func Provision(ctx context.Context, configDirectory string, pluginStore pluginstore.Store, pluginSettings pluginsettings.Service, orgService org.Service) error { logger := log.New("provisioning.plugins") ap := PluginProvisioner{ log: logger, diff --git a/pkg/services/provisioning/provisioning.go b/pkg/services/provisioning/provisioning.go index 9e490635456..86a95ff9d6c 100644 --- a/pkg/services/provisioning/provisioning.go +++ b/pkg/services/provisioning/provisioning.go @@ -8,7 +8,6 @@ import ( "github.com/grafana/grafana/pkg/infra/db" "github.com/grafana/grafana/pkg/infra/log" - plugifaces "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/registry" "github.com/grafana/grafana/pkg/services/accesscontrol" "github.com/grafana/grafana/pkg/services/alerting" @@ -22,6 +21,7 @@ import ( "github.com/grafana/grafana/pkg/services/notifications" "github.com/grafana/grafana/pkg/services/org" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" prov_alerting "github.com/grafana/grafana/pkg/services/provisioning/alerting" "github.com/grafana/grafana/pkg/services/provisioning/dashboards" "github.com/grafana/grafana/pkg/services/provisioning/datasources" @@ -37,7 +37,7 @@ func ProvideService( ac accesscontrol.AccessControl, cfg *setting.Cfg, sqlStore db.DB, - pluginStore plugifaces.Store, + pluginStore pluginstore.Store, encryptionService encryption.Internal, notificatonService *notifications.NotificationService, dashboardProvisioningService dashboardservice.DashboardProvisioningService, @@ -108,7 +108,7 @@ func newProvisioningServiceImpl( newDashboardProvisioner dashboards.DashboardProvisionerFactory, provisionNotifiers func(context.Context, string, notifiers.Manager, org.Service, encryption.Internal, *notifications.NotificationService) error, provisionDatasources func(context.Context, string, datasources.Store, datasources.CorrelationsStore, org.Service) error, - provisionPlugins func(context.Context, string, plugifaces.Store, pluginsettings.Service, org.Service) error, + provisionPlugins func(context.Context, string, pluginstore.Store, pluginsettings.Service, org.Service) error, ) *ProvisioningServiceImpl { return &ProvisioningServiceImpl{ log: log.New("provisioning"), @@ -124,7 +124,7 @@ type ProvisioningServiceImpl struct { SQLStore db.DB orgService org.Service ac accesscontrol.AccessControl - pluginStore plugifaces.Store + pluginStore pluginstore.Store EncryptionService encryption.Internal NotificationService *notifications.NotificationService log log.Logger @@ -133,7 +133,7 @@ type ProvisioningServiceImpl struct { dashboardProvisioner dashboards.DashboardProvisioner provisionNotifiers func(context.Context, string, notifiers.Manager, org.Service, encryption.Internal, *notifications.NotificationService) error provisionDatasources func(context.Context, string, datasources.Store, datasources.CorrelationsStore, org.Service) error - provisionPlugins func(context.Context, string, plugifaces.Store, pluginsettings.Service, org.Service) error + provisionPlugins func(context.Context, string, pluginstore.Store, pluginsettings.Service, org.Service) error provisionAlerting func(context.Context, prov_alerting.ProvisionerConfig) error mutex sync.Mutex dashboardProvisioningService dashboardservice.DashboardProvisioningService diff --git a/pkg/services/publicdashboards/api/common_test.go b/pkg/services/publicdashboards/api/common_test.go index e25249401bf..2a34d991648 100644 --- a/pkg/services/publicdashboards/api/common_test.go +++ b/pkg/services/publicdashboards/api/common_test.go @@ -16,7 +16,6 @@ import ( "github.com/grafana/grafana/pkg/infra/localcache" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/plugins" - pluginFakes "github.com/grafana/grafana/pkg/plugins/manager/fakes" "github.com/grafana/grafana/pkg/services/accesscontrol/acimpl" "github.com/grafana/grafana/pkg/services/contexthandler/ctxkey" contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model" @@ -27,6 +26,7 @@ import ( "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext" pluginSettings "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings/service" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/publicdashboards" "github.com/grafana/grafana/pkg/services/query" fakeSecrets "github.com/grafana/grafana/pkg/services/secrets/fakes" @@ -119,8 +119,8 @@ func buildQueryDataService(t *testing.T, cs datasources.CacheService, fpc *fakeP } ds := &fakeDatasources.FakeDataSourceService{} - pCtxProvider := plugincontext.ProvideService(localcache.ProvideService(), &pluginFakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{ + pCtxProvider := plugincontext.ProvideService(localcache.ProvideService(), &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{ { JSONData: plugins.JSONData{ ID: "mysql", diff --git a/pkg/services/query/query_test.go b/pkg/services/query/query_test.go index 847b30671ee..811241d5f94 100644 --- a/pkg/services/query/query_test.go +++ b/pkg/services/query/query_test.go @@ -24,7 +24,6 @@ import ( "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/models/roletype" "github.com/grafana/grafana/pkg/plugins" - pluginFakes "github.com/grafana/grafana/pkg/plugins/manager/fakes" "github.com/grafana/grafana/pkg/services/auth/identity" "github.com/grafana/grafana/pkg/services/contexthandler" "github.com/grafana/grafana/pkg/services/contexthandler/ctxkey" @@ -34,6 +33,7 @@ import ( "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext" pluginSettings "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings/service" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/secrets/fakes" secretskvs "github.com/grafana/grafana/pkg/services/secrets/kvstore" secretsmng "github.com/grafana/grafana/pkg/services/secrets/manager" @@ -468,8 +468,8 @@ func setup(t *testing.T) *testContext { } pCtxProvider := plugincontext.ProvideService( - localcache.ProvideService(), &pluginFakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{ + localcache.ProvideService(), &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{ {JSONData: plugins.JSONData{ID: "postgres"}}, {JSONData: plugins.JSONData{ID: "testdata"}}, {JSONData: plugins.JSONData{ID: "mysql"}}, diff --git a/pkg/services/quota/quotaimpl/quota_test.go b/pkg/services/quota/quotaimpl/quota_test.go index 505ce6b79ba..9a3a1cf7d03 100644 --- a/pkg/services/quota/quotaimpl/quota_test.go +++ b/pkg/services/quota/quotaimpl/quota_test.go @@ -12,7 +12,6 @@ import ( "github.com/grafana/grafana/pkg/bus" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/infra/tracing" - pluginFakes "github.com/grafana/grafana/pkg/plugins/manager/fakes" acmock "github.com/grafana/grafana/pkg/services/accesscontrol/mock" "github.com/grafana/grafana/pkg/services/annotations/annotationstest" "github.com/grafana/grafana/pkg/services/apikey" @@ -31,6 +30,7 @@ import ( ngstore "github.com/grafana/grafana/pkg/services/ngalert/store" "github.com/grafana/grafana/pkg/services/org" "github.com/grafana/grafana/pkg/services/org/orgimpl" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/quota" "github.com/grafana/grafana/pkg/services/quota/quotatest" "github.com/grafana/grafana/pkg/services/secrets/fakes" @@ -484,7 +484,7 @@ func setupEnv(t *testing.T, sqlStore *sqlstore.SQLStore, b bus.Bus, quotaService _, err = ngalert.ProvideService( sqlStore.Cfg, featuremgmt.WithFeatures(), nil, nil, routing.NewRouteRegister(), sqlStore, nil, nil, nil, quotaService, secretsService, nil, m, &foldertest.FakeService{}, &acmock.Mock{}, &dashboards.FakeDashboardService{}, nil, b, &acmock.Mock{}, - annotationstest.NewFakeAnnotationsRepo(), &pluginFakes.FakePluginStore{}, tracer, ruleStore, + annotationstest.NewFakeAnnotationsRepo(), &pluginstore.FakePluginStore{}, tracer, ruleStore, ) require.NoError(t, err) _, err = storesrv.ProvideService(sqlStore, featuremgmt.WithFeatures(), sqlStore.Cfg, quotaService, storesrv.ProvideSystemUsersService()) diff --git a/pkg/services/store/resolver/ds_cache.go b/pkg/services/store/resolver/ds_cache.go index b66795f3641..74e945b8beb 100644 --- a/pkg/services/store/resolver/ds_cache.go +++ b/pkg/services/store/resolver/ds_cache.go @@ -7,8 +7,8 @@ import ( "time" "github.com/grafana/grafana/pkg/infra/appcontext" - "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/services/datasources" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/tsdb/grafanads" ) @@ -23,7 +23,7 @@ type dsVal struct { type dsCache struct { ds datasources.DataSourceService - pluginStore plugins.Store + pluginStore pluginstore.Store cache map[int64]map[string]*dsVal timestamp time.Time // across all orgIDs mu sync.Mutex diff --git a/pkg/services/store/resolver/service.go b/pkg/services/store/resolver/service.go index 01c01ba732b..8adf1c6251e 100644 --- a/pkg/services/store/resolver/service.go +++ b/pkg/services/store/resolver/service.go @@ -7,6 +7,7 @@ import ( "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/services/datasources" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/store/entity" ) @@ -31,7 +32,7 @@ type EntityReferenceResolver interface { Resolve(ctx context.Context, ref *entity.EntityExternalReference) (ResolutionInfo, error) } -func ProvideEntityReferenceResolver(ds datasources.DataSourceService, pluginStore plugins.Store) EntityReferenceResolver { +func ProvideEntityReferenceResolver(ds datasources.DataSourceService, pluginStore pluginstore.Store) EntityReferenceResolver { return &standardReferenceResolver{ pluginStore: pluginStore, ds: dsCache{ @@ -42,7 +43,7 @@ func ProvideEntityReferenceResolver(ds datasources.DataSourceService, pluginStor } type standardReferenceResolver struct { - pluginStore plugins.Store + pluginStore pluginstore.Store ds dsCache } diff --git a/pkg/services/store/resolver/service_test.go b/pkg/services/store/resolver/service_test.go index 405f782ed43..c62356b50f0 100644 --- a/pkg/services/store/resolver/service_test.go +++ b/pkg/services/store/resolver/service_test.go @@ -7,10 +7,9 @@ import ( "github.com/stretchr/testify/require" "github.com/grafana/grafana/pkg/infra/appcontext" - "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/plugins/manager/fakes" "github.com/grafana/grafana/pkg/services/datasources" fakeDatasources "github.com/grafana/grafana/pkg/services/datasources/fakes" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/store/entity" "github.com/grafana/grafana/pkg/services/user" ) @@ -37,15 +36,15 @@ func TestResolver(t *testing.T) { }, } - p1 := plugins.PluginDTO{} - p2 := plugins.PluginDTO{} - p3 := plugins.PluginDTO{} + p1 := pluginstore.Plugin{} + p2 := pluginstore.Plugin{} + p3 := pluginstore.Plugin{} p1.ID = "influx" p2.ID = "heatmap" p3.ID = "xyz" - pluginStore := &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{p1, p2, p3}, + pluginStore := &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{p1, p2, p3}, } provider := ProvideEntityReferenceResolver(ds, pluginStore) diff --git a/pkg/services/supportbundles/supportbundlesimpl/collectors.go b/pkg/services/supportbundles/supportbundlesimpl/collectors.go index 57a39622f8f..8b2c08f8740 100644 --- a/pkg/services/supportbundles/supportbundlesimpl/collectors.go +++ b/pkg/services/supportbundles/supportbundlesimpl/collectors.go @@ -10,6 +10,7 @@ import ( "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/supportbundles" "github.com/grafana/grafana/pkg/setting" ) @@ -105,7 +106,7 @@ func settingsCollector(settings setting.Provider) supportbundles.Collector { } } -func pluginInfoCollector(pluginStore plugins.Store, pluginSettings pluginsettings.Service, logger log.Logger) supportbundles.Collector { +func pluginInfoCollector(pluginStore pluginstore.Store, pluginSettings pluginsettings.Service, logger log.Logger) supportbundles.Collector { return supportbundles.Collector{ UID: "plugins", DisplayName: "Plugin information", diff --git a/pkg/services/supportbundles/supportbundlesimpl/service.go b/pkg/services/supportbundles/supportbundlesimpl/service.go index dc9b0b26a9f..df569dc408a 100644 --- a/pkg/services/supportbundles/supportbundlesimpl/service.go +++ b/pkg/services/supportbundles/supportbundlesimpl/service.go @@ -11,11 +11,11 @@ import ( "github.com/grafana/grafana/pkg/infra/kvstore" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/infra/usagestats" - "github.com/grafana/grafana/pkg/plugins" ac "github.com/grafana/grafana/pkg/services/accesscontrol" "github.com/grafana/grafana/pkg/services/auth/identity" "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/supportbundles" "github.com/grafana/grafana/pkg/services/supportbundles/bundleregistry" "github.com/grafana/grafana/pkg/setting" @@ -32,7 +32,7 @@ type Service struct { cfg *setting.Cfg features *featuremgmt.FeatureManager pluginSettings pluginsettings.Service - pluginStore plugins.Store + pluginStore pluginstore.Store store bundleStore log log.Logger @@ -51,7 +51,7 @@ func ProvideService( httpServer *grafanaApi.HTTPServer, kvStore kvstore.KVStore, pluginSettings pluginsettings.Service, - pluginStore plugins.Store, + pluginStore pluginstore.Store, routeRegister routing.RouteRegister, settings setting.Provider, sql db.DB, diff --git a/pkg/services/updatechecker/plugins.go b/pkg/services/updatechecker/plugins.go index 4cc2bfa0ee6..67a9f660124 100644 --- a/pkg/services/updatechecker/plugins.go +++ b/pkg/services/updatechecker/plugins.go @@ -18,7 +18,7 @@ import ( "github.com/grafana/grafana/pkg/infra/httpclient/httpclientprovider" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/infra/tracing" - "github.com/grafana/grafana/pkg/plugins" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/setting" ) @@ -27,14 +27,14 @@ type PluginsService struct { enabled bool grafanaVersion string - pluginStore plugins.Store + pluginStore pluginstore.Store httpClient httpClient mutex sync.RWMutex log log.Logger tracer tracing.Tracer } -func ProvidePluginsService(cfg *setting.Cfg, pluginStore plugins.Store, tracer tracing.Tracer) (*PluginsService, error) { +func ProvidePluginsService(cfg *setting.Cfg, pluginStore pluginstore.Store, tracer tracing.Tracer) (*PluginsService, error) { logger := log.New("plugins.update.checker") cl, err := httpclient.New(httpclient.Options{ Middlewares: []httpclient.Middleware{ @@ -180,7 +180,7 @@ func canUpdate(v1, v2 string) bool { return ver1.LessThan(ver2) } -func (s *PluginsService) pluginIDsCSV(m map[string]plugins.PluginDTO) string { +func (s *PluginsService) pluginIDsCSV(m map[string]pluginstore.Plugin) string { ids := make([]string, 0, len(m)) for pluginID := range m { ids = append(ids, pluginID) @@ -189,8 +189,8 @@ func (s *PluginsService) pluginIDsCSV(m map[string]plugins.PluginDTO) string { return strings.Join(ids, ",") } -func (s *PluginsService) pluginsEligibleForVersionCheck(ctx context.Context) map[string]plugins.PluginDTO { - result := make(map[string]plugins.PluginDTO) +func (s *PluginsService) pluginsEligibleForVersionCheck(ctx context.Context) map[string]pluginstore.Plugin { + result := make(map[string]pluginstore.Plugin) for _, p := range s.pluginStore.Plugins(ctx) { if p.IsCorePlugin() { continue diff --git a/pkg/services/updatechecker/plugins_test.go b/pkg/services/updatechecker/plugins_test.go index 6934c0a4ae9..e9fa4810eb8 100644 --- a/pkg/services/updatechecker/plugins_test.go +++ b/pkg/services/updatechecker/plugins_test.go @@ -12,7 +12,7 @@ import ( "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/plugins/manager/fakes" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" ) func TestPluginUpdateChecker_HasUpdate(t *testing.T) { @@ -21,8 +21,8 @@ func TestPluginUpdateChecker_HasUpdate(t *testing.T) { availableUpdates: map[string]string{ "test-ds": "1.0.0", }, - pluginStore: &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{ + pluginStore: &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{ { JSONData: plugins.JSONData{ ID: "test-ds", @@ -44,8 +44,8 @@ func TestPluginUpdateChecker_HasUpdate(t *testing.T) { "test-panel": "0.9.0", "test-app": "0.0.1", }, - pluginStore: &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{ + pluginStore: &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{ { JSONData: plugins.JSONData{ ID: "test-ds", @@ -86,8 +86,8 @@ func TestPluginUpdateChecker_HasUpdate(t *testing.T) { availableUpdates: map[string]string{ "test-panel": "0.9.0", }, - pluginStore: &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{ + pluginStore: &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{ { JSONData: plugins.JSONData{ ID: "test-ds", @@ -129,8 +129,8 @@ func TestPluginUpdateChecker_checkForUpdates(t *testing.T) { availableUpdates: map[string]string{ "test-app": "1.0.0", }, - pluginStore: &fakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{ + pluginStore: &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{ { JSONData: plugins.JSONData{ ID: "test-ds", diff --git a/pkg/tsdb/legacydata/service/service_test.go b/pkg/tsdb/legacydata/service/service_test.go index 2ee1f41c79b..f80d5a5ace5 100644 --- a/pkg/tsdb/legacydata/service/service_test.go +++ b/pkg/tsdb/legacydata/service/service_test.go @@ -12,13 +12,13 @@ import ( "github.com/grafana/grafana/pkg/infra/localcache" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/plugins" - pluginFakes "github.com/grafana/grafana/pkg/plugins/manager/fakes" acmock "github.com/grafana/grafana/pkg/services/accesscontrol/mock" "github.com/grafana/grafana/pkg/services/datasources" datasourceservice "github.com/grafana/grafana/pkg/services/datasources/service" "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext" pluginSettings "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings/service" + "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/quota/quotatest" "github.com/grafana/grafana/pkg/services/secrets/fakes" secretskvs "github.com/grafana/grafana/pkg/services/secrets/kvstore" @@ -43,8 +43,8 @@ func TestHandleRequest(t *testing.T) { dsService, err := datasourceservice.ProvideService(nil, secretsService, secretsStore, sqlStore.Cfg, featuremgmt.WithFeatures(), acmock.New(), datasourcePermissions, quotaService) require.NoError(t, err) - pCtxProvider := plugincontext.ProvideService(localcache.ProvideService(), &pluginFakes.FakePluginStore{ - PluginList: []plugins.PluginDTO{{JSONData: plugins.JSONData{ID: "test"}}}, + pCtxProvider := plugincontext.ProvideService(localcache.ProvideService(), &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{{JSONData: plugins.JSONData{ID: "test"}}}, }, dsService, pluginSettings.ProvideService(sqlStore, secretsService)) s := ProvideService(client, nil, dsService, pCtxProvider)