MCPcopy
hub / github.com/apache/devlake / fetchAsync

Method fetchAsync

backend/helpers/pluginhelper/api/api_collector.go:411–504  ·  view source on GitHub ↗
(reqData *RequestData, handler func(int, []byte, *http.Response) errors.Error)

Source from the content-addressed store, hash-verified

409}
410
411func (collector *ApiCollector) fetchAsync(reqData *RequestData, handler func(int, []byte, *http.Response) errors.Error) {
412 if reqData.Pager == nil {
413 reqData.Pager = &Pager{
414 Page: 1,
415 Size: 100,
416 Skip: 0,
417 }
418 }
419 apiUrl, err := collector.generateUrl(reqData.Pager, reqData.Input)
420 if err != nil {
421 panic(err)
422 }
423 var apiQuery url.Values
424 if collector.args.Query != nil {
425 apiQuery, err = collector.args.Query(reqData)
426 if err != nil {
427 panic(err)
428 }
429 }
430 var reqBody interface{}
431 if collector.args.RequestBody != nil {
432 reqBody = collector.args.RequestBody(reqData)
433 if err != nil {
434 panic(err)
435 }
436 }
437
438 apiHeader := (http.Header)(nil)
439 if collector.args.Header != nil {
440 apiHeader, err = collector.args.Header(reqData)
441 if err != nil {
442 panic(err)
443 }
444 }
445 logger := collector.args.Ctx.GetLogger()
446 logger.Debug("fetchAsync <<< enqueueing for %s %v", apiUrl, apiQuery)
447 responseHandler := func(res *http.Response) errors.Error {
448 defer logger.Debug("fetchAsync >>> done for %s %v", apiUrl, apiQuery)
449 logger := collector.args.Ctx.GetLogger()
450 // read body to buffer
451 body, err := io.ReadAll(res.Body)
452 if err != nil {
453 return errors.Default.Wrap(err, fmt.Sprintf("error reading response from %s", apiUrl))
454 }
455 res.Body.Close()
456 res.Body = io.NopCloser(bytes.NewBuffer(body))
457 // convert body to array of RawJSON
458 items, err := collector.args.ResponseParser(res)
459 if err != nil {
460 if errors.Is(err, ErrFinishCollect) {
461 logger.Info("a fetch stop by parser, reqInput: #%s", reqData.Params)
462 handler = nil
463 } else {
464 return errors.Default.Wrap(err, fmt.Sprintf("error parsing response from %s", apiUrl))
465 }
466 }
467 // save to db
468 count := len(items)

Callers 4

execMethod · 0.95
fetchPagesDeterminedMethod · 0.95

Calls 14

generateUrlMethod · 0.95
QueryMethod · 0.80
WrapMethod · 0.80
GetLoggerMethod · 0.65
DebugMethod · 0.65
CloseMethod · 0.65
InfoMethod · 0.65
IncProgressMethod · 0.65
GetDalMethod · 0.65
CreateMethod · 0.65
FromMethod · 0.65
DoPostAsyncMethod · 0.65

Tested by

no test coverage detected