Embed nvd's downloading and storing of meta data into a function to help with resource management

master
Jean Michel MacKay 6 years ago
parent 3959f416fa
commit f34f94320a

@ -165,36 +165,46 @@ func getDataFeeds(dataFeedHashes map[string]string, localPath string) (map[strin
} }
} }
// Download data feed. downloadAndSave := func() error {
r, err := httputil.GetWithUserAgent(fmt.Sprintf(dataFeedURL, dataFeedName))
if err != nil {
log.WithError(err).WithField(logDataFeedName, dataFeedName).Error("could not download NVD data feed")
return dataFeedReaders, dataFeedHashes, commonerr.ErrCouldNotDownload
}
defer r.Body.Close()
if !httputil.Status2xx(r) { // Download data feed.
log.WithField("StatusCode", r.StatusCode).Error("Failed to download NVD data feed") r, err := httputil.GetWithUserAgent(fmt.Sprintf(dataFeedURL, dataFeedName))
return dataFeedReaders, dataFeedHashes, commonerr.ErrCouldNotDownload if err != nil {
} log.WithError(err).WithField(logDataFeedName, dataFeedName).Error("could not download NVD data feed")
return commonerr.ErrCouldNotDownload
}
defer r.Body.Close()
// Un-gzip it. if !httputil.Status2xx(r) {
gr, err := gzip.NewReader(r.Body) log.WithField("StatusCode", r.StatusCode).Error("Failed to download NVD data feed")
if err != nil { return commonerr.ErrCouldNotDownload
log.WithError(err).WithField(logDataFeedName, dataFeedName).Error("could not read NVD data feed") }
return dataFeedReaders, dataFeedHashes, commonerr.ErrCouldNotDownload
}
// Store it to a file at the same time if possible. // Un-gzip it.
if f, err := os.Create(fileName); err == nil { gr, err := gzip.NewReader(r.Body)
_, err = io.Copy(f, gr)
if err != nil { if err != nil {
log.WithError(err).Warning("could not stream NVD data feed to filesystem") log.WithError(err).WithField(logDataFeedName, dataFeedName).Error("could not read NVD data feed")
return commonerr.ErrCouldNotDownload
} }
dataFeedReaders[dataFeedName] = fileName
f.Close() // Store it to a file at the same time if possible.
} else { if f, err := os.Create(fileName); err == nil {
log.WithError(err).Warning("could not store NVD data feed to filesystem") _, err = io.Copy(f, gr)
if err != nil {
log.WithError(err).Warning("could not stream NVD data feed to filesystem")
}
defer f.Close()
dataFeedReaders[dataFeedName] = fileName
} else {
log.WithError(err).Warning("could not store NVD data feed to filesystem")
}
return nil
}
err := downloadAndSave()
if err != nil {
return dataFeedReaders, dataFeedHashes, err
} }
} }
} }

Loading…
Cancel
Save