diff --git a/apps/advisor/pkg/app/checkregistry/checkregistry.go b/apps/advisor/pkg/app/checkregistry/checkregistry.go index 224ec552f65..3d8d8188a1b 100644 --- a/apps/advisor/pkg/app/checkregistry/checkregistry.go +++ b/apps/advisor/pkg/app/checkregistry/checkregistry.go @@ -14,6 +14,7 @@ import ( "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/pluginsintegration/provisionedplugins" "github.com/grafana/grafana/pkg/services/ssosettings" + "github.com/grafana/grafana/pkg/setting" ) type CheckService interface { @@ -30,12 +31,14 @@ type Service struct { managedPlugins managedplugins.Manager provisionedPlugins provisionedplugins.Manager ssoSettingsSvc ssosettings.Service + GrafanaVersion string } func ProvideService(datasourceSvc datasources.DataSourceService, pluginStore pluginstore.Store, pluginContextProvider *plugincontext.Provider, pluginClient plugins.Client, pluginRepo repo.Service, pluginPreinstall plugininstaller.Preinstall, managedPlugins managedplugins.Manager, - provisionedPlugins provisionedplugins.Manager, ssoSettingsSvc ssosettings.Service, + provisionedPlugins provisionedplugins.Manager, ssoSettingsSvc ssosettings.Service, settings *setting.Cfg, + ) *Service { return &Service{ datasourceSvc: datasourceSvc, @@ -47,6 +50,7 @@ func ProvideService(datasourceSvc datasources.DataSourceService, pluginStore plu managedPlugins: managedPlugins, provisionedPlugins: provisionedPlugins, ssoSettingsSvc: ssoSettingsSvc, + GrafanaVersion: settings.BuildVersion, } } @@ -58,6 +62,7 @@ func (s *Service) Checks() []checks.Check { s.pluginContextProvider, s.pluginClient, s.pluginRepo, + s.GrafanaVersion, ), plugincheck.New( s.pluginStore, @@ -65,6 +70,7 @@ func (s *Service) Checks() []checks.Check { s.pluginPreinstall, s.managedPlugins, s.provisionedPlugins, + s.GrafanaVersion, ), authchecks.New(s.ssoSettingsSvc), } diff --git a/apps/advisor/pkg/app/checks/datasourcecheck/check.go b/apps/advisor/pkg/app/checks/datasourcecheck/check.go index 33589b85e8f..c5e28621162 100644 --- a/apps/advisor/pkg/app/checks/datasourcecheck/check.go +++ b/apps/advisor/pkg/app/checks/datasourcecheck/check.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + sysruntime "runtime" "github.com/grafana/grafana-app-sdk/logging" "github.com/grafana/grafana-plugin-sdk-go/backend" @@ -30,6 +31,7 @@ type check struct { PluginContextProvider pluginContextProvider PluginClient plugins.Client PluginRepo repo.Service + GrafanaVersion string } func New( @@ -38,6 +40,7 @@ func New( pluginContextProvider pluginContextProvider, pluginClient plugins.Client, pluginRepo repo.Service, + grafanaVersion string, ) checks.Check { return &check{ DatasourceSvc: datasourceSvc, @@ -45,6 +48,7 @@ func New( PluginContextProvider: pluginContextProvider, PluginClient: pluginClient, PluginRepo: pluginRepo, + GrafanaVersion: grafanaVersion, } } @@ -83,8 +87,9 @@ func (c *check) Steps() []checks.Step { PluginClient: c.PluginClient, }, &missingPluginStep{ - PluginStore: c.PluginStore, - PluginRepo: c.PluginRepo, + PluginStore: c.PluginStore, + PluginRepo: c.PluginRepo, + GrafanaVersion: c.GrafanaVersion, }, } } @@ -201,8 +206,9 @@ func (s *healthCheckStep) Run(ctx context.Context, log logging.Logger, obj *advi } type missingPluginStep struct { - PluginStore pluginstore.Store - PluginRepo repo.Service + PluginStore pluginstore.Store + PluginRepo repo.Service + GrafanaVersion string } func (s *missingPluginStep) Title() string { @@ -235,7 +241,8 @@ func (s *missingPluginStep) Run(ctx context.Context, log logging.Logger, obj *ad Url: fmt.Sprintf("/connections/datasources/edit/%s", ds.UID), }, } - _, err := s.PluginRepo.PluginInfo(ctx, ds.Type) + compatOpts := repo.NewCompatOpts(s.GrafanaVersion, sysruntime.GOOS, sysruntime.GOARCH) + _, err := s.PluginRepo.PluginInfo(ctx, ds.Type, compatOpts) if err == nil { // Plugin is available in the repo links = append(links, advisor.CheckErrorLink{ diff --git a/apps/advisor/pkg/app/checks/datasourcecheck/check_test.go b/apps/advisor/pkg/app/checks/datasourcecheck/check_test.go index 26e106df68c..4e6ab2e8eac 100644 --- a/apps/advisor/pkg/app/checks/datasourcecheck/check_test.go +++ b/apps/advisor/pkg/app/checks/datasourcecheck/check_test.go @@ -260,7 +260,7 @@ type MockPluginRepo struct { exists bool } -func (m *MockPluginRepo) PluginInfo(context.Context, string) (*repo.PluginInfo, error) { +func (m *MockPluginRepo) PluginInfo(context.Context, string, repo.CompatOpts) (*repo.PluginInfo, error) { if !m.exists { return nil, errors.New("plugin not found") } diff --git a/apps/advisor/pkg/app/checks/plugincheck/check.go b/apps/advisor/pkg/app/checks/plugincheck/check.go index 63244813471..d407b3e7f37 100644 --- a/apps/advisor/pkg/app/checks/plugincheck/check.go +++ b/apps/advisor/pkg/app/checks/plugincheck/check.go @@ -10,7 +10,6 @@ import ( "github.com/grafana/grafana-app-sdk/logging" advisor "github.com/grafana/grafana/apps/advisor/pkg/apis/advisor/v0alpha1" "github.com/grafana/grafana/apps/advisor/pkg/app/checks" - "github.com/grafana/grafana/pkg/cmd/grafana-cli/services" "github.com/grafana/grafana/pkg/plugins/repo" "github.com/grafana/grafana/pkg/services/pluginsintegration/managedplugins" "github.com/grafana/grafana/pkg/services/pluginsintegration/plugininstaller" @@ -30,6 +29,7 @@ func New( pluginPreinstall plugininstaller.Preinstall, managedPlugins managedplugins.Manager, provisionedPlugins provisionedplugins.Manager, + grafanaVersion string, ) checks.Check { return &check{ PluginStore: pluginStore, @@ -37,6 +37,7 @@ func New( PluginPreinstall: pluginPreinstall, ManagedPlugins: managedPlugins, ProvisionedPlugins: provisionedPlugins, + GrafanaVersion: grafanaVersion, } } @@ -46,6 +47,7 @@ type check struct { PluginPreinstall plugininstaller.Preinstall ManagedPlugins managedplugins.Manager ProvisionedPlugins provisionedplugins.Manager + GrafanaVersion string } func (c *check) ID() string { @@ -76,12 +78,14 @@ func (c *check) Steps() []checks.Step { PluginPreinstall: c.PluginPreinstall, ManagedPlugins: c.ManagedPlugins, ProvisionedPlugins: c.ProvisionedPlugins, + GrafanaVersion: c.GrafanaVersion, }, &updateStep{ PluginRepo: c.PluginRepo, PluginPreinstall: c.PluginPreinstall, ManagedPlugins: c.ManagedPlugins, ProvisionedPlugins: c.ProvisionedPlugins, + GrafanaVersion: c.GrafanaVersion, }, } } @@ -91,6 +95,7 @@ type deprecationStep struct { PluginPreinstall plugininstaller.Preinstall ManagedPlugins managedplugins.Manager ProvisionedPlugins provisionedplugins.Manager + GrafanaVersion string provisionedPlugins []string } @@ -136,7 +141,8 @@ func (s *deprecationStep) Run(ctx context.Context, log logging.Logger, _ *adviso } // Check if plugin is deprecated - i, err := s.PluginRepo.PluginInfo(ctx, p.ID) + compatOpts := repo.NewCompatOpts(s.GrafanaVersion, sysruntime.GOOS, sysruntime.GOARCH) + i, err := s.PluginRepo.PluginInfo(ctx, p.ID, compatOpts) if err != nil { // Unable to check deprecation status return nil, nil @@ -164,6 +170,7 @@ type updateStep struct { ManagedPlugins managedplugins.Manager ProvisionedPlugins provisionedplugins.Manager provisionedPlugins []string + GrafanaVersion string } func (s *updateStep) Title() string { @@ -207,7 +214,7 @@ func (s *updateStep) Run(ctx context.Context, log logging.Logger, _ *advisor.Che } // Check if plugin has a newer version available - compatOpts := repo.NewCompatOpts(services.GrafanaVersion, sysruntime.GOOS, sysruntime.GOARCH) + compatOpts := repo.NewCompatOpts(s.GrafanaVersion, sysruntime.GOOS, sysruntime.GOARCH) info, err := s.PluginRepo.GetPluginArchiveInfo(ctx, p.ID, "", compatOpts) if err != nil { // Unable to check updates diff --git a/apps/advisor/pkg/app/checks/plugincheck/check_test.go b/apps/advisor/pkg/app/checks/plugincheck/check_test.go index 8dcba19ee25..842d3197be9 100644 --- a/apps/advisor/pkg/app/checks/plugincheck/check_test.go +++ b/apps/advisor/pkg/app/checks/plugincheck/check_test.go @@ -163,7 +163,7 @@ func TestRun(t *testing.T) { pluginPreinstall := &mockPluginPreinstall{pinned: tt.pluginPreinstalled} managedPlugins := &mockManagedPlugins{managed: tt.pluginManaged} provisionedPlugins := &mockProvisionedPlugins{provisioned: tt.pluginProvisioned} - check := New(pluginStore, pluginRepo, pluginPreinstall, managedPlugins, provisionedPlugins) + check := New(pluginStore, pluginRepo, pluginPreinstall, managedPlugins, provisionedPlugins, "12.0.0") items, err := check.Items(context.Background()) assert.NoError(t, err) @@ -199,7 +199,7 @@ type mockPluginRepo struct { pluginArchiveInfo map[string]*repo.PluginArchiveInfo } -func (m *mockPluginRepo) PluginInfo(ctx context.Context, id string) (*repo.PluginInfo, error) { +func (m *mockPluginRepo) PluginInfo(ctx context.Context, id string, compatOpts repo.CompatOpts) (*repo.PluginInfo, error) { return m.pluginInfo[id], nil } diff --git a/pkg/plugins/manager/fakes/fakes.go b/pkg/plugins/manager/fakes/fakes.go index 8cb762f94b8..9eee0056d2e 100644 --- a/pkg/plugins/manager/fakes/fakes.go +++ b/pkg/plugins/manager/fakes/fakes.go @@ -272,7 +272,7 @@ func (r *FakePluginRepo) PluginVersion(ctx context.Context, pluginID, version st return repo.VersionData{}, nil } -func (r *FakePluginRepo) PluginInfo(ctx context.Context, pluginID string) (*repo.PluginInfo, error) { +func (r *FakePluginRepo) PluginInfo(ctx context.Context, pluginID string, compatOpts repo.CompatOpts) (*repo.PluginInfo, error) { return &repo.PluginInfo{}, nil } diff --git a/pkg/plugins/repo/ifaces.go b/pkg/plugins/repo/ifaces.go index a21edd846e3..3674540d90b 100644 --- a/pkg/plugins/repo/ifaces.go +++ b/pkg/plugins/repo/ifaces.go @@ -17,7 +17,7 @@ type Service interface { // PluginVersion will return plugin version based on the requested information. PluginVersion(ctx context.Context, pluginID, version string, compatOpts CompatOpts) (VersionData, error) // PluginInfo will return generic plugin information from grafana.com/api/plugins. - PluginInfo(ctx context.Context, pluginID string) (*PluginInfo, error) + PluginInfo(ctx context.Context, pluginID string, compatOpts CompatOpts) (*PluginInfo, error) } type CompatOpts struct { diff --git a/pkg/plugins/repo/service.go b/pkg/plugins/repo/service.go index ef4c55e7d4f..aa8c2a1b7f0 100644 --- a/pkg/plugins/repo/service.go +++ b/pkg/plugins/repo/service.go @@ -132,7 +132,7 @@ func (m *Manager) grafanaCompatiblePluginVersions(ctx context.Context, pluginID return v.Versions, nil } -func (m *Manager) PluginInfo(ctx context.Context, pluginID string) (*PluginInfo, error) { +func (m *Manager) PluginInfo(ctx context.Context, pluginID string, compatOpts CompatOpts) (*PluginInfo, error) { u, err := url.Parse(m.client.grafanaComAPIURL) if err != nil { return nil, err @@ -140,7 +140,7 @@ func (m *Manager) PluginInfo(ctx context.Context, pluginID string) (*PluginInfo, u.Path = path.Join(u.Path, pluginID) - body, err := m.client.SendReq(ctx, u, CompatOpts{}) + body, err := m.client.SendReq(ctx, u, compatOpts) if err != nil { return nil, err } diff --git a/pkg/plugins/repo/service_test.go b/pkg/plugins/repo/service_test.go index 514b5ac7390..613468b39ef 100644 --- a/pkg/plugins/repo/service_test.go +++ b/pkg/plugins/repo/service_test.go @@ -126,7 +126,7 @@ func TestPluginInfo(t *testing.T) { BaseURL: srv.URL, Logger: log.NewTestPrettyLogger(), }) - pi, err := m.PluginInfo(context.Background(), pluginID) + pi, err := m.PluginInfo(context.Background(), pluginID, CompatOpts{}) require.NoError(t, err) require.Equal(t, 1, pi.ID) require.Equal(t, pluginID, pi.Slug)