diff --git a/pkg/api/plugin_resource_test.go b/pkg/api/plugin_resource_test.go index 61fb73df91b..f5772491203 100644 --- a/pkg/api/plugin_resource_test.go +++ b/pkg/api/plugin_resource_test.go @@ -49,7 +49,7 @@ func TestCallResource(t *testing.T) { } cfg.Azure = &azsettings.AzureSettings{} - coreRegistry := coreplugin.ProvideCoreRegistry(nil, &cloudwatch.CloudWatchService{}, nil, nil, nil, nil, + coreRegistry := coreplugin.ProvideCoreRegistry(tracing.InitializeTracerForTest(), nil, &cloudwatch.CloudWatchService{}, nil, nil, nil, nil, nil, nil, nil, nil, testdatasource.ProvideService(), nil, nil, nil, nil, nil, nil) textCtx := pluginsintegration.CreateIntegrationTestCtx(t, cfg, coreRegistry) diff --git a/pkg/infra/tracing/test_helper.go b/pkg/infra/tracing/test_helper.go index 092b8c9141c..9a467144c62 100644 --- a/pkg/infra/tracing/test_helper.go +++ b/pkg/infra/tracing/test_helper.go @@ -114,6 +114,10 @@ func (t *FakeTracer) Start(ctx context.Context, spanName string, opts ...trace.S func (t *FakeTracer) Inject(ctx context.Context, header http.Header, span Span) { } +func (t *FakeTracer) OtelTracer() trace.Tracer { + return nil +} + func NewFakeTracer() *FakeTracer { return &FakeTracer{Spans: []*FakeSpan{}} } diff --git a/pkg/infra/tracing/tracing.go b/pkg/infra/tracing/tracing.go index b09f59c40b1..9cb85b4fa1e 100644 --- a/pkg/infra/tracing/tracing.go +++ b/pkg/infra/tracing/tracing.go @@ -95,6 +95,9 @@ type Tracer interface { // Both the context and span must be derived from the same call to // [Tracer.Start]. Inject(context.Context, http.Header, Span) + + // OtelTracer returns the trace.Tracer if available or nil. + OtelTracer() trace.Tracer } // Span defines a time range for an operation. This is equivalent to a @@ -492,6 +495,10 @@ func (ots *Opentelemetry) Inject(ctx context.Context, header http.Header, _ Span otel.GetTextMapPropagator().Inject(ctx, propagation.HeaderCarrier(header)) } +func (ots *Opentelemetry) OtelTracer() trace.Tracer { + return ots.tracer +} + func (s OpentelemetrySpan) End() { s.span.End() } diff --git a/pkg/plugins/backendplugin/coreplugin/registry.go b/pkg/plugins/backendplugin/coreplugin/registry.go index 7844a5d16ce..bf943e3f780 100644 --- a/pkg/plugins/backendplugin/coreplugin/registry.go +++ b/pkg/plugins/backendplugin/coreplugin/registry.go @@ -5,7 +5,9 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" sdklog "github.com/grafana/grafana-plugin-sdk-go/backend/log" + sdktracing "github.com/grafana/grafana-plugin-sdk-go/backend/tracing" + "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/plugins/backendplugin" "github.com/grafana/grafana/pkg/plugins/log" @@ -81,10 +83,14 @@ func NewRegistry(store map[string]backendplugin.PluginFactoryFunc) *Registry { } } -func ProvideCoreRegistry(am *azuremonitor.Service, cw *cloudwatch.CloudWatchService, cm *cloudmonitoring.Service, +func ProvideCoreRegistry(tracer tracing.Tracer, am *azuremonitor.Service, cw *cloudwatch.CloudWatchService, cm *cloudmonitoring.Service, es *elasticsearch.Service, grap *graphite.Service, idb *influxdb.Service, lk *loki.Service, otsdb *opentsdb.Service, pr *prometheus.Service, t *tempo.Service, td *testdatasource.Service, pg *postgres.Service, my *mysql.Service, ms *mssql.Service, graf *grafanads.Service, pyroscope *pyroscope.Service, parca *parca.Service) *Registry { + if otelTracer := tracer.OtelTracer(); otelTracer != nil { + sdktracing.InitDefaultTracer(otelTracer) + } + return NewRegistry(map[string]backendplugin.PluginFactoryFunc{ CloudWatch: asBackendPlugin(cw.Executor), CloudMonitoring: asBackendPlugin(cm), diff --git a/pkg/services/pluginsintegration/plugins_integration_test.go b/pkg/services/pluginsintegration/plugins_integration_test.go index 54dd76a3df2..4febd9df794 100644 --- a/pkg/services/pluginsintegration/plugins_integration_test.go +++ b/pkg/services/pluginsintegration/plugins_integration_test.go @@ -97,7 +97,7 @@ func TestIntegrationPluginManager(t *testing.T) { graf := grafanads.ProvideService(sv2, nil) pyroscope := pyroscope.ProvideService(hcp, acimpl.ProvideAccessControl(cfg)) parca := parca.ProvideService(hcp) - coreRegistry := coreplugin.ProvideCoreRegistry(am, cw, cm, es, grap, idb, lk, otsdb, pr, tmpo, td, pg, my, ms, graf, pyroscope, parca) + coreRegistry := coreplugin.ProvideCoreRegistry(tracing.InitializeTracerForTest(), am, cw, cm, es, grap, idb, lk, otsdb, pr, tmpo, td, pg, my, ms, graf, pyroscope, parca) testCtx := CreateIntegrationTestCtx(t, cfg, coreRegistry)