...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package tracetest
16
17 import (
18 "context"
19 "sync"
20
21 sdktrace "go.opentelemetry.io/otel/sdk/trace"
22 )
23
24
25 type SpanRecorder struct {
26 startedMu sync.RWMutex
27 started []sdktrace.ReadWriteSpan
28
29 endedMu sync.RWMutex
30 ended []sdktrace.ReadOnlySpan
31 }
32
33 var _ sdktrace.SpanProcessor = (*SpanRecorder)(nil)
34
35
36 func NewSpanRecorder() *SpanRecorder {
37 return new(SpanRecorder)
38 }
39
40
41
42
43 func (sr *SpanRecorder) OnStart(_ context.Context, s sdktrace.ReadWriteSpan) {
44 sr.startedMu.Lock()
45 defer sr.startedMu.Unlock()
46 sr.started = append(sr.started, s)
47 }
48
49
50
51
52 func (sr *SpanRecorder) OnEnd(s sdktrace.ReadOnlySpan) {
53 sr.endedMu.Lock()
54 defer sr.endedMu.Unlock()
55 sr.ended = append(sr.ended, s)
56 }
57
58
59
60
61 func (sr *SpanRecorder) Shutdown(context.Context) error {
62 return nil
63 }
64
65
66
67
68 func (sr *SpanRecorder) ForceFlush(context.Context) error {
69 return nil
70 }
71
72
73
74
75 func (sr *SpanRecorder) Started() []sdktrace.ReadWriteSpan {
76 sr.startedMu.RLock()
77 defer sr.startedMu.RUnlock()
78 dst := make([]sdktrace.ReadWriteSpan, len(sr.started))
79 copy(dst, sr.started)
80 return dst
81 }
82
83
84
85
86 func (sr *SpanRecorder) Ended() []sdktrace.ReadOnlySpan {
87 sr.endedMu.RLock()
88 defer sr.endedMu.RUnlock()
89 dst := make([]sdktrace.ReadOnlySpan, len(sr.ended))
90 copy(dst, sr.ended)
91 return dst
92 }
93
View as plain text