X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=pkg%2Ftracelibgo%2Ftracing.go;fp=pkg%2Ftracelibgo%2Ftracing.go;h=f0a3ea260ac68fbc00fe4efbf5bcce7ac0869324;hb=ddcdb2e4318b9150352f15a7263024fff1ed41e2;hp=df2f45c4ba22d515a91ff04352e759cd8d6c0269;hpb=ec2463b984499df638d1a342dad7ba730d8a04c3;p=ric-plt%2Ftracelibgo.git diff --git a/pkg/tracelibgo/tracing.go b/pkg/tracelibgo/tracing.go index df2f45c..f0a3ea2 100644 --- a/pkg/tracelibgo/tracing.go +++ b/pkg/tracelibgo/tracing.go @@ -19,16 +19,121 @@ package tracelibgo import ( + "fmt" "io" + "os" + "strconv" + "strings" "github.com/opentracing/opentracing-go" - "github.com/uber/jaeger-client-go" + jaegercfg "github.com/uber/jaeger-client-go/config" + jaegerlog "github.com/uber/jaeger-client-go/log" ) +const tracingEnabledEnv string = "TRACING_ENABLED" +const jaegerSamplerTypeEnv string = "TRACING_JAEGER_SAMPLER_TYPE" +const jaegerSamplerParamEnv = "TRACING_JAEGER_SAMPLER_PARAM" +const jaegerAgentAddrEnv = "TRACING_JAEGER_AGENT_ADDR" +const jaegerLogLevelEnv = "TRACING_JAEGER_LOG_LEVEL" + +type confMaker struct { + ServiceName string +} + +type logLevel int + +const ( + logAll logLevel = iota + logErr logLevel = iota + logNone logLevel = iota +) + +func (cm *confMaker) GetEnv(envName string, defval string) (retval string) { + retval = os.Getenv(envName) + if retval == "" { + retval = defval + } + return +} + +func (cm *confMaker) IsTracingEnabled() bool { + val := cm.GetEnv(tracingEnabledEnv, "false") + if val == "1" || strings.ToLower(val) == "true" { + return true + } + return false +} + +func createDisabledTracer(name string) (opentracing.Tracer, io.Closer) { + if name == "" { + name = "dummy" + } + cfg := jaegercfg.Configuration{ + ServiceName: name, + Disabled: true, + } + tracer, closer, err := cfg.NewTracer() + if err != nil { + fmt.Fprintln(os.Stderr, "tracelibgo: trace creation error: ", err.Error()) + } + return tracer, closer +} + +func (cm *confMaker) getSamplerConfig() jaegercfg.SamplerConfig { + samplerType := cm.GetEnv(jaegerSamplerTypeEnv, "const") + param, err := strconv.ParseFloat(cm.GetEnv(jaegerSamplerParamEnv, "0.001"), 64) + if err != nil { + param = 0 + } + return jaegercfg.SamplerConfig{Type: samplerType, Param: param} +} + +func (cm *confMaker) getReporterConfig() jaegercfg.ReporterConfig { + agentHostPort := cm.GetEnv(jaegerAgentAddrEnv, "127.0.0.1:6831") + if !strings.Contains(agentHostPort, ":") { + agentHostPort += ":6831" + } + return jaegercfg.ReporterConfig{LogSpans: cm.getLoggingLevel() == logAll, LocalAgentHostPort: agentHostPort} +} + +func (cm *confMaker) getLoggingLevel() logLevel { + level := strings.ToLower(cm.GetEnv(jaegerLogLevelEnv, "error")) + switch level { + case "error": + return logErr + case "all": + return logAll + default: + return logNone + } +} + // CreateTracer creates a tracer entry func CreateTracer(name string) (opentracing.Tracer, io.Closer) { - tracer, closer := jaeger.NewTracer(name, - jaeger.NewConstSampler(false), - jaeger.NewNullReporter()) + + cm := confMaker{name} + if !cm.IsTracingEnabled() { + return createDisabledTracer(name) + } + sampler := cm.getSamplerConfig() + reporter := cm.getReporterConfig() + cfg := jaegercfg.Configuration{ + ServiceName: name, + Disabled: false, + Sampler: &sampler, + Reporter: &reporter, + } + var jaegerLoggerOpt jaegercfg.Option + switch cm.getLoggingLevel() { + case logAll, logErr: + jaegerLoggerOpt = jaegercfg.Logger(jaegerlog.StdLogger) + default: + jaegerLoggerOpt = jaegercfg.Logger(nil) + } + tracer, closer, err := cfg.NewTracer(jaegerLoggerOpt) + if err != nil { + fmt.Fprintln(os.Stderr, "tracelibgo: cannot init tracer: "+err.Error()) + return createDisabledTracer(name) + } return tracer, closer }