ipld-eth-server/vendor/gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer/mockspancontext.go
2018-09-11 16:30:29 -05:00

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) }