(payload io.Reader, headers http.Header, requestID string)
| 169 | } |
| 170 | |
| 171 | func (h *AsyncMessageHandler) submitRequest(payload io.Reader, headers http.Header, requestID string) (interface{}, error) { |
| 172 | req, err := http.NewRequest(http.MethodPost, h.config.TargetURL, payload) |
| 173 | if err != nil { |
| 174 | return nil, errors.WithStack(err) |
| 175 | } |
| 176 | |
| 177 | req.Header = headers |
| 178 | req.Header.Set(CortexRequestIDHeader, requestID) |
| 179 | |
| 180 | startTime := time.Now() |
| 181 | response, err := h.httpClient.Do(req) |
| 182 | if err != nil { |
| 183 | return nil, ErrorUserContainerNotReachable(err) |
| 184 | } |
| 185 | |
| 186 | defer func() { |
| 187 | _ = response.Body.Close() |
| 188 | }() |
| 189 | |
| 190 | h.eventHandler.HandleEvent( |
| 191 | RequestEvent{ |
| 192 | StatusCode: response.StatusCode, |
| 193 | Duration: time.Since(startTime), |
| 194 | }, |
| 195 | ) |
| 196 | |
| 197 | if response.StatusCode != http.StatusOK { |
| 198 | return nil, ErrorUserContainerResponseStatusCode(response.StatusCode) |
| 199 | } |
| 200 | |
| 201 | if !strings.HasPrefix(response.Header.Get("Content-Type"), "application/json") { |
| 202 | return nil, ErrorUserContainerResponseMissingJSONHeader() |
| 203 | } |
| 204 | |
| 205 | var result interface{} |
| 206 | if err = json.NewDecoder(response.Body).Decode(&result); err != nil { |
| 207 | return nil, ErrorUserContainerResponseNotJSONDecodable() |
| 208 | } |
| 209 | |
| 210 | return result, nil |
| 211 | } |
| 212 | |
| 213 | func (h *AsyncMessageHandler) uploadResult(requestID string, result interface{}) error { |
| 214 | key := async.ResultPath(h.storagePath, requestID) |
no test coverage detected