diff options
| author | n1c00o <n@nc0.fr> | 2023-02-05 14:05:26 +0100 | 
|---|---|---|
| committer | Nicolas <34602094+n1c00o@users.noreply.github.com> | 2023-02-06 22:35:54 +0100 | 
| commit | b371cb11a5877ede8847351e95c7847b5024a551 (patch) | |
| tree | 958227cf8562503246976744b89370d389de5f66 /vendor/go.opencensus.io/trace/export.go | |
| parent | 03e0c597ad5f3539ad33976fe02c11a9e39f34d6 (diff) | |
Init Go module
Diffstat (limited to 'vendor/go.opencensus.io/trace/export.go')
| -rw-r--r-- | vendor/go.opencensus.io/trace/export.go | 97 | 
1 files changed, 97 insertions, 0 deletions
diff --git a/vendor/go.opencensus.io/trace/export.go b/vendor/go.opencensus.io/trace/export.go new file mode 100644 index 0000000..e0d9a4b --- /dev/null +++ b/vendor/go.opencensus.io/trace/export.go @@ -0,0 +1,97 @@ +// Copyright 2017, OpenCensus Authors +// +// 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 trace + +import ( +	"sync" +	"sync/atomic" +	"time" +) + +// Exporter is a type for functions that receive sampled trace spans. +// +// The ExportSpan method should be safe for concurrent use and should return +// quickly; if an Exporter takes a significant amount of time to process a +// SpanData, that work should be done on another goroutine. +// +// The SpanData should not be modified, but a pointer to it can be kept. +type Exporter interface { +	ExportSpan(s *SpanData) +} + +type exportersMap map[Exporter]struct{} + +var ( +	exporterMu sync.Mutex +	exporters  atomic.Value +) + +// RegisterExporter adds to the list of Exporters that will receive sampled +// trace spans. +// +// Binaries can register exporters, libraries shouldn't register exporters. +func RegisterExporter(e Exporter) { +	exporterMu.Lock() +	new := make(exportersMap) +	if old, ok := exporters.Load().(exportersMap); ok { +		for k, v := range old { +			new[k] = v +		} +	} +	new[e] = struct{}{} +	exporters.Store(new) +	exporterMu.Unlock() +} + +// UnregisterExporter removes from the list of Exporters the Exporter that was +// registered with the given name. +func UnregisterExporter(e Exporter) { +	exporterMu.Lock() +	new := make(exportersMap) +	if old, ok := exporters.Load().(exportersMap); ok { +		for k, v := range old { +			new[k] = v +		} +	} +	delete(new, e) +	exporters.Store(new) +	exporterMu.Unlock() +} + +// SpanData contains all the information collected by a Span. +type SpanData struct { +	SpanContext +	ParentSpanID SpanID +	SpanKind     int +	Name         string +	StartTime    time.Time +	// The wall clock time of EndTime will be adjusted to always be offset +	// from StartTime by the duration of the span. +	EndTime time.Time +	// The values of Attributes each have type string, bool, or int64. +	Attributes    map[string]interface{} +	Annotations   []Annotation +	MessageEvents []MessageEvent +	Status +	Links                    []Link +	HasRemoteParent          bool +	DroppedAttributeCount    int +	DroppedAnnotationCount   int +	DroppedMessageEventCount int +	DroppedLinkCount         int + +	// ChildSpanCount holds the number of child span created for this span. +	ChildSpanCount int +}  | 
