(reqData *RequestData, handler func(int, []byte, *http.Response) errors.Error)
| 409 | } |
| 410 | |
| 411 | func (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) |
no test coverage detected