noop.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package opentracing
  2. import "github.com/opentracing/opentracing-go/log"
  3. // A NoopTracer is a trivial, minimum overhead implementation of Tracer
  4. // for which all operations are no-ops.
  5. //
  6. // The primary use of this implementation is in libraries, such as RPC
  7. // frameworks, that make tracing an optional feature controlled by the
  8. // end user. A no-op implementation allows said libraries to use it
  9. // as the default Tracer and to write instrumentation that does
  10. // not need to keep checking if the tracer instance is nil.
  11. //
  12. // For the same reason, the NoopTracer is the default "global" tracer
  13. // (see GlobalTracer and SetGlobalTracer functions).
  14. //
  15. // WARNING: NoopTracer does not support baggage propagation.
  16. type NoopTracer struct{}
  17. type noopSpan struct{}
  18. type noopSpanContext struct{}
  19. var (
  20. defaultNoopSpanContext SpanContext = noopSpanContext{}
  21. defaultNoopSpan Span = noopSpan{}
  22. defaultNoopTracer Tracer = NoopTracer{}
  23. )
  24. const (
  25. emptyString = ""
  26. )
  27. // noopSpanContext:
  28. func (n noopSpanContext) ForeachBaggageItem(handler func(k, v string) bool) {}
  29. // noopSpan:
  30. func (n noopSpan) Context() SpanContext { return defaultNoopSpanContext }
  31. func (n noopSpan) SetBaggageItem(key, val string) Span { return n }
  32. func (n noopSpan) BaggageItem(key string) string { return emptyString }
  33. func (n noopSpan) SetTag(key string, value interface{}) Span { return n }
  34. func (n noopSpan) LogFields(fields ...log.Field) {}
  35. func (n noopSpan) LogKV(keyVals ...interface{}) {}
  36. func (n noopSpan) Finish() {}
  37. func (n noopSpan) FinishWithOptions(opts FinishOptions) {}
  38. func (n noopSpan) SetOperationName(operationName string) Span { return n }
  39. func (n noopSpan) Tracer() Tracer { return defaultNoopTracer }
  40. func (n noopSpan) LogEvent(event string) {}
  41. func (n noopSpan) LogEventWithPayload(event string, payload interface{}) {}
  42. func (n noopSpan) Log(data LogData) {}
  43. // StartSpan belongs to the Tracer interface.
  44. func (n NoopTracer) StartSpan(operationName string, opts ...StartSpanOption) Span {
  45. return defaultNoopSpan
  46. }
  47. // Inject belongs to the Tracer interface.
  48. func (n NoopTracer) Inject(sp SpanContext, format interface{}, carrier interface{}) error {
  49. return nil
  50. }
  51. // Extract belongs to the Tracer interface.
  52. func (n NoopTracer) Extract(format interface{}, carrier interface{}) (SpanContext, error) {
  53. return nil, ErrSpanContextNotFound
  54. }