tracing/initialization.go (40 lines of code) (raw):
package tracing
import (
"io"
opentracing "github.com/opentracing/opentracing-go"
log "github.com/sirupsen/logrus"
"gitlab.com/gitlab-org/labkit/tracing/connstr"
"gitlab.com/gitlab-org/labkit/tracing/impl"
)
type nopCloser struct {
}
func (nopCloser) Close() error { return nil }
// Initialize will initialize distributed tracing.
func Initialize(opts ...InitializationOption) io.Closer {
config := applyInitializationOptions(opts)
if config.connectionString == "" {
// No opentracing connection has been set
return &nopCloser{}
}
driverName, options, err := connstr.Parse(config.connectionString)
if err != nil {
log.WithError(err).Infoln("unable to parse connection")
return &nopCloser{}
}
// URL-provided service_name overrides the InitializationOption
if _, ok := options["service_name"]; !ok {
options["service_name"] = config.serviceName
}
tracer, closer, err := impl.New(driverName, options)
if err != nil {
log.WithError(err).Warn("skipping tracing configuration step")
return &nopCloser{}
}
if tracer == nil {
log.Warn("no tracer provided, tracing will be disabled")
} else {
log.Info("Tracing enabled")
opentracing.SetGlobalTracer(tracer)
}
if closer == nil {
return &nopCloser{}
}
return closer
}