diff options
| author | Paul Buetow <paul@buetow.org> | 2024-08-22 10:31:43 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-08-22 10:31:43 +0300 |
| commit | f2b9094e301ac764930feaca93f1f0705f3e1a04 (patch) | |
| tree | 62dedc06f8a90c1c4f9906269e8e44698f530257 /internal/server/cron | |
| parent | b9aac1245c586ed3a78713e7b47f1e00c71a9aa2 (diff) | |
initial scheduler
Diffstat (limited to 'internal/server/cron')
| -rw-r--r-- | internal/server/cron/cron.go | 41 |
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 + } } |
