github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/provider/azure/tracing.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package azure 5 6 import ( 7 "net/http" 8 "net/http/httputil" 9 10 "github.com/Azure/azure-sdk-for-go/Godeps/_workspace/src/github.com/Azure/go-autorest/autorest" 11 "github.com/juju/loggo" 12 ) 13 14 // tracingPrepareDecorator returns an autorest.PrepareDecorator that 15 // logs requests at trace level. 16 func tracingPrepareDecorator(logger loggo.Logger) autorest.PrepareDecorator { 17 return func(p autorest.Preparer) autorest.Preparer { 18 return autorest.PreparerFunc(func(r *http.Request) (*http.Request, error) { 19 dump, err := httputil.DumpRequest(r, true) 20 if err != nil { 21 logger.Tracef("failed to dump request: %v", err) 22 logger.Tracef("%+v", r) 23 } else { 24 logger.Tracef("%s", dump) 25 } 26 return p.Prepare(r) 27 }) 28 } 29 } 30 31 // tracingRespondDecorator returns an autorest.RespondDecorator that 32 // logs responses at trace level. 33 func tracingRespondDecorator(logger loggo.Logger) autorest.RespondDecorator { 34 return func(r autorest.Responder) autorest.Responder { 35 return autorest.ResponderFunc(func(resp *http.Response) error { 36 dump, err := httputil.DumpResponse(resp, true) 37 if err != nil { 38 logger.Tracef("failed to dump response: %v", err) 39 logger.Tracef("%+v", resp) 40 } else { 41 logger.Tracef("%s", dump) 42 } 43 return r.Respond(resp) 44 }) 45 } 46 }