From bb7c4aaf7eea48db663b6dbc841d19680f7c769e Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 12 Sep 2018 16:32:04 +0200 Subject: [PATCH] Fix tracing duplicated headers --- middlewares/tracing/carrier.go | 25 +++++++++++++++++++++++++ middlewares/tracing/entrypoint.go | 2 +- middlewares/tracing/tracing.go | 2 +- 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 middlewares/tracing/carrier.go diff --git a/middlewares/tracing/carrier.go b/middlewares/tracing/carrier.go new file mode 100644 index 000000000..57f54865d --- /dev/null +++ b/middlewares/tracing/carrier.go @@ -0,0 +1,25 @@ +package tracing + +import "net/http" + +// HTTPHeadersCarrier custom implementation to fix duplicated headers +// It has been fixed in https://github.com/opentracing/opentracing-go/pull/191 +type HTTPHeadersCarrier http.Header + +// Set conforms to the TextMapWriter interface. +func (c HTTPHeadersCarrier) Set(key, val string) { + h := http.Header(c) + h.Set(key, val) +} + +// ForeachKey conforms to the TextMapReader interface. +func (c HTTPHeadersCarrier) ForeachKey(handler func(key, val string) error) error { + for k, vals := range c { + for _, v := range vals { + if err := handler(k, v); err != nil { + return err + } + } + } + return nil +} diff --git a/middlewares/tracing/entrypoint.go b/middlewares/tracing/entrypoint.go index a35bcea92..bf2a0879e 100644 --- a/middlewares/tracing/entrypoint.go +++ b/middlewares/tracing/entrypoint.go @@ -24,7 +24,7 @@ func (t *Tracing) NewEntryPoint(name string) negroni.Handler { func (e *entryPointMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) { opNameFunc := generateEntryPointSpanName - ctx, _ := e.Extract(opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(r.Header)) + ctx, _ := e.Extract(opentracing.HTTPHeaders, HTTPHeadersCarrier(r.Header)) span := e.StartSpan(opNameFunc(r, e.entryPoint, e.SpanNameLimit), ext.RPCServerOption(ctx)) ext.Component.Set(span, e.ServiceName) LogRequest(span, r) diff --git a/middlewares/tracing/tracing.go b/middlewares/tracing/tracing.go index a18c81806..f52039856 100644 --- a/middlewares/tracing/tracing.go +++ b/middlewares/tracing/tracing.go @@ -125,7 +125,7 @@ func InjectRequestHeaders(r *http.Request) { err := opentracing.GlobalTracer().Inject( span.Context(), opentracing.HTTPHeaders, - opentracing.HTTPHeadersCarrier(r.Header)) + HTTPHeadersCarrier(r.Header)) if err != nil { log.Error(err) }