mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-30 21:30:16 +00:00 
			
		
		
		
	Ran commands: hack/pin-dependency.sh github.com/GoogleCloudPlatform/k8s-cloud-provider 27a4ced34534a6c32b63159b100ac0efaa1d37b3 hack/update-vendor.sh hack/pin-dependency.sh google.golang.org/api 5213b809086156e6e2b262a41394993fcff97439 hack/update-vendor.sh hack/verify-vendor.sh merge conflicts
		
			
				
	
	
		
			98 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // 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
 | |
| }
 |