-
Notifications
You must be signed in to change notification settings - Fork 435
/
mockspancontext.go
78 lines (62 loc) · 1.58 KB
/
mockspancontext.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
// Unless explicitly stated otherwise all files in this repository are licensed
// under the Apache License Version 2.0.
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2016 Datadog, Inc.
package mocktracer
import (
"sync"
"sync/atomic"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace"
)
var _ ddtrace.SpanContext = (*spanContext)(nil)
type spanContext struct {
sync.RWMutex // guards below fields
baggage map[string]string
priority int
hasPriority bool
spanID uint64
traceID uint64
span *mockspan // context owner
}
func (sc *spanContext) TraceID() uint64 { return sc.traceID }
func (sc *spanContext) SpanID() uint64 { return sc.spanID }
func (sc *spanContext) ForeachBaggageItem(handler func(k, v string) bool) {
sc.RLock()
defer sc.RUnlock()
for k, v := range sc.baggage {
if !handler(k, v) {
break
}
}
}
func (sc *spanContext) setBaggageItem(k, v string) {
sc.Lock()
defer sc.Unlock()
if sc.baggage == nil {
sc.baggage = make(map[string]string, 1)
}
sc.baggage[k] = v
}
func (sc *spanContext) baggageItem(k string) string {
sc.RLock()
defer sc.RUnlock()
return sc.baggage[k]
}
func (sc *spanContext) setSamplingPriority(p int) {
sc.Lock()
defer sc.Unlock()
sc.priority = p
sc.hasPriority = true
}
func (sc *spanContext) hasSamplingPriority() bool {
sc.RLock()
defer sc.RUnlock()
return sc.hasPriority
}
func (sc *spanContext) samplingPriority() int {
sc.RLock()
defer sc.RUnlock()
return sc.priority
}
var mockIDSource uint64 = 123
func nextID() uint64 { return atomic.AddUint64(&mockIDSource, 1) }