From 7caf7d1b31e5acc1794f71260c066b3c61362e57 Mon Sep 17 00:00:00 2001 From: henrygd Date: Thu, 8 May 2025 20:41:44 -0400 Subject: [PATCH] Clear system's active alerts when system is paused --- beszel/internal/hub/systems/systems.go | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/beszel/internal/hub/systems/systems.go b/beszel/internal/hub/systems/systems.go index 20e7b35..e2bb2a2 100644 --- a/beszel/internal/hub/systems/systems.go +++ b/beszel/internal/hub/systems/systems.go @@ -122,7 +122,8 @@ func (sm *SystemManager) onRecordAfterUpdateSuccess(e *core.RecordEvent) error { newStatus := e.Record.GetString("status") switch newStatus { case paused: - sm.RemoveSystem(e.Record.Id) + _ = sm.RemoveSystem(e.Record.Id) + _ = deactivateAlerts(e.App, e.Record.Id) return e.Next() case pending: if err := sm.AddRecord(e.Record); err != nil { @@ -437,3 +438,20 @@ func (sys *System) resetSSHClient() { } sys.client = nil } + +// deactivateAlerts finds all triggered alerts for a system and sets them to false +func deactivateAlerts(app core.App, systemID string) error { + // we can't use an UPDATE query because it doesn't work with realtime updates + // _, err := e.App.DB().NewQuery(fmt.Sprintf("UPDATE alerts SET triggered = false WHERE system = '%s'", e.Record.Id)).Execute() + alerts, err := app.FindRecordsByFilter("alerts", fmt.Sprintf("system = '%s' && triggered = 1", systemID), "", -1, 0) + if err != nil { + return err + } + for _, alert := range alerts { + alert.Set("triggered", false) + if err := app.SaveNoValidate(alert); err != nil { + return err + } + } + return nil +}