From af165c345ad11c202f57ed827f910ec54905ef69 Mon Sep 17 00:00:00 2001 From: BroodjeAap Date: Sun, 22 Jan 2023 09:57:58 +0000 Subject: [PATCH] added schedule delay in conf, cronjobs are scheduled with this delay in between --- config.tmpl | 4 +++- main.go | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/config.tmpl b/config.tmpl index e3edd6a..02f6a7b 100644 --- a/config.tmpl +++ b/config.tmpl @@ -43,4 +43,6 @@ proxy: browserless: url: http://your.browserless:1234 gin: - debug: false \ No newline at end of file + debug: false +schedule: + delay: "5s" \ No newline at end of file diff --git a/main.go b/main.go index 51bd72c..e5c0438 100644 --- a/main.go +++ b/main.go @@ -172,6 +172,17 @@ func (web *Web) initCronJobs() { web.db.Model(&Filter{}).Find(&cronFilters, "type = 'cron' AND var2 = 'yes'") web.cronWatch = make(map[uint]cron.EntryID, len(cronFilters)) web.cron = cron.New() + web.cron.Start() + + // add some delay to cron jobs, so watches with the same schedule don't + // 'burst' at the same time after restarting GoWatch + cronDelayStr := viper.GetString("schedule.delay") + cronDelay, delayErr := time.ParseDuration(cronDelayStr) + if delayErr == nil { + log.Println("Delaying job startup by:", cronDelay.String()) + } else { + web.startupWarning("Could not parse schedule.delay: ", cronDelayStr) + } for i := range cronFilters { cronFilter := &cronFilters[i] entryID, err := web.cron.AddFunc(cronFilter.Var1, func() { triggerSchedule(cronFilter.WatchID, web, &cronFilter.ID) }) @@ -181,6 +192,9 @@ func (web *Web) initCronJobs() { } log.Println("Started CronJob for WatchID", cronFilter.WatchID, "with schedule:", cronFilter.Var1) web.cronWatch[cronFilter.ID] = entryID + + if delayErr == nil { + time.Sleep(cronDelay) } if viper.IsSet("database.prune") { pruneSchedule := viper.GetString("database.prune") @@ -190,7 +204,6 @@ func (web *Web) initCronJobs() { } log.Println("Started DB prune cronjob:", pruneSchedule) } - web.cron.Start() } func (web *Web) initNotifiers() {