From ec0548bef6bea227c86fe9e3c68b5e6bab0b9203 Mon Sep 17 00:00:00 2001 From: "Sascha L. Teichmann" Date: Sun, 17 Jul 2022 12:27:25 +0200 Subject: [PATCH] introduce quick check bases on folder year --- cmd/csaf_checker/main.go | 1 + cmd/csaf_checker/processor.go | 36 +++++++++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/cmd/csaf_checker/main.go b/cmd/csaf_checker/main.go index 23757bc..93c33d5 100644 --- a/cmd/csaf_checker/main.go +++ b/cmd/csaf_checker/main.go @@ -34,6 +34,7 @@ type options struct { Version bool `long:"version" description:"Display version of the binary"` Verbose bool `long:"verbose" short:"v" description:"Verbose output"` Rate *float64 `long:"rate" short:"r" description:"The average upper limit of https operations per second"` + Years *uint `long:"years" short:"y" description:"The years to look back from now" value-name:"YEARS"` } func errCheck(err error) { diff --git a/cmd/csaf_checker/processor.go b/cmd/csaf_checker/processor.go index 92d80ba..a1f44d2 100644 --- a/cmd/csaf_checker/processor.go +++ b/cmd/csaf_checker/processor.go @@ -40,8 +40,9 @@ import ( type topicMessages []Message type processor struct { - opts *options - client util.Client + opts *options + client util.Client + ageAccept func(time.Time) bool redirects map[string][]string noneTLS map[string]struct{} @@ -159,6 +160,17 @@ func newProcessor(opts *options) *processor { opts: opts, alreadyChecked: map[string]whereType{}, expr: util.NewPathEval(), + ageAccept: ageAccept(opts), + } +} + +func ageAccept(opts *options) func(time.Time) bool { + if opts.Years == nil { + return nil + } + good := time.Now().AddDate(-int(*opts.Years), 0, 0) + return func(t time.Time) bool { + return !t.Before(good) } } @@ -354,6 +366,22 @@ func (p *processor) integrity( continue } p.checkTLS(u) + + var folderYear *int + + if m := yearFromURL.FindStringSubmatch(u); m != nil { + year, _ := strconv.Atoi(m[1]) + folderYear = &year + // Check if we are in checking time interval. + if p.ageAccept != nil && !p.ageAccept( + time.Date( + year+1, 1, 1, // Assume 1. jan of next year. + 0, 0, 0, 0, + time.UTC)) { + continue + } + } + res, err := client.Get(u) if err != nil { lg(ErrorType, "Fetching %s failed: %v.", u, err) @@ -402,9 +430,9 @@ func (p *processor) integrity( } else if d, err := time.Parse(time.RFC3339, text); err != nil { p.badFolders.error( "Parsing 'initial_release_date' as RFC3339 failed in %s: %v", u, err) - } else if m := yearFromURL.FindStringSubmatch(u); m == nil { + } else if folderYear == nil { p.badFolders.error("No year folder found in %s", u) - } else if year, _ := strconv.Atoi(m[1]); d.UTC().Year() != year { + } else if d.UTC().Year() != *folderYear { p.badFolders.error("%s should be in folder %d", u, d.UTC().Year()) }