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()) }