MCPcopy
hub / github.com/cloudfoundry/cli / PerformPollingRequestForJSONResponse

Method PerformPollingRequestForJSONResponse

cf/net/gateway.go:288–326  ·  view source on GitHub ↗
(endpoint string, request *Request, response interface{}, timeout time.Duration)

Source from the content-addressed store, hash-verified

286}
287
288func (gateway Gateway) PerformPollingRequestForJSONResponse(endpoint string, request *Request, response interface{}, timeout time.Duration) (http.Header, error) {
289 query := request.HTTPReq.URL.Query()
290 query.Add("async", "true")
291 request.HTTPReq.URL.RawQuery = query.Encode()
292
293 bytes, headers, rawResponse, err := gateway.performRequestForResponseBytes(request)
294 if err != nil {
295 return headers, err
296 }
297 defer rawResponse.Body.Close()
298
299 if rawResponse.StatusCode > 203 || strings.TrimSpace(string(bytes)) == "" {
300 return headers, nil
301 }
302
303 err = json.Unmarshal(bytes, &response)
304 if err != nil {
305 return headers, fmt.Errorf("%s: %s", T("Invalid JSON response from server"), err.Error())
306 }
307
308 asyncResource := &AsyncResource{}
309 err = json.Unmarshal(bytes, &asyncResource)
310 if err != nil {
311 return headers, fmt.Errorf("%s: %s", T("Invalid async response from server"), err.Error())
312 }
313
314 jobURL := asyncResource.Metadata.URL
315 if jobURL == "" {
316 return headers, nil
317 }
318
319 if !strings.Contains(jobURL, "/jobs/") {
320 return headers, nil
321 }
322
323 err = gateway.waitForJob(endpoint+jobURL, request.HTTPReq.Header.Get("Authorization"), timeout)
324
325 return headers, err
326}
327
328func (gateway Gateway) Warnings() []string {
329 return *gateway.warnings

Callers 3

UploadBitsMethod · 0.80
gateway_test.goFile · 0.80

Calls 6

waitForJobMethod · 0.95
AddMethod · 0.65
CloseMethod · 0.65
ErrorMethod · 0.65
GetMethod · 0.65

Tested by

no test coverage detected