From 7a84995b775b97f65477980c63aef8e59c98ef40 Mon Sep 17 00:00:00 2001 From: gabsn Date: Thu, 17 Aug 2017 17:02:37 -0400 Subject: [PATCH] wip --- libs/net/http/example_test.go | 5 ++--- libs/net/http/http.go | 4 +++- libs/net/http/http_test.go | 20 +++++++++----------- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/libs/net/http/example_test.go b/libs/net/http/example_test.go index 33f791f793..75ffca9c98 100644 --- a/libs/net/http/example_test.go +++ b/libs/net/http/example_test.go @@ -11,8 +11,7 @@ func handler(w http.ResponseWriter, r *http.Request) { } func Example() { - mux := http.NewServeMux() + mux := httptrace.NewServeMux("web-service", nil) mux.HandleFunc("/", handler) - - http.ListenAndServe(":8080", httptrace.NewDefaultHandler(mux, "web-service")) + http.ListenAndServe(":8080", mux) } diff --git a/libs/net/http/http.go b/libs/net/http/http.go index 836fd5988a..f8b20be03c 100644 --- a/libs/net/http/http.go +++ b/libs/net/http/http.go @@ -8,13 +8,14 @@ import ( "github.com/DataDog/dd-trace-go/tracer/ext" ) -// ServeMux is an HTTP request multiplexer. +// ServeMux is an HTTP request multiplexer that traces all the incoming requests. type ServeMux struct { *http.ServeMux *tracer.Tracer service string } +// NewServeMux allocates and returns a new ServeMux. func NewServeMux(service string, t *tracer.Tracer) *ServeMux { if t == nil { t = tracer.DefaultTracer @@ -25,6 +26,7 @@ func NewServeMux(service string, t *tracer.Tracer) *ServeMux { // ServeHTTP dispatches the request to the handler whose // pattern most closely matches the request URL. +// We only needed to rewrite this method to be able to trace the multiplexer. func (mux *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { // bail out if tracing isn't enabled if !mux.Tracer.Enabled() { diff --git a/libs/net/http/http_test.go b/libs/net/http/http_test.go index 5e1105f199..59622b7dbf 100644 --- a/libs/net/http/http_test.go +++ b/libs/net/http/http_test.go @@ -13,7 +13,10 @@ import ( func TestHttpTracerDisabled(t *testing.T) { assert := assert.New(t) - mux := http.NewServeMux() + testTracer, testTransport := tracertest.GetTestTracer() + testTracer.SetEnabled(false) + + mux := NewServeMux("my-service", testTracer) mux.HandleFunc("/disabled", func(w http.ResponseWriter, r *http.Request) { _, err := w.Write([]byte("disabled!")) assert.Nil(err) @@ -24,14 +27,10 @@ func TestHttpTracerDisabled(t *testing.T) { assert.False(ok) }) - testTracer, testTransport := tracertest.GetTestTracer() - testTracer.SetEnabled(false) - handler := NewHandler(mux, "service", "", testTracer) - // Make the request r := httptest.NewRequest("GET", "/disabled", nil) w := httptest.NewRecorder() - handler.ServeHTTP(w, r) + mux.ServeHTTP(w, r) assert.Equal(200, w.Code) assert.Equal("disabled!", w.Body.String()) @@ -102,14 +101,13 @@ func TestHttpTracer500(t *testing.T) { func setup(t *testing.T) (*tracer.Tracer, *tracertest.DummyTransport, http.Handler) { h200 := handler200(t) h500 := handler500(t) - mux := http.NewServeMux() + tracer, transport := tracertest.GetTestTracer() + + mux := NewServeMux("my-service", tracer) mux.HandleFunc("/200", h200) mux.HandleFunc("/500", h500) - tracer, transport := tracertest.GetTestTracer() - traceHandler := NewHandler(mux, "my-service", "", tracer) - - return tracer, transport, traceHandler + return tracer, transport, mux } func handler200(t *testing.T) http.HandlerFunc {