From 2cc9dde62a02ee319857a9ca33776eabb2f65443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxi=20Quo=C3=9F?= Date: Mon, 30 Jan 2023 00:16:25 +0100 Subject: [PATCH] fix cron running always for last device --- backend/cronjobs/cronjobs.go | 52 +++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/backend/cronjobs/cronjobs.go b/backend/cronjobs/cronjobs.go index bddcb190..464aa7f9 100644 --- a/backend/cronjobs/cronjobs.go +++ b/backend/cronjobs/cronjobs.go @@ -84,31 +84,47 @@ func RunWakeShutdown(app *pocketbase.PocketBase) { shutdown_cron_enabled := device.GetBool("shutdown_cron_enabled") if wake_cron_enabled && wake_cron != "" { - CronWakeShutdown.AddFunc(wake_cron, func() { - device.Set("status", "pending") - app.Dao().SaveRecord(device) - if err := networking.WakeDevice(device); err != nil { + // avoid using last element + // https://github.com/robfig/cron/issues/115 + go func(d *models.Record) { + _, err := CronWakeShutdown.AddFunc(wake_cron, func() { + d.Set("status", "pending") + app.Dao().SaveRecord(d) + if err := networking.WakeDevice(d); err != nil { + logger.Error.Println(err) + d.Set("status", "offline") + app.Dao().SaveRecord(d) + } else { + d.Set("status", "online") + app.Dao().SaveRecord(d) + } + }) + if err != nil { logger.Error.Println(err) - device.Set("status", "offline") - app.Dao().SaveRecord(device) } - device.Set("status", "online") - app.Dao().SaveRecord(device) - }) + }(device) } if shutdown_cron_enabled && shutdown_cron != "" { - CronWakeShutdown.AddFunc(shutdown_cron, func() { - device.Set("status", "pending") - app.Dao().SaveRecord(device) - if err := networking.ShutdownDevice(device); err != nil { + // avoid using last element + // https://github.com/robfig/cron/issues/115 + go func(d *models.Record) { + _, err := CronWakeShutdown.AddFunc(shutdown_cron, func() { + d.Set("status", "pending") + app.Dao().SaveRecord(d) + if err := networking.ShutdownDevice(d); err != nil { + logger.Error.Println(err) + d.Set("status", "online") + app.Dao().SaveRecord(d) + } else { + d.Set("status", "offline") + app.Dao().SaveRecord(d) + } + }) + if err != nil { logger.Error.Println(err) - device.Set("status", "online") - app.Dao().SaveRecord(device) } - device.Set("status", "offline") - app.Dao().SaveRecord(device) - }) + }(device) } } logger.Debug.Println("CronWakeShutdown entries:", CronWakeShutdown.Entries())