manager exposes renderer + secrets manager (#54629)

This commit is contained in:
Will Browne
2022-09-02 14:20:10 +02:00
committed by GitHub
parent 43987e7f8c
commit ecdcafb258
26 changed files with 126 additions and 122 deletions
+3 -2
View File
@@ -1,6 +1,7 @@
package rendering
import (
"context"
"errors"
"github.com/Masterminds/semver"
@@ -22,8 +23,8 @@ const (
var ErrUnknownCapability = errors.New("unknown capability")
var ErrInvalidPluginVersion = errors.New("invalid plugin version")
func (rs *RenderingService) HasCapability(capability CapabilityName) (CapabilitySupportRequestResult, error) {
if !rs.IsAvailable() {
func (rs *RenderingService) HasCapability(ctx context.Context, capability CapabilityName) (CapabilitySupportRequestResult, error) {
if !rs.IsAvailable(ctx) {
return CapabilitySupportRequestResult{IsSupported: false, SemverConstraint: ""}, ErrRenderUnavailable
}
+3 -2
View File
@@ -1,6 +1,7 @@
package rendering
import (
"context"
"testing"
"github.com/stretchr/testify/require"
@@ -12,7 +13,7 @@ import (
type dummyPluginManager struct{}
func (d *dummyPluginManager) Renderer() *plugins.Plugin {
func (d *dummyPluginManager) Renderer(_ context.Context) *plugins.Plugin {
return nil
}
@@ -123,7 +124,7 @@ func TestCapabilities(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
rs.Cfg.RendererUrl = tt.rendererUrl
rs.version = tt.rendererVersion
res, err := rs.HasCapability(tt.capabilityName)
res, err := rs.HasCapability(context.Background(), tt.capabilityName)
if tt.expectedError == nil {
require.NoError(t, err)
+2 -2
View File
@@ -117,13 +117,13 @@ type CapabilitySupportRequestResult struct {
//go:generate mockgen -destination=mock.go -package=rendering github.com/grafana/grafana/pkg/services/rendering Service
type Service interface {
IsAvailable() bool
IsAvailable(ctx context.Context) bool
Version() string
Render(ctx context.Context, opts Opts, session Session) (*RenderResult, error)
RenderCSV(ctx context.Context, opts CSVOpts, session Session) (*RenderCSVResult, error)
RenderErrorImage(theme models.Theme, error error) (*RenderResult, error)
GetRenderUser(ctx context.Context, key string) (*RenderUser, bool)
HasCapability(capability CapabilityName) (CapabilitySupportRequestResult, error)
HasCapability(ctx context.Context, capability CapabilityName) (CapabilitySupportRequestResult, error)
CreateRenderingSession(ctx context.Context, authOpts AuthOpts, sessionOpts SessionOpts) (Session, error)
SanitizeSVG(ctx context.Context, req *SanitizeSVGRequest) (*SanitizeSVGResponse, error)
}
+8 -8
View File
@@ -66,32 +66,32 @@ func (mr *MockServiceMockRecorder) GetRenderUser(arg0, arg1 interface{}) *gomock
}
// HasCapability mocks base method.
func (m *MockService) HasCapability(arg0 CapabilityName) (CapabilitySupportRequestResult, error) {
func (m *MockService) HasCapability(arg0 context.Context, arg1 CapabilityName) (CapabilitySupportRequestResult, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "HasCapability", arg0)
ret := m.ctrl.Call(m, "HasCapability", arg0, arg1)
ret0, _ := ret[0].(CapabilitySupportRequestResult)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// HasCapability indicates an expected call of HasCapability.
func (mr *MockServiceMockRecorder) HasCapability(arg0 interface{}) *gomock.Call {
func (mr *MockServiceMockRecorder) HasCapability(arg0, arg1 interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HasCapability", reflect.TypeOf((*MockService)(nil).HasCapability), arg0)
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HasCapability", reflect.TypeOf((*MockService)(nil).HasCapability), arg0, arg1)
}
// IsAvailable mocks base method.
func (m *MockService) IsAvailable() bool {
func (m *MockService) IsAvailable(arg0 context.Context) bool {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "IsAvailable")
ret := m.ctrl.Call(m, "IsAvailable", arg0)
ret0, _ := ret[0].(bool)
return ret0
}
// IsAvailable indicates an expected call of IsAvailable.
func (mr *MockServiceMockRecorder) IsAvailable() *gomock.Call {
func (mr *MockServiceMockRecorder) IsAvailable(arg0 interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsAvailable", reflect.TypeOf((*MockService)(nil).IsAvailable))
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsAvailable", reflect.TypeOf((*MockService)(nil).IsAvailable), arg0)
}
// Render mocks base method.
+9 -9
View File
@@ -156,9 +156,9 @@ func (rs *RenderingService) Run(ctx context.Context) error {
}
}
if rs.pluginAvailable() {
if rs.pluginAvailable(ctx) {
rs.log = rs.log.New("renderer", "plugin")
rs.pluginInfo = rs.RendererPluginManager.Renderer()
rs.pluginInfo = rs.RendererPluginManager.Renderer(ctx)
if err := rs.startPlugin(ctx); err != nil {
return err
@@ -191,16 +191,16 @@ func (rs *RenderingService) Run(ctx context.Context) error {
return nil
}
func (rs *RenderingService) pluginAvailable() bool {
return rs.RendererPluginManager.Renderer() != nil
func (rs *RenderingService) pluginAvailable(ctx context.Context) bool {
return rs.RendererPluginManager.Renderer(ctx) != nil
}
func (rs *RenderingService) remoteAvailable() bool {
return rs.Cfg.RendererUrl != ""
}
func (rs *RenderingService) IsAvailable() bool {
return rs.remoteAvailable() || rs.pluginAvailable()
func (rs *RenderingService) IsAvailable(ctx context.Context) bool {
return rs.remoteAvailable() || rs.pluginAvailable(ctx)
}
func (rs *RenderingService) Version() string {
@@ -271,7 +271,7 @@ func (rs *RenderingService) render(ctx context.Context, opts Opts, renderKeyProv
}, nil
}
if !rs.IsAvailable() {
if !rs.IsAvailable(ctx) {
rs.log.Warn("Could not render image, no image renderer found/installed. " +
"For image rendering support please install the grafana-image-renderer plugin. " +
"Read more at https://grafana.com/docs/grafana/latest/administration/image_rendering/")
@@ -316,7 +316,7 @@ func (rs *RenderingService) RenderCSV(ctx context.Context, opts CSVOpts, session
}
func (rs *RenderingService) SanitizeSVG(ctx context.Context, req *SanitizeSVGRequest) (*SanitizeSVGResponse, error) {
capability, err := rs.HasCapability(SvgSanitization)
capability, err := rs.HasCapability(ctx, SvgSanitization)
if err != nil {
return nil, err
}
@@ -338,7 +338,7 @@ func (rs *RenderingService) renderCSV(ctx context.Context, opts CSVOpts, renderK
return nil, ErrConcurrentLimitReached
}
if !rs.IsAvailable() {
if !rs.IsAvailable(ctx) {
return nil, ErrRenderUnavailable
}
+1 -1
View File
@@ -105,7 +105,7 @@ func TestRenderErrorImage(t *testing.T) {
type unavailableRendererManager struct{}
func (m unavailableRendererManager) Renderer() *plugins.Plugin { return nil }
func (m unavailableRendererManager) Renderer(_ context.Context) *plugins.Plugin { return nil }
func TestRenderUnavailableError(t *testing.T) {
rs := RenderingService{