...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package testutil
16
17 import (
18 "log"
19 "sync"
20 "time"
21
22 "go.opencensus.io/plugin/ocgrpc"
23 "go.opencensus.io/stats/view"
24 "go.opencensus.io/trace"
25 )
26
27
28 type TestExporter struct {
29 mu sync.Mutex
30 Spans []*trace.SpanData
31
32 Stats chan *view.Data
33 Views []*view.View
34 }
35
36
37 func NewTestExporter(views ...*view.View) *TestExporter {
38 if len(views) == 0 {
39 views = ocgrpc.DefaultClientViews
40 }
41 te := &TestExporter{Stats: make(chan *view.Data), Views: views}
42
43 view.RegisterExporter(te)
44 view.SetReportingPeriod(time.Millisecond)
45 if err := view.Register(views...); err != nil {
46 log.Fatal(err)
47 }
48
49 trace.RegisterExporter(te)
50 trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()})
51
52 return te
53 }
54
55
56 func (te *TestExporter) ExportSpan(s *trace.SpanData) {
57 te.mu.Lock()
58 defer te.mu.Unlock()
59 te.Spans = append(te.Spans, s)
60 }
61
62
63 func (te *TestExporter) ExportView(vd *view.Data) {
64 if len(vd.Rows) > 0 {
65 select {
66 case te.Stats <- vd:
67 default:
68 }
69 }
70 }
71
72
73 func (te *TestExporter) Unregister() {
74 view.Unregister(te.Views...)
75 view.UnregisterExporter(te)
76 trace.UnregisterExporter(te)
77 view.SetReportingPeriod(0)
78 }
79
View as plain text