Add homelab service and system health monitoring
This commit is contained in:
49
email.go
49
email.go
@@ -111,6 +111,55 @@ func sendAlertEmail(settings EmailSettings, alerts []Alert, test bool) error {
|
||||
return client.Quit()
|
||||
}
|
||||
|
||||
func sendRecoveryEmail(settings EmailSettings, items []RecoveryEvent) error {
|
||||
alerts := make([]Alert, 0, len(items))
|
||||
for _, v := range items {
|
||||
alerts = append(alerts, Alert{ID: v.ID, Severity: "info", Source: v.Source, Title: "Восстановлено: " + v.Title, Message: "Проблема больше не наблюдается."})
|
||||
}
|
||||
return sendAlertEmail(settings, alerts, false)
|
||||
}
|
||||
|
||||
func runImmediateNotifier(collect func() (dashboardMetrics, error), store *Store) {
|
||||
ticker := time.NewTicker(5 * time.Second)
|
||||
defer ticker.Stop()
|
||||
for range ticker.C {
|
||||
settings := store.EmailSettings(true)
|
||||
if !settings.Enabled {
|
||||
continue
|
||||
}
|
||||
if _, err := collect(); err != nil {
|
||||
continue
|
||||
}
|
||||
urgent, err := store.PendingImmediateAlerts()
|
||||
if err == nil && len(urgent) > 0 {
|
||||
urgent = filterEmailAlerts(urgent, settings)
|
||||
if len(urgent) > 0 && sendAlertEmail(settings, urgent, false) == nil {
|
||||
_ = store.MarkAlertsEmailed(urgent)
|
||||
}
|
||||
}
|
||||
recoveries, err := store.PendingRecoveries()
|
||||
if err == nil && len(recoveries) > 0 {
|
||||
var filtered []RecoveryEvent
|
||||
for _, v := range recoveries {
|
||||
if contains(settings.Sources, v.Source) {
|
||||
filtered = append(filtered, v)
|
||||
}
|
||||
}
|
||||
if len(filtered) > 0 && sendRecoveryEmail(settings, filtered) == nil {
|
||||
_ = store.MarkRecoveriesEmailed(filtered)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
func contains(items []string, want string) bool {
|
||||
for _, v := range items {
|
||||
if v == want {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func runEmailNotifier(collect func() (dashboardMetrics, error), store *Store) {
|
||||
ticker := time.NewTicker(time.Minute)
|
||||
defer ticker.Stop()
|
||||
|
||||
Reference in New Issue
Block a user