(
method string,
u string,
requestBody interface{},
responseBody interface{},
logger log.Logger,
)
| 116 | } |
| 117 | |
| 118 | func (c *client) requestURLWithLogger( |
| 119 | method string, |
| 120 | u string, |
| 121 | requestBody interface{}, |
| 122 | responseBody interface{}, |
| 123 | logger log.Logger, |
| 124 | ) (int, error) { |
| 125 | logger = logger.WithLabel("method", method).WithLabel("url", u) |
| 126 | |
| 127 | httpClient := c.createHTTPClient(logger) |
| 128 | req, err := c.createRequestForURL(method, u, requestBody, logger) |
| 129 | if err != nil { |
| 130 | return 0, err |
| 131 | } |
| 132 | |
| 133 | logger.Debug(message.NewMessage(message.MHTTPClientRequest, "HTTP %s request to %s", method, u)) |
| 134 | |
| 135 | resp, err := httpClient.Do(req) |
| 136 | if err != nil { |
| 137 | var typedError message.Message |
| 138 | if errors.As(err, &typedError) { |
| 139 | return 0, err |
| 140 | } |
| 141 | err = message.Wrap(err, |
| 142 | message.EHTTPFailureConnectionFailed, "HTTP %s request to %s failed", method, u) |
| 143 | logger.Debug(err) |
| 144 | return 0, err |
| 145 | } |
| 146 | defer func() { _ = resp.Body.Close() }() |
| 147 | |
| 148 | logger.Debug( |
| 149 | message.NewMessage( |
| 150 | message.MHTTPClientResponse, |
| 151 | "HTTP response with status %d", |
| 152 | resp.StatusCode, |
| 153 | ).Label("statusCode", resp.StatusCode)) |
| 154 | |
| 155 | body, err := io.ReadAll(resp.Body) |
| 156 | if err != nil { |
| 157 | err = message.Wrap(err, |
| 158 | message.EHTTPFailureConnectionFailed, "HTTP %s request to %s failed", method, u) |
| 159 | logger.Debug(err) |
| 160 | return 0, err |
| 161 | } |
| 162 | |
| 163 | if responseBody == nil { |
| 164 | return resp.StatusCode, nil |
| 165 | } |
| 166 | decoder := json.NewDecoder(bytes.NewReader(body)) |
| 167 | if !c.allowLaxDecoding { |
| 168 | decoder.DisallowUnknownFields() |
| 169 | } |
| 170 | if err := decoder.Decode(responseBody); err != nil { |
| 171 | err = message.Wrap(err, message.EHTTPFailureDecodeFailed, "Failed to decode HTTP response") |
| 172 | logger.Debug(err) |
| 173 | return resp.StatusCode, err |
| 174 | } |
| 175 | return resp.StatusCode, nil |
no test coverage detected