globaltracer.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package opentracing
  2. type registeredTracer struct {
  3. tracer Tracer
  4. isRegistered bool
  5. }
  6. var (
  7. globalTracer = registeredTracer{NoopTracer{}, false}
  8. )
  9. // SetGlobalTracer sets the [singleton] opentracing.Tracer returned by
  10. // GlobalTracer(). Those who use GlobalTracer (rather than directly manage an
  11. // opentracing.Tracer instance) should call SetGlobalTracer as early as
  12. // possible in main(), prior to calling the `StartSpan` global func below.
  13. // Prior to calling `SetGlobalTracer`, any Spans started via the `StartSpan`
  14. // (etc) globals are noops.
  15. func SetGlobalTracer(tracer Tracer) {
  16. globalTracer = registeredTracer{tracer, true}
  17. }
  18. // GlobalTracer returns the global singleton `Tracer` implementation.
  19. // Before `SetGlobalTracer()` is called, the `GlobalTracer()` is a noop
  20. // implementation that drops all data handed to it.
  21. func GlobalTracer() Tracer {
  22. return globalTracer.tracer
  23. }
  24. // StartSpan defers to `Tracer.StartSpan`. See `GlobalTracer()`.
  25. func StartSpan(operationName string, opts ...StartSpanOption) Span {
  26. return globalTracer.tracer.StartSpan(operationName, opts...)
  27. }
  28. // InitGlobalTracer is deprecated. Please use SetGlobalTracer.
  29. func InitGlobalTracer(tracer Tracer) {
  30. SetGlobalTracer(tracer)
  31. }
  32. // IsGlobalTracerRegistered returns a `bool` to indicate if a tracer has been globally registered
  33. func IsGlobalTracerRegistered() bool {
  34. return globalTracer.isRegistered
  35. }