72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
|
package dtl
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"io/ioutil"
|
||
|
"log"
|
||
|
"net/http"
|
||
|
|
||
|
"io"
|
||
|
|
||
|
"github.com/Azure/go-autorest/autorest"
|
||
|
"github.com/Azure/go-autorest/autorest/azure"
|
||
|
"github.com/hashicorp/packer/builder/azure/common/logutil"
|
||
|
)
|
||
|
|
||
|
func chop(data []byte, maxlen int64) string {
|
||
|
s := string(data)
|
||
|
if int64(len(s)) > maxlen {
|
||
|
s = s[:maxlen] + "..."
|
||
|
}
|
||
|
return s
|
||
|
}
|
||
|
|
||
|
func handleBody(body io.ReadCloser, maxlen int64) (io.ReadCloser, string) {
|
||
|
if body == nil {
|
||
|
return nil, ""
|
||
|
}
|
||
|
|
||
|
defer body.Close()
|
||
|
|
||
|
b, err := ioutil.ReadAll(body)
|
||
|
if err != nil {
|
||
|
return nil, ""
|
||
|
}
|
||
|
|
||
|
return ioutil.NopCloser(bytes.NewReader(b)), chop(b, maxlen)
|
||
|
}
|
||
|
|
||
|
func withInspection(maxlen int64) autorest.PrepareDecorator {
|
||
|
return func(p autorest.Preparer) autorest.Preparer {
|
||
|
return autorest.PreparerFunc(func(r *http.Request) (*http.Request, error) {
|
||
|
body, bodyString := handleBody(r.Body, maxlen)
|
||
|
r.Body = body
|
||
|
|
||
|
log.Print("Azure request", logutil.Fields{
|
||
|
"method": r.Method,
|
||
|
"request": r.URL.String(),
|
||
|
"body": bodyString,
|
||
|
})
|
||
|
return p.Prepare(r)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func byInspecting(maxlen int64) autorest.RespondDecorator {
|
||
|
return func(r autorest.Responder) autorest.Responder {
|
||
|
return autorest.ResponderFunc(func(resp *http.Response) error {
|
||
|
body, bodyString := handleBody(resp.Body, maxlen)
|
||
|
resp.Body = body
|
||
|
|
||
|
log.Print("Azure response", logutil.Fields{
|
||
|
"status": resp.Status,
|
||
|
"method": resp.Request.Method,
|
||
|
"request": resp.Request.URL.String(),
|
||
|
"x-ms-request-id": azure.ExtractRequestID(resp),
|
||
|
"body": bodyString,
|
||
|
})
|
||
|
return r.Respond(resp)
|
||
|
})
|
||
|
}
|
||
|
}
|