in vulndb/snooze.go [96:175]
func (s SnoozeGetter) CSV(ctx context.Context, w io.Writer, header bool) error {
r := sqlutil.NewRecordType(SnoozeRecord{})
q := sqlutil.Select(
r.Fields()...,
).From(
"snooze",
)
var cond *sqlutil.QueryConditionSet
if s.Collector != "" {
cond = sqlutil.Cond().Equal("collector", s.Collector)
}
if s.Provider != "" {
if cond == nil {
cond = sqlutil.Cond()
} else {
cond = cond.And()
}
cond = cond.Equal("provider", s.Provider)
}
if len(s.FilterCVEs) > 0 {
if cond == nil {
cond = sqlutil.Cond()
} else {
cond = cond.And()
}
cond = cond.In("cve_id", s.FilterCVEs)
}
if cond != nil {
q = q.Where(cond)
}
query, args := q.String(), q.QueryArgs()
if debug.V(1) {
flog.Infof("running: %q / %#v", query, args)
}
rows, err := s.DB.QueryContext(ctx, query, args...)
if err != nil {
return errors.Wrap(err, "cannot query snooze")
}
defer rows.Close()
cw := csv.NewWriter(w)
defer cw.Flush()
if header {
cw.Write(r.Fields())
}
for rows.Next() {
var sr SnoozeRecord
err = rows.Scan(sqlutil.NewRecordType(&sr).Values()...)
if err != nil {
return errors.Wrap(err, "cannot scan snooze data")
}
var deadline string
if sr.Deadline.Valid {
deadline = sr.Deadline.Time.Format(TimeLayout)
}
cw.Write([]string{
sr.Owner,
sr.Collector,
sr.Provider,
sr.CVE,
deadline,
string(sr.Metadata),
})
}
return nil
}