From bc6a3e478a7e0efc12c30be9f74ef5c3ff7a63fb Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Tue, 1 Oct 2024 10:55:50 +0300 Subject: some more foo --- internal/schedule/schedule.go | 9 +++++-- internal/schedule/stats.go | 61 ++++++++++++++++++------------------------- 2 files changed, 32 insertions(+), 38 deletions(-) (limited to 'internal/schedule') diff --git a/internal/schedule/schedule.go b/internal/schedule/schedule.go index 9a9121e..4ed3094 100644 --- a/internal/schedule/schedule.go +++ b/internal/schedule/schedule.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "os" + "path/filepath" "strings" "codeberg.org/snonux/gos/internal/config" @@ -31,8 +32,12 @@ func Run(args config.Args, platform string) (entry.Entry, error) { } // Schedule random qeued entry for platform - ent, err := oi.ReadDirRandomEntry(dir, func(file os.DirEntry) bool { - return strings.HasSuffix(file.Name(), ".queued") + // TODO: Rename ReadDirRandomEntry to ReadDirRandom + ent, err := oi.ReadDirRandomEntry(dir, func(file os.DirEntry) (entry.Entry, bool) { + if ent, err := entry.New(filepath.Join(dir, file.Name())); err != nil { + return ent, ent.State == entry.Queued + } + return entry.Zero, false }) if err != nil { diff --git a/internal/schedule/stats.go b/internal/schedule/stats.go index e6b2b29..919d0a1 100644 --- a/internal/schedule/stats.go +++ b/internal/schedule/stats.go @@ -1,10 +1,9 @@ package schedule import ( - "errors" "fmt" "os" - "strings" + "path/filepath" "time" "codeberg.org/snonux/gos/internal/entry" @@ -45,65 +44,55 @@ func (s stats) targetHit() bool { } func (s *stats) gatherPostedStats(dir string, lookbackTime time.Time) error { - ch, err := oi.ReadDirFilter(dir, func(file os.DirEntry) bool { - return strings.HasSuffix(file.Name(), ".posted") - }) - if err != nil { - return err - } - var ( now time.Time = nowTime() oldest time.Time = now ) - var errs []error - for filePath := range ch { + err := oi.TraverseDir(dir, func(file os.DirEntry) error { + filePath := filepath.Join(dir, file.Name()) ent, err := entry.New(filePath) if err != nil { - errs = append(errs, err) - continue + return err } - if ent.Time.Before(lookbackTime) { - continue + if ent.State != entry.Posted || ent.Time.Before(lookbackTime) { + return nil } if ent.Time.Before(oldest) { oldest = ent.Time } s.posted++ + return nil + }) + if err != nil { + return err } since := now.Sub(oldest) s.sinceDays = since.Abs().Hours() / 24 s.postsPerDay = float64(s.posted) / float64(s.sinceDays) - return errors.Join(errs...) + return nil } func (s *stats) gatherQueuedStats(dir string) error { - ch, err := oi.ReadDirFilter(dir, func(file os.DirEntry) bool { - return strings.HasSuffix(file.Name(), ".queued") - }) - if err != nil { - return err - } + var firstQueuedPath string - var ( - firstQueuedPath string - errs []error - ) - for filePath := range ch { - // Here, we only test whether we can parse the entry. - if _, err := entry.New(filePath); err != nil { - errs = append(errs, err) - continue + err := oi.TraverseDir(dir, func(file os.DirEntry) error { + filePath := filepath.Join(dir, file.Name()) + ent, err := entry.New(filePath) + if err != nil { + return err } - if firstQueuedPath == "" { - firstQueuedPath = filePath + if ent.State == entry.Queued { + if firstQueuedPath == "" { + firstQueuedPath = filePath + } + s.queued++ } - s.queued++ - } + return nil + }) - return errors.Join(errs...) + return err } // Make a simpler "now" time which gets rid of any extra information like offsets etc. -- cgit v1.2.3