From f518c5978ce896b4ee8b437397b42461abe44ba2 Mon Sep 17 00:00:00 2001 From: Marcus Efraimsson Date: Tue, 2 Jul 2024 14:33:08 +0200 Subject: [PATCH] API Server: Hack to make tracing work for code using otel.GetTracerProvider (#89945) --- pkg/cmd/grafana/apiserver/cmd.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/pkg/cmd/grafana/apiserver/cmd.go b/pkg/cmd/grafana/apiserver/cmd.go index aa10fb5949e..9f09a382b4b 100644 --- a/pkg/cmd/grafana/apiserver/cmd.go +++ b/pkg/cmd/grafana/apiserver/cmd.go @@ -5,6 +5,8 @@ import ( "os" "github.com/spf13/cobra" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/trace" genericapiserver "k8s.io/apiserver/pkg/server" "k8s.io/component-base/cli" @@ -108,14 +110,31 @@ func RunCLI(opts commands.ServerOptions) int { return cli.Run(cmd) } +type lateInitializedTracingProvider struct { + trace.TracerProvider + tracer *lateInitializedTracingService +} + +func (tp lateInitializedTracingProvider) Tracer(name string, options ...trace.TracerOption) trace.Tracer { + return tp.tracer +} + type lateInitializedTracingService struct { tracing.Tracer } func newLateInitializedTracingService() *lateInitializedTracingService { - return &lateInitializedTracingService{ + ts := &lateInitializedTracingService{ Tracer: tracing.InitializeTracerForTest(), } + + tp := &lateInitializedTracingProvider{ + tracer: ts, + } + + otel.SetTracerProvider(tp) + + return ts } func (s *lateInitializedTracingService) InitTracer(tracer tracing.Tracer) {