Add better logging for the http response
diff --git a/api/api.go b/api/api.go
index 90c69ff..179d9a3 100644
--- a/api/api.go
+++ b/api/api.go
@@ -95,7 +95,7 @@
}
return &HTTPConnection{
client: &http.Client{
- Timeout: 10 * time.Second,
+ Timeout: 10 * time.Second,
Transport: &http.Transport{TLSClientConfig: config},
},
credentials: "Basic " + base64.StdEncoding.EncodeToString([]byte(usernamePassword)),
@@ -141,7 +141,7 @@
}
// sendRequest sets up and sends the relevant HTTP request to the server and returns the HTTP response.
-func sendRequest(rpcName string, req string, conn *HTTPConnection) (*http.Response, error) {
+func sendRequest(rpcName string, req string, conn *HTTPConnection) (string, error) {
httpReq, err := http.NewRequest("POST", conn.getURL(rpcName), bytes.NewBuffer([]byte(req)))
httpReq.Header.Set("Content-Type", "application/json")
httpReq.Header.Set("Authorization", conn.credentials)
@@ -149,9 +149,16 @@
httpResp, err := conn.client.Do(httpReq)
if err != nil {
- return nil, fmt.Errorf("invalid response. %s yielded error: %v", rpcName, err)
+ return "", fmt.Errorf("invalid response. %s yielded error: %v", rpcName, err)
}
- return httpResp, nil
+ defer httpResp.Body.Close()
+ bodyBytes, err := ioutil.ReadAll(httpResp.Body)
+ if err != nil {
+ return "", fmt.Errorf("Could not read http response body")
+ }
+ bodyString := string(bodyBytes)
+ log.Printf("%v Response. Received(unix): %s, Response %v\n", rpcName, time.Now().UTC().Format(time.RFC850), bodyString)
+ return bodyString, nil
}
// CheckAvailability beforms a maps booking availability check on all supplied availability slots. This function
@@ -172,14 +179,11 @@
if err != nil {
return fmt.Errorf("invalid response. CheckAvailability yielded error: %v", err)
}
- defer httpResp.Body.Close()
var resp mpb.CheckAvailabilityResponse
- if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+ if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
return fmt.Errorf("CheckAvailability: Could not parse HTTP response to pb3: %v", err)
}
- log.Printf("CheckAvailability Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
-
if diff := cmp.Diff(resp.GetSlot(), slot, cmp.Comparer(proto.Equal)); diff != "" {
return fmt.Errorf("invalid response. CheckAvailability slots differ (-got +want)\n%s", diff)
}
@@ -223,13 +227,11 @@
if err != nil {
return nil, fmt.Errorf("invalid response. CreateBooking yielded error: %v", err)
}
- defer httpResp.Body.Close()
var resp mpb.CreateBookingResponse
- if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+ if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
return nil, fmt.Errorf("CreateBooking: Could not parse HTTP response to pb3: %v", err)
}
- log.Printf("CreateBooking Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
if resp.GetBookingFailure() != nil {
return nil, fmt.Errorf("invalid response. CreateBooking failed with booking failure %v", resp.GetBookingFailure())
}
@@ -249,13 +251,11 @@
if err != nil {
return nil, fmt.Errorf("invalid response. Idempotency check yielded error: %v", err)
}
- defer idemHTTPResp.Body.Close()
var idemResp mpb.CreateBookingResponse
- if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+ if err := jsonpb.UnmarshalString(idemHTTPResp, &resp); err != nil {
return nil, fmt.Errorf("CreateBooking idem: Could not parse HTTP response to pb3: %v", err)
}
- log.Printf("Idempotency check -- Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), idemResp.String())
if diff := cmp.Diff(idemResp, resp); diff != "" {
return b, fmt.Errorf("Idempotency check invalid (-got +want)\n%s", diff)
}
@@ -277,13 +277,11 @@
if err != nil {
return nil, fmt.Errorf("invalid response. ListBookings yielded error: %v. Abandoning all booking from this flow", err)
}
- defer httpResp.Body.Close()
var resp mpb.ListBookingsResponse
- if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+ if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
return nil, fmt.Errorf("ListBookings: Could not parse HTTP response to pb3: %v", err)
}
- log.Printf("ListBookings Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
gB := Bookings(resp.GetBookings())
if len(gB) != len(tB) {
return out, fmt.Errorf("number of bookings differ, ListBookings invalid. Got: %d, Want: %d. Abandoning all bookings from this flow", len(gB), len(tB))
@@ -316,13 +314,11 @@
if err != nil {
return fmt.Errorf("invalid response. GetBookingStatus yielded error: %v", err)
}
- defer httpResp.Body.Close()
var resp mpb.GetBookingStatusResponse
- if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+ if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
return fmt.Errorf("GetBookingsStatus: Could not parse HTTP response to pb3: %v", err)
}
- log.Printf("GetBookingStatus Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
if diff := cmp.Diff(resp.GetBookingStatus(), mpb.BookingStatus_CONFIRMED); diff != "" {
return fmt.Errorf("invalid response. BookingStatus differ (-got +want)\n%s", diff)
}
@@ -344,13 +340,11 @@
if err != nil {
return fmt.Errorf("invalid response. UpdateBooking yielded error: %v", err)
}
- defer httpResp.Body.Close()
var resp mpb.UpdateBookingResponse
- if err := jsonpb.Unmarshal(httpResp.Body, &resp); err != nil {
+ if err := jsonpb.UnmarshalString(httpResp, &resp); err != nil {
return fmt.Errorf("CancelBooking: Could not parse HTTP response to pb3: %v", err)
}
- log.Printf("UpdateBooking Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
if iE := utils.ValidateBooking(resp.GetBooking(), reqPB.GetBooking()); iE != nil {
return fmt.Errorf("invalid response. UpdateBooking: %s", iE.Error())
}
@@ -392,13 +386,11 @@
return fmt.Errorf("Rescheduling UpdateBooking: Could not convert pb3 to json: %v", reqPB)
}
updateHTTPResp, err := sendRequest("UpdateBooking", req, conn)
- defer updateHTTPResp.Body.Close()
var resp mpb.CreateBookingResponse
- if err := jsonpb.Unmarshal(updateHTTPResp.Body, &resp); err != nil {
+ if err := jsonpb.UnmarshalString(updateHTTPResp, &resp); err != nil {
return fmt.Errorf("Rescheduling UpdateBooking: Could not parse HTTP response to pb3: %v", err)
}
- log.Printf("UpdateBooking Response. Received(unix): %s, Response %s", time.Now().UTC().Format(time.RFC850), resp.String())
if iE := utils.ValidateBooking(resp.GetBooking(), newBooking); iE != nil {
return fmt.Errorf("invalid response. UpdateBooking: %s, abandoning slot 1/1", iE.Error())
}