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  }