ref: pass tracer to plugin factory func (#93701)

* ref: pass tracer to plugin factory func

* fix: add tracer to coreplugin

* test: fix test, generate wire

* test: ignore trace field in loader_test

* ref: pass tracer as dependency, don't store in plugin

* ref: wrap tracer with tracer provider to satisfy WithTracerProvider

* ref: use otel trace.Tracer type for tracer
This commit is contained in:
Syerikjan Kh
2024-10-10 20:30:56 -04:00
committed by GitHub
parent 27c44f4709
commit f8748f0724
13 changed files with 75 additions and 30 deletions
@@ -9,6 +9,7 @@ import (
"github.com/grafana/grafana/pkg/plugins/log"
"github.com/grafana/grafana/pkg/plugins/manager/process"
"github.com/grafana/grafana/pkg/plugins/manager/registry"
"go.opentelemetry.io/otel/trace"
)
// BackendClientInit implements an InitializeFunc for initializing a backend plugin process.
@@ -21,20 +22,22 @@ type BackendClientInit struct {
envVarProvider envvars.Provider
backendProvider plugins.BackendFactoryProvider
log log.Logger
tracer trace.Tracer
}
// BackendClientInitStep returns a new InitializeFunc for registering a backend plugin process.
func BackendClientInitStep(envVarProvider envvars.Provider,
backendProvider plugins.BackendFactoryProvider) InitializeFunc {
return newBackendProcessRegistration(envVarProvider, backendProvider).Initialize
backendProvider plugins.BackendFactoryProvider, tracer trace.Tracer) InitializeFunc {
return newBackendProcessRegistration(envVarProvider, backendProvider, tracer).Initialize
}
func newBackendProcessRegistration(envVarProvider envvars.Provider,
backendProvider plugins.BackendFactoryProvider) *BackendClientInit {
backendProvider plugins.BackendFactoryProvider, tracer trace.Tracer) *BackendClientInit {
return &BackendClientInit{
backendProvider: backendProvider,
envVarProvider: envVarProvider,
log: log.New("plugins.backend.registration"),
tracer: tracer,
}
}
@@ -49,7 +52,7 @@ func (b *BackendClientInit) Initialize(ctx context.Context, p *plugins.Plugin) (
// this will ensure that the env variables are calculated every time a plugin is started
envFunc := func() []string { return b.envVarProvider.PluginEnvVars(ctx, p) }
if backendClient, err := backendFactory(p.ID, p.Logger(), envFunc); err != nil {
if backendClient, err := backendFactory(p.ID, p.Logger(), b.tracer, envFunc); err != nil {
return nil, err
} else {
p.RegisterClient(backendClient)
@@ -4,11 +4,12 @@ import (
"context"
"testing"
"github.com/stretchr/testify/require"
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/plugins/backendplugin"
"github.com/grafana/grafana/pkg/plugins/log"
"github.com/grafana/grafana/pkg/plugins/manager/fakes"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/otel/trace"
)
func TestInitializer_Initialize(t *testing.T) {
@@ -28,7 +29,7 @@ func TestInitializer_Initialize(t *testing.T) {
Class: plugins.ClassCore,
}
stepFunc := BackendClientInitStep(&fakeEnvVarsProvider{}, &fakeBackendProvider{plugin: p})
stepFunc := BackendClientInitStep(&fakeEnvVarsProvider{}, &fakeBackendProvider{plugin: p}, fakes.InitializeNoopTracerForTest())
var err error
p, err = stepFunc(context.Background(), p)
@@ -52,7 +53,7 @@ func TestInitializer_Initialize(t *testing.T) {
Class: plugins.ClassExternal,
}
stepFunc := BackendClientInitStep(&fakeEnvVarsProvider{}, &fakeBackendProvider{plugin: p})
stepFunc := BackendClientInitStep(&fakeEnvVarsProvider{}, &fakeBackendProvider{plugin: p}, fakes.InitializeNoopTracerForTest())
var err error
p, err = stepFunc(context.Background(), p)
@@ -76,7 +77,7 @@ func TestInitializer_Initialize(t *testing.T) {
Class: plugins.ClassExternal,
}
stepFunc := BackendClientInitStep(&fakeEnvVarsProvider{}, &fakeBackendProvider{plugin: p})
stepFunc := BackendClientInitStep(&fakeEnvVarsProvider{}, &fakeBackendProvider{plugin: p}, fakes.InitializeNoopTracerForTest())
var err error
p, err = stepFunc(context.Background(), p)
@@ -96,7 +97,7 @@ func TestInitializer_Initialize(t *testing.T) {
i := BackendClientInitStep(&fakeEnvVarsProvider{}, &fakeBackendProvider{
plugin: p,
})
}, fakes.InitializeNoopTracerForTest())
var err error
p, err = i(context.Background(), p)
@@ -115,7 +116,7 @@ type fakeBackendProvider struct {
}
func (f *fakeBackendProvider) BackendFactory(_ context.Context, _ *plugins.Plugin) backendplugin.PluginFactoryFunc {
return func(_ string, _ log.Logger, _ func() []string) (backendplugin.Plugin, error) {
return func(_ string, _ log.Logger, _ trace.Tracer, _ func() []string) (backendplugin.Plugin, error) {
return f.plugin, nil
}
}