github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/swarm/tracing/tracing.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:50</date> 10 //</624342684877721600> 11 12 package tracing 13 14 import ( 15 "io" 16 "os" 17 "strings" 18 "time" 19 20 "github.com/ethereum/go-ethereum/log" 21 jaeger "github.com/uber/jaeger-client-go" 22 jaegercfg "github.com/uber/jaeger-client-go/config" 23 jaegerlog "github.com/uber/jaeger-client-go/log" 24 cli "gopkg.in/urfave/cli.v1" 25 ) 26 27 var Enabled bool = false 28 29 // 30 const TracingEnabledFlag = "tracing" 31 32 var ( 33 Closer io.Closer 34 ) 35 36 var ( 37 TracingFlag = cli.BoolFlag{ 38 Name: TracingEnabledFlag, 39 Usage: "Enable tracing", 40 } 41 TracingEndpointFlag = cli.StringFlag{ 42 Name: "tracing.endpoint", 43 Usage: "Tracing endpoint", 44 Value: "0.0.0.0:6831", 45 } 46 TracingSvcFlag = cli.StringFlag{ 47 Name: "tracing.svc", 48 Usage: "Tracing service name", 49 Value: "swarm", 50 } 51 ) 52 53 // 54 var Flags = []cli.Flag{ 55 TracingFlag, 56 TracingEndpointFlag, 57 TracingSvcFlag, 58 } 59 60 // 61 func init() { 62 for _, arg := range os.Args { 63 if flag := strings.TrimLeft(arg, "-"); flag == TracingEnabledFlag { 64 Enabled = true 65 } 66 } 67 } 68 69 func Setup(ctx *cli.Context) { 70 if Enabled { 71 log.Info("Enabling opentracing") 72 var ( 73 endpoint = ctx.GlobalString(TracingEndpointFlag.Name) 74 svc = ctx.GlobalString(TracingSvcFlag.Name) 75 ) 76 77 Closer = initTracer(endpoint, svc) 78 } 79 } 80 81 func initTracer(endpoint, svc string) (closer io.Closer) { 82 // 83 // 84 cfg := jaegercfg.Configuration{ 85 Sampler: &jaegercfg.SamplerConfig{ 86 Type: jaeger.SamplerTypeConst, 87 Param: 1, 88 }, 89 Reporter: &jaegercfg.ReporterConfig{ 90 LogSpans: true, 91 BufferFlushInterval: 1 * time.Second, 92 LocalAgentHostPort: endpoint, 93 }, 94 } 95 96 // 97 // 98 // 99 jLogger := jaegerlog.StdLogger 100 // 101 102 // 103 closer, err := cfg.InitGlobalTracer( 104 svc, 105 jaegercfg.Logger(jLogger), 106 // 107 // 108 ) 109 if err != nil { 110 log.Error("Could not initialize Jaeger tracer", "err", err) 111 } 112 113 return closer 114 } 115