summaryrefslogtreecommitdiff
path: root/internal/schedule
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-10-01 10:55:50 +0300
committerPaul Buetow <paul@buetow.org>2024-10-01 10:55:50 +0300
commitbc6a3e478a7e0efc12c30be9f74ef5c3ff7a63fb (patch)
treeb426efbe9de7dbd3e083263338380b3d97019f55 /internal/schedule
parent74bcb110cba9cd22b88c561115e332d500de7716 (diff)
some more foo
Diffstat (limited to 'internal/schedule')
-rw-r--r--internal/schedule/schedule.go9
-rw-r--r--internal/schedule/stats.go61
2 files changed, 32 insertions, 38 deletions
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.