@@ -2,103 +2,88 @@ package bootstrap
22
33import (
44 "context"
5- "fmt"
65 "log/slog"
76
87 "github.com/getarcaneapp/arcane/backend/internal/config"
9- "github.com/getarcaneapp/arcane/backend/internal/job "
8+ pkg_scheduler "github.com/getarcaneapp/arcane/backend/pkg/scheduler "
109)
1110
12- func initializeScheduler () (* job.Scheduler , error ) {
13- scheduler , err := job .NewScheduler ()
14- if err != nil {
15- return nil , fmt .Errorf ("failed to create job scheduler: %w" , err )
16- }
17- return scheduler , nil
18- }
11+ func registerJobs (appCtx context.Context , newScheduler * pkg_scheduler.JobScheduler , appServices * Services , appConfig * config.Config ) {
12+ autoUpdateJob := pkg_scheduler .NewAutoUpdateJob (appServices .Updater , appServices .Settings )
13+ newScheduler .RegisterJob (autoUpdateJob )
1914
20- func registerJobs (appCtx context.Context , scheduler * job.Scheduler , appServices * Services , appConfig * config.Config ) {
21- autoUpdateJob := job .NewAutoUpdateJob (scheduler , appServices .Updater , appServices .Settings )
22- if err := autoUpdateJob .Register (appCtx ); err != nil {
23- slog .ErrorContext (appCtx , "Failed to register auto-update job" , "error" , err )
24- }
15+ imagePollingJob := pkg_scheduler .NewImagePollingJob (appServices .ImageUpdate , appServices .Settings , appServices .Environment )
16+ newScheduler .RegisterJob (imagePollingJob )
2517
26- imagePollingJob := job .NewImagePollingJob (scheduler , appServices .ImageUpdate , appServices .Settings , appServices .Environment )
27- if err := imagePollingJob .Register (appCtx ); err != nil {
28- slog .ErrorContext (appCtx , "Failed to register image polling job" , "error" , err )
29- }
30-
31- environmentHealthJob := job .NewEnvironmentHealthJob (scheduler , appServices .Environment , appServices .Settings )
18+ environmentHealthJob := pkg_scheduler .NewEnvironmentHealthJob (appServices .Environment , appServices .Settings )
3219 if ! appConfig .AgentMode {
33- if err := environmentHealthJob .Register (appCtx ); err != nil {
34- slog .ErrorContext (appCtx , "Failed to register environment health check job" , "error" , err )
35- }
20+ newScheduler .RegisterJob (environmentHealthJob )
3621 }
3722
38- analyticsJob := job .NewAnalyticsJob (scheduler , appServices .Settings , nil , appConfig )
39- if err := analyticsJob .Register (appCtx ); err != nil {
40- slog .ErrorContext (appCtx , "Failed to register analytics heartbeat job" , "error" , err )
41- }
23+ analyticsJob := pkg_scheduler .NewAnalyticsJob (appServices .Settings , nil , appConfig )
24+ newScheduler .RegisterJob (analyticsJob )
4225
43- eventCleanupJob := job .NewEventCleanupJob (scheduler , appServices .Event , appServices .Settings )
44- if err := eventCleanupJob .Register (appCtx ); err != nil {
45- slog .ErrorContext (appCtx , "Failed to register event cleanup job" , "error" , err )
46- }
26+ eventCleanupJob := pkg_scheduler .NewEventCleanupJob (appServices .Event , appServices .Settings )
27+ newScheduler .RegisterJob (eventCleanupJob )
4728
48- scheduledPruneJob := job .NewScheduledPruneJob (scheduler , appServices .System , appServices .Settings )
49- if err := scheduledPruneJob .Register (appCtx ); err != nil {
50- slog .ErrorContext (appCtx , "Failed to register scheduled prune job" , "error" , err )
51- }
29+ scheduledPruneJob := pkg_scheduler .NewScheduledPruneJob (appServices .System , appServices .Settings )
30+ newScheduler .RegisterJob (scheduledPruneJob )
5231
53- fsWatcherJob , err := job .RegisterFilesystemWatcherJob (appCtx , scheduler , appServices .Project , appServices .Template , appServices .Settings )
32+ fsWatcherJob , err := pkg_scheduler .RegisterFilesystemWatcherJob (appCtx , appServices .Project , appServices .Template , appServices .Settings )
5433 if err != nil {
5534 slog .ErrorContext (appCtx , "Failed to register filesystem watcher job" , "error" , err )
5635 }
5736
58- gitOpsSyncJob := job .NewGitOpsSyncJob (scheduler , appServices .GitOpsSync , appServices .Settings )
59- if err := gitOpsSyncJob .Register (appCtx ); err != nil {
60- slog .ErrorContext (appCtx , "Failed to register GitOps sync job" , slog .Any ("error" , err ))
61- }
37+ gitOpsSyncJob := pkg_scheduler .NewGitOpsSyncJob (appServices .GitOpsSync , appServices .Settings )
38+ newScheduler .RegisterJob (gitOpsSyncJob )
6239
63- setupJobScheduleCallbacks (appServices , appConfig , environmentHealthJob , analyticsJob , eventCleanupJob )
64- setupSettingsCallbacks (appServices , appConfig , imagePollingJob , autoUpdateJob , environmentHealthJob , fsWatcherJob , scheduledPruneJob )
40+ setupJobScheduleCallbacks (appServices , appConfig , newScheduler , environmentHealthJob , analyticsJob , eventCleanupJob )
41+ setupSettingsCallbacks (appServices , appConfig , newScheduler , imagePollingJob , autoUpdateJob , environmentHealthJob , fsWatcherJob , scheduledPruneJob )
6542}
6643
67- func setupJobScheduleCallbacks (appServices * Services , appConfig * config.Config , environmentHealthJob * job .EnvironmentHealthJob , analyticsJob * job .AnalyticsJob , eventCleanupJob * job .EventCleanupJob ) {
44+ func setupJobScheduleCallbacks (appServices * Services , appConfig * config.Config , newScheduler * pkg_scheduler. JobScheduler , environmentHealthJob * pkg_scheduler .EnvironmentHealthJob , analyticsJob * pkg_scheduler .AnalyticsJob , eventCleanupJob * pkg_scheduler .EventCleanupJob ) {
6845 if appServices .JobSchedule != nil {
69- appServices .JobSchedule .OnJobSchedulesChanged = func (ctx context.Context ) {
70- if ! appConfig .AgentMode {
71- if err := environmentHealthJob .Reschedule (ctx ); err != nil {
72- slog .WarnContext (ctx , "Failed to reschedule environment-health job" , "error" , err )
46+ appServices .JobSchedule .OnJobSchedulesChanged = func (ctx context.Context , changedKeys []string ) {
47+ for _ , key := range changedKeys {
48+ switch key {
49+ case "environmentHealthInterval" :
50+ if appConfig .AgentMode {
51+ continue
52+ }
53+ if err := newScheduler .RescheduleJob (ctx , environmentHealthJob ); err != nil {
54+ slog .WarnContext (ctx , "Failed to reschedule environment-health job" , "error" , err )
55+ }
56+ case "analyticsHeartbeatInterval" :
57+ if err := newScheduler .RescheduleJob (ctx , analyticsJob ); err != nil {
58+ slog .WarnContext (ctx , "Failed to reschedule analytics heartbeat job" , "error" , err )
59+ }
60+ case "eventCleanupInterval" :
61+ if err := newScheduler .RescheduleJob (ctx , eventCleanupJob ); err != nil {
62+ slog .WarnContext (ctx , "Failed to reschedule event cleanup job" , "error" , err )
63+ }
7364 }
7465 }
75- if err := analyticsJob .Reschedule (ctx ); err != nil {
76- slog .WarnContext (ctx , "Failed to reschedule analytics heartbeat job" , "error" , err )
77- }
78- if err := eventCleanupJob .Reschedule (ctx ); err != nil {
79- slog .WarnContext (ctx , "Failed to reschedule event cleanup job" , "error" , err )
80- }
8166 }
8267 }
8368}
8469
85- func setupSettingsCallbacks (appServices * Services , appConfig * config.Config , imagePollingJob * job .ImagePollingJob , autoUpdateJob * job .AutoUpdateJob , environmentHealthJob * job .EnvironmentHealthJob , fsWatcherJob * job .FilesystemWatcherJob , scheduledPruneJob * job .ScheduledPruneJob ) {
70+ func setupSettingsCallbacks (appServices * Services , appConfig * config.Config , newScheduler * pkg_scheduler. JobScheduler , imagePollingJob * pkg_scheduler .ImagePollingJob , autoUpdateJob * pkg_scheduler .AutoUpdateJob , environmentHealthJob * pkg_scheduler .EnvironmentHealthJob , fsWatcherJob * pkg_scheduler .FilesystemWatcherJob , scheduledPruneJob * pkg_scheduler .ScheduledPruneJob ) {
8671 appServices .Settings .OnImagePollingSettingsChanged = func (ctx context.Context ) {
87- if err := imagePollingJob . Reschedule (ctx ); err != nil {
72+ if err := newScheduler . RescheduleJob (ctx , imagePollingJob ); err != nil {
8873 slog .WarnContext (ctx , "Failed to reschedule image-polling job" , "error" , err )
8974 }
90- if err := autoUpdateJob . Reschedule (ctx ); err != nil {
75+ if err := newScheduler . RescheduleJob (ctx , autoUpdateJob ); err != nil {
9176 slog .WarnContext (ctx , "Failed to reschedule auto-update job" , "error" , err )
9277 }
9378 if ! appConfig .AgentMode {
94- if err := environmentHealthJob . Reschedule (ctx ); err != nil {
79+ if err := newScheduler . RescheduleJob (ctx , environmentHealthJob ); err != nil {
9580 slog .WarnContext (ctx , "Failed to reschedule environment-health job" , "error" , err )
9681 }
9782 }
9883 }
9984 appServices .Settings .OnAutoUpdateSettingsChanged = func (ctx context.Context ) {
10085 slog .DebugContext (ctx , "AutoUpdateSettingsChanged callback triggered" )
101- if err := autoUpdateJob . Reschedule (ctx ); err != nil {
86+ if err := newScheduler . RescheduleJob (ctx , autoUpdateJob ); err != nil {
10287 slog .WarnContext (ctx , "Failed to reschedule auto-update job" , "error" , err )
10388 }
10489 }
@@ -110,7 +95,7 @@ func setupSettingsCallbacks(appServices *Services, appConfig *config.Config, ima
11095 }
11196 }
11297 appServices .Settings .OnScheduledPruneSettingsChanged = func (ctx context.Context ) {
113- if err := scheduledPruneJob . Reschedule (ctx ); err != nil {
98+ if err := newScheduler . RescheduleJob (ctx , scheduledPruneJob ); err != nil {
11499 slog .WarnContext (ctx , "Failed to reschedule scheduled-prune job" , "error" , err )
115100 }
116101 }
0 commit comments