diff --git a/apps/advisor/pkg/app/checkregistry/checkregistry.go b/apps/advisor/pkg/app/checkregistry/checkregistry.go index e1bd27387d0..7bbc138f5c6 100644 --- a/apps/advisor/pkg/app/checkregistry/checkregistry.go +++ b/apps/advisor/pkg/app/checkregistry/checkregistry.go @@ -6,9 +6,9 @@ import ( "github.com/grafana/grafana/apps/advisor/pkg/app/checks/plugincheck" "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/plugins/repo" - "github.com/grafana/grafana/pkg/registry/apis/datasource" "github.com/grafana/grafana/pkg/services/datasources" "github.com/grafana/grafana/pkg/services/pluginsintegration/managedplugins" + "github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext" "github.com/grafana/grafana/pkg/services/pluginsintegration/plugininstaller" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" ) @@ -20,7 +20,7 @@ type CheckService interface { type Service struct { datasourceSvc datasources.DataSourceService pluginStore pluginstore.Store - pluginContextProvider datasource.PluginContextWrapper + pluginContextProvider *plugincontext.Provider pluginClient plugins.Client pluginRepo repo.Service pluginPreinstall plugininstaller.Preinstall @@ -28,7 +28,7 @@ type Service struct { } func ProvideService(datasourceSvc datasources.DataSourceService, pluginStore pluginstore.Store, - pluginContextProvider datasource.PluginContextWrapper, pluginClient plugins.Client, + pluginContextProvider *plugincontext.Provider, pluginClient plugins.Client, pluginRepo repo.Service, pluginPreinstall plugininstaller.Preinstall, managedPlugins managedplugins.Manager) *Service { return &Service{ datasourceSvc: datasourceSvc, diff --git a/apps/advisor/pkg/app/checks/datasourcecheck/check.go b/apps/advisor/pkg/app/checks/datasourcecheck/check.go index 5c5d7d8bdcc..df05bf40688 100644 --- a/apps/advisor/pkg/app/checks/datasourcecheck/check.go +++ b/apps/advisor/pkg/app/checks/datasourcecheck/check.go @@ -7,8 +7,8 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" 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/apimachinery/identity" "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/registry/apis/datasource" "github.com/grafana/grafana/pkg/services/datasources" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/util" @@ -18,7 +18,7 @@ import ( func New( datasourceSvc datasources.DataSourceService, pluginStore pluginstore.Store, - pluginContextProvider datasource.PluginContextWrapper, + pluginContextProvider pluginContextProvider, pluginClient plugins.Client, ) checks.Check { return &check{ @@ -32,7 +32,7 @@ func New( type check struct { DatasourceSvc datasources.DataSourceService PluginStore pluginstore.Store - PluginContextProvider datasource.PluginContextWrapper + PluginContextProvider pluginContextProvider PluginClient plugins.Client } @@ -62,11 +62,11 @@ func (c *check) Run(ctx context.Context, obj *advisor.CheckSpec) (*advisor.Check } // Health check execution - pCtx, err := c.PluginContextProvider.PluginContextForDataSource(ctx, &backend.DataSourceInstanceSettings{ - Type: ds.Type, - UID: ds.UID, - APIVersion: ds.APIVersion, - }) + requester, err := identity.GetRequester(ctx) + if err != nil { + return nil, err + } + pCtx, err := c.PluginContextProvider.GetWithDataSource(ctx, ds.Type, requester, ds) if err != nil { klog.ErrorS(err, "Error creating plugin context", "datasource", ds.Name) continue @@ -96,3 +96,7 @@ func (c *check) Run(ctx context.Context, obj *advisor.CheckSpec) (*advisor.Check Errors: dsErrs, }, nil } + +type pluginContextProvider interface { + GetWithDataSource(ctx context.Context, pluginID string, user identity.Requester, ds *datasources.DataSource) (backend.PluginContext, error) +} diff --git a/apps/advisor/pkg/app/checks/datasourcecheck/check_test.go b/apps/advisor/pkg/app/checks/datasourcecheck/check_test.go index f51fdb77fbb..5c3dfb913e3 100644 --- a/apps/advisor/pkg/app/checks/datasourcecheck/check_test.go +++ b/apps/advisor/pkg/app/checks/datasourcecheck/check_test.go @@ -6,9 +6,10 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" advisor "github.com/grafana/grafana/apps/advisor/pkg/apis/advisor/v0alpha1" + "github.com/grafana/grafana/pkg/apimachinery/identity" "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/registry/apis/datasource" "github.com/grafana/grafana/pkg/services/datasources" + "github.com/grafana/grafana/pkg/services/user" "github.com/stretchr/testify/assert" ) @@ -29,7 +30,8 @@ func TestCheck_Run(t *testing.T) { PluginClient: mockPluginClient, } - report, err := check.Run(context.Background(), &advisor.CheckSpec{}) + ctx := identity.WithRequester(context.Background(), &user.SignedInUser{}) + report, err := check.Run(ctx, &advisor.CheckSpec{}) assert.NoError(t, err) assert.Equal(t, int64(2), report.Count) @@ -51,7 +53,8 @@ func TestCheck_Run(t *testing.T) { PluginClient: mockPluginClient, } - report, err := check.Run(context.Background(), &advisor.CheckSpec{}) + ctx := identity.WithRequester(context.Background(), &user.SignedInUser{}) + report, err := check.Run(ctx, &advisor.CheckSpec{}) assert.NoError(t, err) assert.Equal(t, int64(1), report.Count) @@ -74,7 +77,8 @@ func TestCheck_Run(t *testing.T) { PluginClient: mockPluginClient, } - report, err := check.Run(context.Background(), &advisor.CheckSpec{}) + ctx := identity.WithRequester(context.Background(), &user.SignedInUser{}) + report, err := check.Run(ctx, &advisor.CheckSpec{}) assert.NoError(t, err) assert.Equal(t, int64(1), report.Count) @@ -94,12 +98,10 @@ func (m *MockDatasourceSvc) GetAllDataSources(ctx context.Context, query *dataso } type MockPluginContextProvider struct { - datasource.PluginContextWrapper - pCtx backend.PluginContext } -func (m *MockPluginContextProvider) PluginContextForDataSource(ctx context.Context, datasourceSettings *backend.DataSourceInstanceSettings) (backend.PluginContext, error) { +func (m *MockPluginContextProvider) GetWithDataSource(ctx context.Context, pluginID string, user identity.Requester, ds *datasources.DataSource) (backend.PluginContext, error) { return m.pCtx, nil }