mirror of
https://github.com/fankes/beszel.git
synced 2025-10-18 17:29:28 +08:00
75 lines
2.4 KiB
Go
75 lines
2.4 KiB
Go
package alerts
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/pocketbase/dbx"
|
|
"github.com/pocketbase/pocketbase/core"
|
|
)
|
|
|
|
// On triggered alert record delete, set matching alert history record to resolved
|
|
func resolveHistoryOnAlertDelete(e *core.RecordEvent) error {
|
|
if !e.Record.GetBool("triggered") {
|
|
return e.Next()
|
|
}
|
|
_ = resolveAlertHistoryRecord(e.App, e.Record.Id)
|
|
return e.Next()
|
|
}
|
|
|
|
// On alert record update, update alert history record
|
|
func updateHistoryOnAlertUpdate(e *core.RecordEvent) error {
|
|
original := e.Record.Original()
|
|
new := e.Record
|
|
|
|
originalTriggered := original.GetBool("triggered")
|
|
newTriggered := new.GetBool("triggered")
|
|
|
|
// no need to update alert history if triggered state has not changed
|
|
if originalTriggered == newTriggered {
|
|
return e.Next()
|
|
}
|
|
|
|
// if new state is triggered, create new alert history record
|
|
if newTriggered {
|
|
_, _ = createAlertHistoryRecord(e.App, new)
|
|
return e.Next()
|
|
}
|
|
|
|
// if new state is not triggered, check for matching alert history record and set it to resolved
|
|
_ = resolveAlertHistoryRecord(e.App, new.Id)
|
|
return e.Next()
|
|
}
|
|
|
|
// resolveAlertHistoryRecord sets the resolved field to the current time
|
|
func resolveAlertHistoryRecord(app core.App, alertRecordID string) error {
|
|
alertHistoryRecord, err := app.FindFirstRecordByFilter("alerts_history", "alert_id={:alert_id} && resolved=null", dbx.Params{"alert_id": alertRecordID})
|
|
if err != nil || alertHistoryRecord == nil {
|
|
return err
|
|
}
|
|
alertHistoryRecord.Set("resolved", time.Now().UTC())
|
|
err = app.Save(alertHistoryRecord)
|
|
if err != nil {
|
|
app.Logger().Error("Failed to resolve alert history", "err", err)
|
|
}
|
|
return err
|
|
}
|
|
|
|
// createAlertHistoryRecord creates a new alert history record
|
|
func createAlertHistoryRecord(app core.App, alertRecord *core.Record) (alertHistoryRecord *core.Record, err error) {
|
|
alertHistoryCollection, err := app.FindCachedCollectionByNameOrId("alerts_history")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
alertHistoryRecord = core.NewRecord(alertHistoryCollection)
|
|
alertHistoryRecord.Set("alert_id", alertRecord.Id)
|
|
alertHistoryRecord.Set("user", alertRecord.GetString("user"))
|
|
alertHistoryRecord.Set("system", alertRecord.GetString("system"))
|
|
alertHistoryRecord.Set("name", alertRecord.GetString("name"))
|
|
alertHistoryRecord.Set("value", alertRecord.GetFloat("value"))
|
|
err = app.Save(alertHistoryRecord)
|
|
if err != nil {
|
|
app.Logger().Error("Failed to save alert history", "err", err)
|
|
}
|
|
return alertHistoryRecord, err
|
|
}
|