Plugins: Move store and plugin dto to pluginsintegration (#74655)

move store and plugin dto
pull/74566/head^2
Will Browne 2 years ago committed by GitHub
parent 499b02b3c6
commit e855efb13d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      pkg/api/apierrors/dashboard.go
  2. 8
      pkg/api/dashboard_test.go
  3. 6
      pkg/api/datasources_test.go
  4. 5
      pkg/api/frontendsettings.go
  5. 26
      pkg/api/frontendsettings_test.go
  6. 5
      pkg/api/http_server.go
  7. 14
      pkg/api/metrics_test.go
  8. 7
      pkg/api/plugins.go
  9. 6
      pkg/api/plugins_test.go
  10. 6
      pkg/expr/dataplane_test.go
  11. 6
      pkg/expr/service_test.go
  12. 5
      pkg/infra/usagestats/statscollector/service.go
  13. 8
      pkg/infra/usagestats/statscollector/service_test.go
  14. 6
      pkg/infra/usagestats/validator/impl.go
  15. 8
      pkg/plugins/ifaces.go
  16. 31
      pkg/plugins/manager/fakes/fakes.go
  17. 19
      pkg/plugins/manager/loader/finder/local_test.go
  18. 67
      pkg/plugins/plugins.go
  19. 2
      pkg/registry/backgroundsvcs/background_services.go
  20. 2
      pkg/server/wire.go
  21. 6
      pkg/services/dashboardimport/api/api.go
  22. 4
      pkg/services/dashboardimport/service/service.go
  23. 6
      pkg/services/datasourceproxy/datasourceproxy.go
  24. 4
      pkg/services/datasourceproxy/datasourceproxy_test.go
  25. 5
      pkg/services/live/live.go
  26. 7
      pkg/services/navtree/navtreeimpl/applinks.go
  27. 18
      pkg/services/navtree/navtreeimpl/applinks_test.go
  28. 6
      pkg/services/navtree/navtreeimpl/navtree.go
  29. 5
      pkg/services/ngalert/eval/eval.go
  30. 16
      pkg/services/ngalert/eval/eval_test.go
  31. 6
      pkg/services/ngalert/ngalert.go
  32. 4
      pkg/services/ngalert/schedule/schedule_unit_test.go
  33. 4
      pkg/services/ngalert/tests/util.go
  34. 10
      pkg/services/plugindashboards/service/dashboard_updater.go
  35. 27
      pkg/services/plugindashboards/service/dashboard_updater_test.go
  36. 2
      pkg/services/plugindashboards/service/service.go
  37. 2
      pkg/services/plugindashboards/service/service_test.go
  38. 5
      pkg/services/pluginsintegration/dashboards/filestore.go
  39. 6
      pkg/services/pluginsintegration/dashboards/filestore_test.go
  40. 0
      pkg/services/pluginsintegration/dashboards/ifaces.go
  41. 6
      pkg/services/pluginsintegration/plugincontext/plugincontext.go
  42. 12
      pkg/services/pluginsintegration/plugins_integration_test.go
  43. 12
      pkg/services/pluginsintegration/pluginsintegration.go
  44. 38
      pkg/services/pluginsintegration/pluginstore/fake.go
  45. 78
      pkg/services/pluginsintegration/pluginstore/plugins.go
  46. 24
      pkg/services/pluginsintegration/pluginstore/store.go
  47. 23
      pkg/services/pluginsintegration/pluginstore/store_test.go
  48. 6
      pkg/services/pluginsintegration/test_helper.go
  49. 6
      pkg/services/provisioning/plugins/config_reader.go
  50. 8
      pkg/services/provisioning/plugins/config_reader_test.go
  51. 4
      pkg/services/provisioning/plugins/plugin_provisioner.go
  52. 10
      pkg/services/provisioning/provisioning.go
  53. 6
      pkg/services/publicdashboards/api/common_test.go
  54. 6
      pkg/services/query/query_test.go
  55. 4
      pkg/services/quota/quotaimpl/quota_test.go
  56. 4
      pkg/services/store/resolver/ds_cache.go
  57. 5
      pkg/services/store/resolver/service.go
  58. 13
      pkg/services/store/resolver/service_test.go
  59. 3
      pkg/services/supportbundles/supportbundlesimpl/collectors.go
  60. 6
      pkg/services/supportbundles/supportbundlesimpl/service.go
  61. 12
      pkg/services/updatechecker/plugins.go
  62. 18
      pkg/services/updatechecker/plugins_test.go
  63. 6
      pkg/tsdb/legacydata/service/service_test.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 {

@ -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,

@ -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()

@ -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
}

@ -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{

@ -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,

@ -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()),

@ -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)

@ -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())

@ -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),

@ -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)

@ -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,

@ -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(),

@ -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,
}

@ -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

@ -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)
}

@ -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)

@ -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

@ -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"

@ -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"

@ -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,

@ -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 {

@ -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

@ -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}},
}}

@ -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

@ -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 {

@ -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},
},
}

@ -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"),

@ -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,

@ -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,

@ -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
}

@ -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 {

@ -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{

@ -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

@ -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{

@ -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 {

@ -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) {

@ -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,

@ -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)},
},
}
}

@ -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
}

@ -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)

@ -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,

@ -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
}

@ -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,
}
}

@ -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

@ -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),
})
})
}

@ -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{

@ -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}
}

@ -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"}},
},

@ -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,

@ -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

@ -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",

@ -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"}},

@ -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())

@ -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

@ -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
}

@ -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)

@ -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",

@ -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,

@ -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

@ -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",

@ -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)

Loading…
Cancel
Save