74 lines
1.3 KiB
Go
74 lines
1.3 KiB
Go
|
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) }
|