Path: blob/main/pkg/flow/internal/controller/wrap_tracer.go
4096 views
package controller12import (3"context"45"go.opentelemetry.io/otel/attribute"6"go.opentelemetry.io/otel/trace"7)89var (10componentIDAttributeKey = "grafana_agent.component_id"11)1213// wrapTracer returns a new trace.TracerProvider which will inject the provided14// componentID as an attribute to each span.15func wrapTracer(inner trace.TracerProvider, componentID string) trace.TracerProvider {16return &wrappedProvider{17inner: inner,18id: componentID,19}20}2122type wrappedProvider struct {23inner trace.TracerProvider24id string25}2627var _ trace.TracerProvider = (*wrappedProvider)(nil)2829func (wp *wrappedProvider) Tracer(name string, options ...trace.TracerOption) trace.Tracer {30innerTracer := wp.inner.Tracer(name, options...)31return &wrappedTracer{32inner: innerTracer,33id: wp.id,34}35}3637type wrappedTracer struct {38inner trace.Tracer39id string40}4142var _ trace.Tracer = (*wrappedTracer)(nil)4344func (tp *wrappedTracer) Start(ctx context.Context, spanName string, opts ...trace.SpanStartOption) (context.Context, trace.Span) {45ctx, span := tp.inner.Start(ctx, spanName, opts...)46span.SetAttributes(47attribute.String(componentIDAttributeKey, tp.id),48)4950return ctx, span51}525354