github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/provider/azure/internal/tracing/tracing.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package tracing
     5  
     6  import (
     7  	"net/http"
     8  	"net/http/httputil"
     9  
    10  	"github.com/Azure/go-autorest/autorest"
    11  	"github.com/juju/loggo"
    12  )
    13  
    14  // PrepareDecorator returns an autorest.PrepareDecorator that
    15  // logs requests at trace level.
    16  func PrepareDecorator(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  			if logger.IsTraceEnabled() {
    20  				dump, err := httputil.DumpRequest(r, true)
    21  				if err != nil {
    22  					logger.Tracef("failed to dump request: %v", err)
    23  					logger.Tracef("%+v", r)
    24  				} else {
    25  					logger.Tracef("%s", dump)
    26  				}
    27  			}
    28  			return p.Prepare(r)
    29  		})
    30  	}
    31  }
    32  
    33  // RespondDecorator returns an autorest.RespondDecorator that
    34  // logs responses at trace level.
    35  func RespondDecorator(logger loggo.Logger) autorest.RespondDecorator {
    36  	return func(r autorest.Responder) autorest.Responder {
    37  		return autorest.ResponderFunc(func(resp *http.Response) error {
    38  			if logger.IsTraceEnabled() {
    39  				dump, err := httputil.DumpResponse(resp, true)
    40  				if err != nil {
    41  					logger.Tracef("failed to dump response: %v", err)
    42  					logger.Tracef("%+v", resp)
    43  				} else {
    44  					logger.Tracef("%s", dump)
    45  				}
    46  			}
    47  			return r.Respond(resp)
    48  		})
    49  	}
    50  }