summaryrefslogtreecommitdiff
path: root/internal/schedule/stats.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/schedule/stats.go')
-rw-r--r--internal/schedule/stats.go61
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.