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