// Update fetches all the vulnerabilities from the registered fetchers, upserts // them into the database and then sends notifications. func Update(datastore database.Datastore, firstUpdate bool) { defer setUpdaterDuration(time.Now()) log.Info("updating vulnerabilities") // Fetch updates. status, vulnerabilities, flags, notes := fetch(datastore) // Insert vulnerabilities. log.Tracef("inserting %d vulnerabilities for update", len(vulnerabilities)) err := datastore.InsertVulnerabilities(vulnerabilities, !firstUpdate) if err != nil { promUpdaterErrorsTotal.Inc() log.Errorf("an error occured when inserting vulnerabilities for update: %s", err) return } vulnerabilities = nil // Update flags. for flagName, flagValue := range flags { datastore.InsertKeyValue(flagName, flagValue) } // Log notes. for _, note := range notes { log.Warningf("fetcher note: %s", note) } promUpdaterNotesTotal.Set(float64(len(notes))) // Update last successful update if every fetchers worked properly. if status { datastore.InsertKeyValue(flagName, strconv.FormatInt(time.Now().UTC().Unix(), 10)) } log.Info("update finished") }