81 lines
2.2 KiB
Go
81 lines
2.2 KiB
Go
|
/*
|
||
|
* Copyright 2018 Expedia Group.
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
package haystack
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
)
|
||
|
|
||
|
/*SpanContext implements opentracing.spanContext*/
|
||
|
type SpanContext struct {
|
||
|
// traceID represents globally unique ID of the trace.
|
||
|
TraceID string
|
||
|
|
||
|
// spanID represents span ID that must be unique within its trace
|
||
|
SpanID string
|
||
|
|
||
|
// parentID refers to the ID of the parent span.
|
||
|
// Should be empty if the current span is a root span.
|
||
|
ParentID string
|
||
|
|
||
|
//Context baggage. The is a snapshot in time.
|
||
|
Baggage map[string]string
|
||
|
|
||
|
// set to true if extracted using a extractor in tracer
|
||
|
IsExtractedContext bool
|
||
|
}
|
||
|
|
||
|
// IsValid indicates whether this context actually represents a valid trace.
|
||
|
func (context SpanContext) IsValid() bool {
|
||
|
return context.TraceID != "" && context.SpanID != ""
|
||
|
}
|
||
|
|
||
|
/*ForeachBaggageItem implements opentracing.spancontext*/
|
||
|
func (context SpanContext) ForeachBaggageItem(handler func(k, v string) bool) {
|
||
|
for k, v := range context.Baggage {
|
||
|
if !handler(k, v) {
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// WithBaggageItem creates a new context with an extra baggage item.
|
||
|
func (context SpanContext) WithBaggageItem(key, value string) *SpanContext {
|
||
|
var newBaggage map[string]string
|
||
|
if context.Baggage == nil {
|
||
|
newBaggage = map[string]string{key: value}
|
||
|
} else {
|
||
|
newBaggage = make(map[string]string, len(context.Baggage)+1)
|
||
|
for k, v := range context.Baggage {
|
||
|
newBaggage[k] = v
|
||
|
}
|
||
|
newBaggage[key] = value
|
||
|
}
|
||
|
return &SpanContext{
|
||
|
TraceID: context.TraceID,
|
||
|
SpanID: context.SpanID,
|
||
|
ParentID: context.ParentID,
|
||
|
Baggage: newBaggage,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*ToString represents the string*/
|
||
|
func (context SpanContext) ToString() string {
|
||
|
return fmt.Sprintf("%+v", context)
|
||
|
}
|