Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/pkg/flow/internal/controller/wrap_tracer.go
4096 views
1
package controller
2
3
import (
4
"context"
5
6
"go.opentelemetry.io/otel/attribute"
7
"go.opentelemetry.io/otel/trace"
8
)
9
10
var (
11
componentIDAttributeKey = "grafana_agent.component_id"
12
)
13
14
// wrapTracer returns a new trace.TracerProvider which will inject the provided
15
// componentID as an attribute to each span.
16
func wrapTracer(inner trace.TracerProvider, componentID string) trace.TracerProvider {
17
return &wrappedProvider{
18
inner: inner,
19
id: componentID,
20
}
21
}
22
23
type wrappedProvider struct {
24
inner trace.TracerProvider
25
id string
26
}
27
28
var _ trace.TracerProvider = (*wrappedProvider)(nil)
29
30
func (wp *wrappedProvider) Tracer(name string, options ...trace.TracerOption) trace.Tracer {
31
innerTracer := wp.inner.Tracer(name, options...)
32
return &wrappedTracer{
33
inner: innerTracer,
34
id: wp.id,
35
}
36
}
37
38
type wrappedTracer struct {
39
inner trace.Tracer
40
id string
41
}
42
43
var _ trace.Tracer = (*wrappedTracer)(nil)
44
45
func (tp *wrappedTracer) Start(ctx context.Context, spanName string, opts ...trace.SpanStartOption) (context.Context, trace.Span) {
46
ctx, span := tp.inner.Start(ctx, spanName, opts...)
47
span.SetAttributes(
48
attribute.String(componentIDAttributeKey, tp.id),
49
)
50
51
return ctx, span
52
}
53
54