summaryrefslogtreecommitdiff
path: root/internal/server/cron
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-08-22 10:31:43 +0300
committerPaul Buetow <paul@buetow.org>2024-08-22 10:31:43 +0300
commitf2b9094e301ac764930feaca93f1f0705f3e1a04 (patch)
tree62dedc06f8a90c1c4f9906269e8e44698f530257 /internal/server/cron
parentb9aac1245c586ed3a78713e7b47f1e00c71a9aa2 (diff)
initial scheduler
Diffstat (limited to 'internal/server/cron')
-rw-r--r--internal/server/cron/cron.go41
1 files changed, 23 insertions, 18 deletions
diff --git a/internal/server/cron/cron.go b/internal/server/cron/cron.go
index 4ec3107..b31b48f 100644
--- a/internal/server/cron/cron.go
+++ b/internal/server/cron/cron.go
@@ -2,32 +2,37 @@ package cron
import (
"context"
+ "fmt"
"log"
"time"
config "codeberg.org/snonux/gos/internal/config/server"
+ "codeberg.org/snonux/gos/internal/server/health"
"codeberg.org/snonux/gos/internal/server/repository"
+ "codeberg.org/snonux/gos/internal/server/scheduler"
)
-func Start(ctx context.Context, conf config.ServerConfig) error {
- go func() {
- helloTicker := time.NewTicker(time.Hour)
- mergeTicker := time.NewTicker(time.Second * time.Duration(conf.CRONMergeIntervalS))
+func Run(ctx context.Context, conf config.ServerConfig, status health.Status) {
+ helloTicker := time.NewTicker(time.Hour)
+ mergeTicker := time.NewTicker(time.Second * time.Duration(conf.MergeIntervalS))
+ scheduleTicker := time.NewTicker(time.Second * time.Duration(conf.ScheduleIntervalS))
- for {
- select {
- case <-ctx.Done():
- return
- case <-helloTicker.C:
- log.Println("CRON hello ticker ticked")
- case <-mergeTicker.C:
- log.Println("CRON ticker initiating remote merge operation")
- if err := repository.Instance(conf).MergeRemotely(ctx); err != nil {
- log.Println(err)
- }
+ for {
+ select {
+ case <-ctx.Done():
+ return
+ case <-helloTicker.C:
+ log.Println("CRON hello ticker ticked")
+ case <-mergeTicker.C:
+ log.Println("CRON ticker initiating remote merge operation")
+ if err := repository.Instance(conf).MergeRemotely(ctx); err != nil {
+ status.Set(health.Critical, "cron", fmt.Errorf("unable to merge remote repository: %w", err))
+ }
+ case <-scheduleTicker.C:
+ log.Println("CRON ticker initiating schedule operation")
+ if err := scheduler.Run(ctx); err != nil {
+ status.Set(health.Critical, "cron", fmt.Errorf("unable to schedule post(s): %w", err))
}
}
- }()
-
- return nil
+ }
}