mirror of
https://github.com/fankes/beszel.git
synced 2025-10-18 17:29:28 +08:00
56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
package alerts
|
|
|
|
import (
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/pocketbase/pocketbase/core"
|
|
)
|
|
|
|
func (am *AlertManager) GetAlertManager() *AlertManager {
|
|
return am
|
|
}
|
|
|
|
func (am *AlertManager) GetPendingAlerts() *sync.Map {
|
|
return &am.pendingAlerts
|
|
}
|
|
|
|
func (am *AlertManager) GetPendingAlertsCount() int {
|
|
count := 0
|
|
am.pendingAlerts.Range(func(key, value any) bool {
|
|
count++
|
|
return true
|
|
})
|
|
return count
|
|
}
|
|
|
|
// ProcessPendingAlerts manually processes all expired alerts (for testing)
|
|
func (am *AlertManager) ProcessPendingAlerts() ([]*core.Record, error) {
|
|
now := time.Now()
|
|
var lastErr error
|
|
var processedAlerts []*core.Record
|
|
am.pendingAlerts.Range(func(key, value any) bool {
|
|
info := value.(*alertInfo)
|
|
if now.After(info.expireTime) {
|
|
// Downtime delay has passed, process alert
|
|
if err := am.sendStatusAlert("down", info.systemName, info.alertRecord); err != nil {
|
|
lastErr = err
|
|
}
|
|
processedAlerts = append(processedAlerts, info.alertRecord)
|
|
am.pendingAlerts.Delete(key)
|
|
}
|
|
return true
|
|
})
|
|
return processedAlerts, lastErr
|
|
}
|
|
|
|
// ForceExpirePendingAlerts sets all pending alerts to expire immediately (for testing)
|
|
func (am *AlertManager) ForceExpirePendingAlerts() {
|
|
now := time.Now()
|
|
am.pendingAlerts.Range(func(key, value any) bool {
|
|
info := value.(*alertInfo)
|
|
info.expireTime = now.Add(-time.Second) // Set to 1 second ago
|
|
return true
|
|
})
|
|
}
|