github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/swarm/tracing/tracing.go (about)

     1  
     2  //此源码被清华学神尹成大魔王专业翻译分析并修改
     3  //尹成QQ77025077
     4  //尹成微信18510341407
     5  //尹成所在QQ群721929980
     6  //尹成邮箱 yinc13@mails.tsinghua.edu.cn
     7  //尹成毕业于清华大学,微软区块链领域全球最有价值专家
     8  //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620
     9  package tracing
    10  
    11  import (
    12  	"io"
    13  	"os"
    14  	"strings"
    15  	"time"
    16  
    17  	"github.com/ethereum/go-ethereum/log"
    18  	jaeger "github.com/uber/jaeger-client-go"
    19  	jaegercfg "github.com/uber/jaeger-client-go/config"
    20  	jaegerlog "github.com/uber/jaeger-client-go/log"
    21  	cli "gopkg.in/urfave/cli.v1"
    22  )
    23  
    24  var Enabled bool = false
    25  
    26  //
    27  const TracingEnabledFlag = "tracing"
    28  
    29  var (
    30  	Closer io.Closer
    31  )
    32  
    33  var (
    34  	TracingFlag = cli.BoolFlag{
    35  		Name:  TracingEnabledFlag,
    36  		Usage: "Enable tracing",
    37  	}
    38  	TracingEndpointFlag = cli.StringFlag{
    39  		Name:  "tracing.endpoint",
    40  		Usage: "Tracing endpoint",
    41  		Value: "0.0.0.0:6831",
    42  	}
    43  	TracingSvcFlag = cli.StringFlag{
    44  		Name:  "tracing.svc",
    45  		Usage: "Tracing service name",
    46  		Value: "swarm",
    47  	}
    48  )
    49  
    50  //
    51  var Flags = []cli.Flag{
    52  	TracingFlag,
    53  	TracingEndpointFlag,
    54  	TracingSvcFlag,
    55  }
    56  
    57  //
    58  func init() {
    59  	for _, arg := range os.Args {
    60  		if flag := strings.TrimLeft(arg, "-"); flag == TracingEnabledFlag {
    61  			Enabled = true
    62  		}
    63  	}
    64  }
    65  
    66  func Setup(ctx *cli.Context) {
    67  	if Enabled {
    68  		log.Info("Enabling opentracing")
    69  		var (
    70  			endpoint = ctx.GlobalString(TracingEndpointFlag.Name)
    71  			svc      = ctx.GlobalString(TracingSvcFlag.Name)
    72  		)
    73  
    74  		Closer = initTracer(endpoint, svc)
    75  	}
    76  }
    77  
    78  func initTracer(endpoint, svc string) (closer io.Closer) {
    79  //
    80  //
    81  	cfg := jaegercfg.Configuration{
    82  		Sampler: &jaegercfg.SamplerConfig{
    83  			Type:  jaeger.SamplerTypeConst,
    84  			Param: 1,
    85  		},
    86  		Reporter: &jaegercfg.ReporterConfig{
    87  			LogSpans:            true,
    88  			BufferFlushInterval: 1 * time.Second,
    89  			LocalAgentHostPort:  endpoint,
    90  		},
    91  	}
    92  
    93  //
    94  //
    95  //
    96  	jLogger := jaegerlog.StdLogger
    97  //
    98  
    99  //
   100  	closer, err := cfg.InitGlobalTracer(
   101  		svc,
   102  		jaegercfg.Logger(jLogger),
   103  //
   104  //
   105  	)
   106  	if err != nil {
   107  		log.Error("Could not initialize Jaeger tracer", "err", err)
   108  	}
   109  
   110  	return closer
   111  }