···4848 "github.com/prometheus/client_golang/prometheus/promauto"
4949 "github.com/uber/jaeger-client-go"
5050 "go.uber.org/automaxprocs/maxprocs"
5151- "gopkg.in/DataDog/dd-trace-go.v1/ddtrace"
5251)
53525453const logFormat = "2006-01-02T15-04-05.999999999Z07"
···115114}
116115117116func main() {
117117+ logDir := flag.String("log_dir", "", "log to this directory rather than stderr.")
118118 logRefresh := flag.Duration("log_refresh", 24*time.Hour, "if using --log_dir, start writing a new file this often.")
119119120120 listen := flag.String("listen", ":6070", "listen on this address.")
···134134 version := flag.Bool("version", false, "Print version number")
135135136136 flag.Parse()
137137- // avoid a panic due to log_dir flag already being defined in glog (a transient dependency)
138138- logDirFlag := flag.Lookup("log_dir")
139139- if logDirFlag != nil {
140140- logDir := logDirFlag.Value.String()
141141- if logDir != "" {
142142- if fi, err := os.Lstat(logDir); err != nil || !fi.IsDir() {
143143- log.Fatalf("%s is not a directory", logDir)
144144- }
145145- // We could do fdup acrobatics to also redirect
146146- // stderr, but it is simpler and more portable for the
147147- // caller to divert stderr output if necessary.
148148- go divertLogs(logDir, *logRefresh)
149149- }
150150- }
151137152138 if *version {
153139 fmt.Printf("zoekt-webserver version %q\n", zoekt.Version)
···163149164150 tracer.Init("zoekt-webserver", zoekt.Version)
165151 profiler.Init("zoekt-webserver", zoekt.Version, -1)
152152+153153+ if *logDir != "" {
154154+ if fi, err := os.Lstat(*logDir); err != nil || !fi.IsDir() {
155155+ log.Fatalf("%s is not a directory", *logDir)
156156+ }
157157+ // We could do fdup acrobatics to also redirect
158158+ // stderr, but it is simpler and more portable for the
159159+ // caller to divert stderr output if necessary.
160160+ go divertLogs(*logDir, *logRefresh)
161161+ }
166162167163 // Tune GOMAXPROCS to match Linux container CPU quota.
168164 _, _ = maxprocs.Set()
···478474 switch v := span.Context().(type) {
479475 case jaeger.SpanContext:
480476 return v.TraceID().String()
481481-482482- case ddtrace.SpanContext:
483483- return strconv.FormatUint(v.TraceID(), 10)
484477 }
485478 return ""
486479}
-14
cmd/zoekt-webserver/main_test.go
···11-package main
22-33-import (
44- "flag"
55- "testing"
66-)
77-88-func TestLogDirFlag(t *testing.T) {
99-1010- logDirFlag := flag.Lookup("log_dir")
1111- if logDirFlag == nil {
1212- t.Fatal("log_dir flag not found, this breaks OSS users. Was a dependency modified?")
1313- }
1414-}
···55 "os"
6677 "cloud.google.com/go/profiler"
88- ddprofiler "gopkg.in/DataDog/dd-trace-go.v1/profiler"
98)
1091110// Init starts the supported profilers IFF the environment variable is set.
1211func Init(svcName, version string, blockProfileRate int) {
1313- if os.Getenv("DD_ENV") != "" {
1414- profileTypes := []ddprofiler.ProfileType{ddprofiler.CPUProfile, ddprofiler.HeapProfile}
1515- // additional profilers have a performance impact and should be enabled with care
1616- if os.Getenv("DD_PROFILE_ALL") != "" || blockProfileRate > 0 {
1717- profileTypes = append(profileTypes, ddprofiler.MutexProfile, ddprofiler.BlockProfile)
1818- }
1919- err := ddprofiler.Start(
2020- ddprofiler.WithService(svcName),
2121- ddprofiler.WithVersion(version),
2222- ddprofiler.WithProfileTypes(profileTypes...),
2323- ddprofiler.BlockProfileRate(blockProfileRate),
2424- )
2525- if err != nil {
2626- log.Printf("could not initialize profiler: %s", err.Error())
2727- }
2828- return
2929- }
3030-3112 if os.Getenv("GOOGLE_CLOUD_PROFILER_ENABLED") != "" {
3213 err := profiler.Start(profiler.Config{
3314 Service: svcName,
-18
internal/tracer/tracer.go
···1010 "github.com/uber/jaeger-client-go"
1111 jaegercfg "github.com/uber/jaeger-client-go/config"
1212 jaegermetrics "github.com/uber/jaeger-lib/metrics"
1313- ddopentracing "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer"
1414- ddtracer "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
1513)
16141715// Init should only be called from main and only once
1816// It will initialize the configured tracer, and register it as the global tracer
1917// This MUST be the same tracer as the one used by Sourcegraph
2018func Init(svcName, version string) {
2121-2222- if os.Getenv("DD_ENV") != "" {
2323- tracer := configureDatadogTracer(svcName, version)
2424- log.Printf("INFO: using Datadog tracer")
2525- opentracing.SetGlobalTracer(tracer)
2626- return
2727- }
2828-2919 isJaegerDisabled, err := strconv.ParseBool(os.Getenv("JAEGER_DISABLED"))
3020 if err != nil {
3121 log.Printf("failed to parse JAEGER_DISABLED: %v", err)
···4232 }
4333 log.Printf("INFO: using Jaeger tracer")
4434 opentracing.SetGlobalTracer(tracer)
4545-}
4646-4747-// configureDatadogTracer only sets service name & version and relies on external configuration for other settings
4848-// See https://docs.datadoghq.com/tracing/setup_overview/setup/go/?tab=containers#configure-apm-environment-name
4949-func configureDatadogTracer(svcName, version string) opentracing.Tracer {
5050- tracer := ddopentracing.New(ddtracer.WithService(svcName),
5151- ddtracer.WithServiceVersion(version))
5252- return tracer
5335}
54365537func configureJaeger(svcName string, version string) (opentracing.Tracer, error) {