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