diff --git a/main.go b/main.go index 9d8b13bd5..48195d2cc 100644 --- a/main.go +++ b/main.go @@ -120,7 +120,7 @@ func main() { initRuntime(cfg) initBackend(cfg) //Init OpenTracing if Enabled in the Properties File Tracing.TracingEnabled - initOpenTracing(cfg) + trace.InitializeTracer(&cfg.Tracing) startAdmin(cfg) @@ -384,16 +384,6 @@ func initBackend(cfg *config.Config) { } } -// OpenTracing Init -func initOpenTracing(cfg *config.Config) { - // If fabio.properties file has tracing.TracingEnabled set to true the init tracing - if cfg.Tracing.TracingEnabled { - trace.InitializeTracer(cfg.Tracing.CollectorType, cfg.Tracing.ConnectString, cfg.Tracing.ServiceName, cfg.Tracing.Topic, cfg.Tracing.SamplerRate, cfg.Tracing.SpanHost) - - } - -} - func watchBackend(cfg *config.Config, first chan bool) { var ( last string diff --git a/trace/trace.go b/trace/trace.go index bed1a49ca..67ab3d8a8 100644 --- a/trace/trace.go +++ b/trace/trace.go @@ -6,6 +6,7 @@ import ( "os" "strings" + "github.com/fabiolb/fabio/config" opentracing "github.com/opentracing/opentracing-go" "github.com/opentracing/opentracing-go/ext" zipkin "github.com/openzipkin/zipkin-go-opentracing" @@ -20,13 +21,14 @@ func InjectHeaders(span opentracing.Span, req *http.Request) { ) } -func CreateCollector(collectorType string, connectString string, topic string) zipkin.Collector { +func CreateCollector(collectorType, connectString, topic string) zipkin.Collector { var collector zipkin.Collector var err error - if collectorType == "http" { + switch collectorType { + case "http": collector, err = zipkin.NewHTTPCollector(connectString) - } else if collectorType == "kafka" { + case "kafka": // TODO set logger? kafkaHosts := strings.Split(connectString, ",") collector, err = zipkin.NewKafkaCollector( @@ -36,8 +38,7 @@ func CreateCollector(collectorType string, connectString string, topic string) z } if err != nil { - log.Printf("Unable to create Zipkin %s collector: %+v", collectorType, err) - os.Exit(-1) + log.Fatalf("Unable to create Zipkin %s collector: %+v", collectorType, err) } return collector @@ -76,18 +77,21 @@ func CreateSpan(r *http.Request, serviceName string) opentracing.Span { return span // caller must defer span.finish() } -func InitializeTracer(collectorType string, connectString string, serviceName string, topic string, samplerRate float64, addressPort string) { - log.Printf("Tracing initializing - type: %s, connection string: %s, service name: %s, topic: %s, samplerRate: %v", collectorType, connectString, serviceName, topic, samplerRate) +// InitializeTracer initializes OpenTracing support if Tracing.TracingEnabled +// is set in the config. +func InitializeTracer(traceConfig *config.Tracing) { + if !traceConfig.TracingEnabled { + return + } + + log.Printf("Tracing initializing - type: %s, connection string: %s, service name: %s, topic: %s, samplerRate: %v", + traceConfig.CollectorType, traceConfig.ConnectString, traceConfig.ServiceName, traceConfig.Topic, traceConfig.SamplerRate) // Create a new Zipkin Collector, Recorder, and Tracer - collector := CreateCollector(collectorType, connectString, topic) - recorder := zipkin.NewRecorder(collector, false, addressPort, serviceName) - tracer := CreateTracer(recorder, samplerRate) + collector := CreateCollector(traceConfig.CollectorType, traceConfig.ConnectString, traceConfig.Topic) + recorder := zipkin.NewRecorder(collector, false, traceConfig.SpanHost, traceConfig.ServiceName) + tracer := CreateTracer(recorder, traceConfig.SamplerRate) // Set the Zipkin Tracer created above to the GlobalTracer opentracing.SetGlobalTracer(tracer) - - log.Printf("\n\nTRACER: %v\n\n", tracer) - log.Printf("\n\nCOLLECTOR: %v\n\n", collector) - log.Printf("\n\nRECORDER: %v\n\n", recorder) } diff --git a/trace/trace_test.go b/trace/trace_test.go index 83d6c2436..5b5e676a2 100644 --- a/trace/trace_test.go +++ b/trace/trace_test.go @@ -4,6 +4,7 @@ import ( "net/http" "testing" + "github.com/fabiolb/fabio/config" opentracing "github.com/opentracing/opentracing-go" mocktracer "github.com/opentracing/opentracing-go/mocktracer" zipkin "github.com/openzipkin/zipkin-go-opentracing" @@ -60,13 +61,22 @@ func TestCreateSpanWithParent(t *testing.T) { func TestInitializeTracer(t *testing.T) { opentracing.SetGlobalTracer(nil) - InitializeTracer("", "", "", "", 0.0, "") + InitializeTracer(&config.Tracing{TracingEnabled: true}) if opentracing.GlobalTracer() == nil { t.Error("InitializeTracer set a nil tracer.") t.FailNow() } } +func TestInitializeTracerWhileDisabled(t *testing.T) { + opentracing.SetGlobalTracer(nil) + InitializeTracer(&config.Tracing{TracingEnabled: false}) + if opentracing.GlobalTracer() != nil { + t.Error("InitializeTracer set a tracer while tracing was disabled.") + t.FailNow() + } +} + func TestInjectHeaders(t *testing.T) { mt := mocktracer.New() opentracing.SetGlobalTracer(mt)