...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package tracetest
19
20 import (
21 "context"
22 "sync"
23
24 "go.opentelemetry.io/otel/sdk/trace"
25 )
26
27 var _ trace.SpanExporter = (*NoopExporter)(nil)
28
29
30 func NewNoopExporter() *NoopExporter {
31 return new(NoopExporter)
32 }
33
34
35
36 type NoopExporter struct{}
37
38
39 func (nsb *NoopExporter) ExportSpans(context.Context, []trace.ReadOnlySpan) error { return nil }
40
41
42 func (nsb *NoopExporter) Shutdown(context.Context) error { return nil }
43
44 var _ trace.SpanExporter = (*InMemoryExporter)(nil)
45
46
47 func NewInMemoryExporter() *InMemoryExporter {
48 return new(InMemoryExporter)
49 }
50
51
52 type InMemoryExporter struct {
53 mu sync.Mutex
54 ss SpanStubs
55 }
56
57
58 func (imsb *InMemoryExporter) ExportSpans(_ context.Context, spans []trace.ReadOnlySpan) error {
59 imsb.mu.Lock()
60 defer imsb.mu.Unlock()
61 imsb.ss = append(imsb.ss, SpanStubsFromReadOnlySpans(spans)...)
62 return nil
63 }
64
65
66 func (imsb *InMemoryExporter) Shutdown(context.Context) error {
67 imsb.Reset()
68 return nil
69 }
70
71
72 func (imsb *InMemoryExporter) Reset() {
73 imsb.mu.Lock()
74 defer imsb.mu.Unlock()
75 imsb.ss = nil
76 }
77
78
79 func (imsb *InMemoryExporter) GetSpans() SpanStubs {
80 imsb.mu.Lock()
81 defer imsb.mu.Unlock()
82 ret := make(SpanStubs, len(imsb.ss))
83 copy(ret, imsb.ss)
84 return ret
85 }
86
View as plain text