-
Notifications
You must be signed in to change notification settings - Fork 176
/
noop.go
121 lines (99 loc) · 3.78 KB
/
noop.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package trace
import (
"context"
"time"
"github.com/opentracing/opentracing-go"
"github.com/opentracing/opentracing-go/log"
"github.com/onflow/flow-go/model/flow"
)
// NoopTracer is the implementation of the Tracer interface
type NoopTracer struct {
tracer *InternalTracer
}
// NewTracer creates a new tracer.
func NewNoopTracer() *NoopTracer {
t := &NoopTracer{}
t.tracer = &InternalTracer{t}
return t
}
// Ready returns a channel that will close when the network stack is ready.
func (t *NoopTracer) Ready() <-chan struct{} {
ready := make(chan struct{})
close(ready)
return ready
}
// Done returns a channel that will close when shutdown is complete.
func (t *NoopTracer) Done() <-chan struct{} {
done := make(chan struct{})
close(done)
return done
}
// StartSpan starts a span using the flow identifier as a key into the span map
func (t *NoopTracer) StartSpan(entityID flow.Identifier, spanName SpanName, opts ...opentracing.StartSpanOption,
) opentracing.Span {
return &NoopSpan{t}
}
// FinishSpan finishes a span started with the passed in flow identifier
func (t *NoopTracer) FinishSpan(entityID flow.Identifier, spanName SpanName) {}
// GetSpan will get the span started with the passed in flow identifier
func (t *NoopTracer) GetSpan(entityID flow.Identifier, spanName SpanName) (opentracing.Span, bool) {
return nil, false
}
func (t *NoopTracer) StartSpanFromContext(
ctx context.Context,
operationName SpanName,
opts ...opentracing.StartSpanOption,
) (opentracing.Span, context.Context) {
return &NoopSpan{t}, ctx
}
func (t *NoopTracer) StartSpanFromParent(
span opentracing.Span,
operationName SpanName,
opts ...opentracing.StartSpanOption,
) opentracing.Span {
return &NoopSpan{t}
}
func (t *NoopTracer) RecordSpanFromParent(
span opentracing.Span,
operationName SpanName,
duration time.Duration,
logs []opentracing.LogRecord,
opts ...opentracing.StartSpanOption,
) {
}
func (t *NoopTracer) WithSpanFromContext(ctx context.Context,
operationName SpanName,
f func(),
opts ...opentracing.StartSpanOption) {
f()
}
type InternalTracer struct {
tracer *NoopTracer
}
func (t *InternalTracer) StartSpan(operationName string, opts ...opentracing.StartSpanOption) opentracing.Span {
return &NoopSpan{t.tracer}
}
func (t *InternalTracer) Inject(sm opentracing.SpanContext, format interface{}, carrier interface{}) error {
return nil
}
func (t *InternalTracer) Extract(format interface{}, carrier interface{}) (opentracing.SpanContext, error) {
return &NoopSpanContext{}, nil
}
type NoopSpan struct {
tracer *NoopTracer
}
func (s *NoopSpan) Finish() {}
func (s *NoopSpan) FinishWithOptions(opts opentracing.FinishOptions) {}
func (s *NoopSpan) Context() opentracing.SpanContext { return &NoopSpanContext{} }
func (s *NoopSpan) SetOperationName(operationName string) opentracing.Span { return s }
func (s *NoopSpan) SetTag(key string, value interface{}) opentracing.Span { return s }
func (s *NoopSpan) LogFields(fields ...log.Field) {}
func (s *NoopSpan) LogKV(alternatingKeyValues ...interface{}) {}
func (s *NoopSpan) SetBaggageItem(restrictedKey, value string) opentracing.Span { return s }
func (s *NoopSpan) BaggageItem(restrictedKey string) string { return "" }
func (s *NoopSpan) Tracer() opentracing.Tracer { return s.tracer.tracer }
func (s *NoopSpan) LogEvent(event string) {}
func (s *NoopSpan) LogEventWithPayload(event string, payload interface{}) {}
func (s *NoopSpan) Log(data opentracing.LogData) {}
type NoopSpanContext struct{}
func (c *NoopSpanContext) ForeachBaggageItem(handler func(k, v string) bool) {}