mirror of https://github.com/docker/cli.git
65 lines
2.6 KiB
Go
65 lines
2.6 KiB
Go
|
package opentracing
|
||
|
|
||
|
import "github.com/opentracing/opentracing-go/log"
|
||
|
|
||
|
// A NoopTracer is a trivial, minimum overhead implementation of Tracer
|
||
|
// for which all operations are no-ops.
|
||
|
//
|
||
|
// The primary use of this implementation is in libraries, such as RPC
|
||
|
// frameworks, that make tracing an optional feature controlled by the
|
||
|
// end user. A no-op implementation allows said libraries to use it
|
||
|
// as the default Tracer and to write instrumentation that does
|
||
|
// not need to keep checking if the tracer instance is nil.
|
||
|
//
|
||
|
// For the same reason, the NoopTracer is the default "global" tracer
|
||
|
// (see GlobalTracer and SetGlobalTracer functions).
|
||
|
//
|
||
|
// WARNING: NoopTracer does not support baggage propagation.
|
||
|
type NoopTracer struct{}
|
||
|
|
||
|
type noopSpan struct{}
|
||
|
type noopSpanContext struct{}
|
||
|
|
||
|
var (
|
||
|
defaultNoopSpanContext = noopSpanContext{}
|
||
|
defaultNoopSpan = noopSpan{}
|
||
|
defaultNoopTracer = NoopTracer{}
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
emptyString = ""
|
||
|
)
|
||
|
|
||
|
// noopSpanContext:
|
||
|
func (n noopSpanContext) ForeachBaggageItem(handler func(k, v string) bool) {}
|
||
|
|
||
|
// noopSpan:
|
||
|
func (n noopSpan) Context() SpanContext { return defaultNoopSpanContext }
|
||
|
func (n noopSpan) SetBaggageItem(key, val string) Span { return defaultNoopSpan }
|
||
|
func (n noopSpan) BaggageItem(key string) string { return emptyString }
|
||
|
func (n noopSpan) SetTag(key string, value interface{}) Span { return n }
|
||
|
func (n noopSpan) LogFields(fields ...log.Field) {}
|
||
|
func (n noopSpan) LogKV(keyVals ...interface{}) {}
|
||
|
func (n noopSpan) Finish() {}
|
||
|
func (n noopSpan) FinishWithOptions(opts FinishOptions) {}
|
||
|
func (n noopSpan) SetOperationName(operationName string) Span { return n }
|
||
|
func (n noopSpan) Tracer() Tracer { return defaultNoopTracer }
|
||
|
func (n noopSpan) LogEvent(event string) {}
|
||
|
func (n noopSpan) LogEventWithPayload(event string, payload interface{}) {}
|
||
|
func (n noopSpan) Log(data LogData) {}
|
||
|
|
||
|
// StartSpan belongs to the Tracer interface.
|
||
|
func (n NoopTracer) StartSpan(operationName string, opts ...StartSpanOption) Span {
|
||
|
return defaultNoopSpan
|
||
|
}
|
||
|
|
||
|
// Inject belongs to the Tracer interface.
|
||
|
func (n NoopTracer) Inject(sp SpanContext, format interface{}, carrier interface{}) error {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// Extract belongs to the Tracer interface.
|
||
|
func (n NoopTracer) Extract(format interface{}, carrier interface{}) (SpanContext, error) {
|
||
|
return nil, ErrSpanContextNotFound
|
||
|
}
|