File: span_context.go

package info (click to toggle)
golang-github-expediadotcom-haystack-client-go 0.2.3-3
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 228 kB
  • sloc: sh: 117; makefile: 34
file content (80 lines) | stat: -rw-r--r-- 2,265 bytes parent folder | download | duplicates (2)
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
/*
 *  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)
}