diff options
Diffstat (limited to 'internal/schedule/stats.go')
| -rw-r--r-- | internal/schedule/stats.go | 61 |
1 files changed, 25 insertions, 36 deletions
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. |
