diff --git a/oval/oval.go b/oval/oval.go index 947a57f3..891580ce 100644 --- a/oval/oval.go +++ b/oval/oval.go @@ -104,11 +104,17 @@ func httpGet(url string, pack *models.Package, resChan chan<- response, errChan var body string var errs []error var resp *http.Response + count, retryMax := 0, 3 f := func() (err error) { // resp, body, errs = gorequest.New().SetDebug(config.Conf.Debug).Get(url).End() resp, body, errs = gorequest.New().Get(url).End() if 0 < len(errs) || resp == nil || resp.StatusCode != 200 { - return fmt.Errorf("HTTP GET error: %v, url: %s, resp: %v", errs, url, resp) + count++ + if count == retryMax { + return nil + } + return fmt.Errorf("HTTP GET error: %v, url: %s, resp: %v", + errs, url, resp) } return nil } @@ -118,10 +124,18 @@ func httpGet(url string, pack *models.Package, resChan chan<- response, errChan err := backoff.RetryNotify(f, backoff.NewExponentialBackOff(), notify) if err != nil { errChan <- fmt.Errorf("HTTP Error %s", err) + return } + if count == retryMax { + errChan <- fmt.Errorf("HRetry count exceeded") + return + } + defs := []ovalmodels.Definition{} if err := json.Unmarshal([]byte(body), &defs); err != nil { - errChan <- fmt.Errorf("Failed to Unmarshall. body: %s, err: %s", body, err) + errChan <- fmt.Errorf("Failed to Unmarshall. body: %s, err: %s", + body, err) + return } resChan <- response{ pack: pack, diff --git a/report/cve_client.go b/report/cve_client.go index 3178636e..cde90e19 100644 --- a/report/cve_client.go +++ b/report/cve_client.go @@ -164,20 +164,25 @@ func (api cvedictClient) httpGet(key, url string, resChan chan<- response, errCh // resp, body, errs = gorequest.New().SetDebug(config.Conf.Debug).Get(url).End() resp, body, errs = gorequest.New().Get(url).End() if 0 < len(errs) || resp == nil || resp.StatusCode != 200 { - return fmt.Errorf("HTTP GET error: %v, url: %s, resp: %v", errs, url, resp) + return fmt.Errorf("HTTP GET error: %v, url: %s, resp: %v", + errs, url, resp) } return nil } notify := func(err error, t time.Duration) { - util.Log.Warnf("Failed to HTTP GET. retrying in %s seconds. err: %s", t, err) + util.Log.Warnf("Failed to HTTP GET. retrying in %s seconds. err: %s", + t, err) } err := backoff.RetryNotify(f, backoff.NewExponentialBackOff(), notify) if err != nil { errChan <- fmt.Errorf("HTTP Error %s", err) + return } cveDetail := cve.CveDetail{} if err := json.Unmarshal([]byte(body), &cveDetail); err != nil { - errChan <- fmt.Errorf("Failed to Unmarshall. body: %s, err: %s", body, err) + errChan <- fmt.Errorf("Failed to Unmarshall. body: %s, err: %s", + body, err) + return } resChan <- response{ key,