Skip to content

Commit 5c690ee

Browse files
committed
Add retry logic for EPSS data request in DownloadData function. If today's data returns a 403 status, the function now attempts to fetch yesterday's data instead. Enhanced logging for retry attempts and error handling included.
1 parent 85263ec commit 5c690ee

1 file changed

Lines changed: 16 additions & 0 deletions

File tree

pkg/epss/epss.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,22 @@ func DownloadData(w io.Writer, optionFuncs ...fetchOptionFunc) error {
111111
req.Header.Set("User-Agent", "gatecheck/1.0")
112112
res, err := options.Client.Do(req)
113113

114+
// If today's data returns 403 (not available yet), try yesterday's data
115+
if err == nil && res.StatusCode == http.StatusForbidden {
116+
res.Body.Close()
117+
yesterday := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
118+
retryURL := fmt.Sprintf("%s/epss_scores-%s.csv.gz", defaultEPSSBaseURL, yesterday)
119+
slog.Warn("epss data not available for today, retrying with yesterday's data", "retry_url", retryURL)
120+
121+
req, err = http.NewRequest("GET", retryURL, nil)
122+
if err != nil {
123+
logger.Error("epss api failed to create retry request", "error", err)
124+
return errors.New("failed to get EPSS Scores. see log for details")
125+
}
126+
req.Header.Set("User-Agent", "gatecheck/1.0")
127+
res, err = options.Client.Do(req)
128+
}
129+
114130
switch {
115131
case err != nil:
116132
logger.Error("epss api request failed during fetch data", "error", err)

0 commit comments

Comments
 (0)