-
Notifications
You must be signed in to change notification settings - Fork 177
/
tracer_span.go
62 lines (50 loc) · 1.26 KB
/
tracer_span.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package tracing
import (
otelTrace "go.opentelemetry.io/otel/trace"
"github.com/onflow/flow-go/module"
"github.com/onflow/flow-go/module/trace"
)
type TracerSpan struct {
module.Tracer
otelTrace.Span
ExtensiveTracing bool
}
func NewTracerSpan() TracerSpan {
return TracerSpan{}
}
func NewMockTracerSpan() TracerSpan {
return TracerSpan{
Span: trace.NoopSpan,
}
}
func (tracer TracerSpan) isTraceable() bool {
return tracer.Tracer != nil && tracer.Span != nil
}
func (tracer TracerSpan) StartChildSpan(
name trace.SpanName,
options ...otelTrace.SpanStartOption,
) TracerSpan {
child := trace.NoopSpan
if tracer.isTraceable() {
child = tracer.Tracer.StartSpanFromParent(tracer.Span, name, options...)
}
return TracerSpan{
Tracer: tracer.Tracer,
Span: child,
ExtensiveTracing: tracer.ExtensiveTracing,
}
}
func (tracer TracerSpan) StartExtensiveTracingChildSpan(
name trace.SpanName,
options ...otelTrace.SpanStartOption,
) TracerSpan {
child := trace.NoopSpan
if tracer.isTraceable() && tracer.ExtensiveTracing {
child = tracer.Tracer.StartSpanFromParent(tracer.Span, name, options...)
}
return TracerSpan{
Tracer: tracer.Tracer,
Span: child,
ExtensiveTracing: tracer.ExtensiveTracing,
}
}