package tracing import ( appConfig "github.com/exhibition-main/internal/config" "github.com/google/wire" "github.com/opentracing/opentracing-go" "github.com/uber/jaeger-client-go" jaegerConfig "github.com/uber/jaeger-client-go/config" "go.uber.org/zap" "io" "time" ) var Provider = wire.NewSet(NewTracing) type JaegerProvider struct { Tracer opentracing.Tracer Closer io.Closer } var JaegerPoint *JaegerProvider func NewTracing() (jaegerProvider *JaegerProvider) { if !appConfig.Data.Jaeger.Open { return } jaegerProvider = &JaegerProvider{} cfg := jaegerConfig.Configuration{ ServiceName: "fonchain-baidu", Sampler: &jaegerConfig.SamplerConfig{ Type: jaeger.SamplerTypeRemote, Param: 1, }, Reporter: &jaegerConfig.ReporterConfig{ LocalAgentHostPort: appConfig.Data.Jaeger.Addr, LogSpans: true, BufferFlushInterval: 5 * time.Second, }, } nativeTracerIo, closerIo, err := cfg.NewTracer(jaegerConfig.Logger(jaeger.StdLogger)) if err != nil { zap.L().Error("nativeTracer err", zap.Error(err)) return } opentracing.SetGlobalTracer(nativeTracerIo) jaegerProvider.Tracer = nativeTracerIo jaegerProvider.Closer = closerIo JaegerPoint = jaegerProvider return }