fork of https://github.com/sourcegraph/zoekt
1package tracer
2
3import (
4 "log"
5 "os"
6 "strconv"
7
8 "github.com/opentracing/opentracing-go"
9 sglog "github.com/sourcegraph/log"
10)
11
12type tracerType string
13
14const (
15 tracerTypeNone tracerType = "none"
16 tracerTypeJaeger tracerType = "jaeger"
17 tracerTypeOpenTelemetry tracerType = "opentelemetry"
18)
19
20func inferTracerType() tracerType {
21 // default to disabled
22 isJaegerDisabled, err := strconv.ParseBool(os.Getenv("JAEGER_DISABLED"))
23 if err == nil && !isJaegerDisabled {
24 return tracerTypeJaeger
25 }
26
27 // defaults to disabled
28 isOpenTelemetryDisabled, err := strconv.ParseBool(os.Getenv("OPENTELEMETRY_DISABLED"))
29 if err == nil && !isOpenTelemetryDisabled {
30 return tracerTypeOpenTelemetry
31 }
32
33 return tracerTypeNone
34}
35
36// Init should only be called from main and only once
37// It will initialize the configured tracer, and register it as the global tracer
38// This MUST be the same tracer as the one used by Sourcegraph
39func Init(resource sglog.Resource) {
40 var (
41 tt = inferTracerType()
42 tracer opentracing.Tracer
43 err error
44 )
45 switch tt {
46 case tracerTypeJaeger:
47 tracer, err = configureJaeger(resource)
48 if err != nil {
49 log.Printf("failed to configure Jaeger tracer: %v", err)
50 return
51 }
52 log.Printf("INFO: using Jaeger tracer")
53
54 case tracerTypeOpenTelemetry:
55 tracer, err = configureOpenTelemetry(resource)
56 if err != nil {
57 log.Printf("failed to configure OpenTelemetry tracer: %v", err)
58 return
59 }
60 log.Printf("INFO: using OpenTelemetry tracer")
61 }
62
63 if tracer != nil {
64 opentracing.SetGlobalTracer(tracer)
65 }
66}