Add homelab service and system health monitoring
This commit is contained in:
18
store.go
18
store.go
@@ -104,6 +104,19 @@ func openStore(path string) (*Store, error) {
|
||||
acknowledged_at INTEGER, email_sent_at INTEGER
|
||||
)`,
|
||||
`CREATE INDEX IF NOT EXISTS alert_events_active_idx ON alert_events(alert_key,resolved_at)`,
|
||||
`CREATE TABLE IF NOT EXISTS services (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, url TEXT NOT NULL,
|
||||
local_address TEXT NOT NULL DEFAULT '', check_type TEXT NOT NULL DEFAULT 'http',
|
||||
expected_code INTEGER NOT NULL DEFAULT 200, expected_text TEXT NOT NULL DEFAULT '',
|
||||
timeout_seconds INTEGER NOT NULL DEFAULT 5, enabled INTEGER NOT NULL DEFAULT 1
|
||||
)`,
|
||||
`CREATE TABLE IF NOT EXISTS service_checks (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT, service_id INTEGER NOT NULL, ts INTEGER NOT NULL,
|
||||
up INTEGER NOT NULL, latency_ms REAL NOT NULL, status_code INTEGER NOT NULL DEFAULT 0,
|
||||
error TEXT NOT NULL DEFAULT '', tls_expiry INTEGER,
|
||||
FOREIGN KEY(service_id) REFERENCES services(id) ON DELETE CASCADE
|
||||
)`,
|
||||
`CREATE INDEX IF NOT EXISTS service_checks_service_ts_idx ON service_checks(service_id,ts)`,
|
||||
}
|
||||
for _, statement := range statements {
|
||||
if _, err := db.Exec(statement); err != nil {
|
||||
@@ -111,6 +124,9 @@ func openStore(path string) (*Store, error) {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
// Older databases get this column without requiring a separate migration tool.
|
||||
_, _ = db.Exec(`ALTER TABLE alert_events ADD COLUMN recovery_sent_at INTEGER`)
|
||||
_, _ = db.Exec(`PRAGMA foreign_keys=ON`)
|
||||
return &Store{db: db}, nil
|
||||
}
|
||||
|
||||
@@ -138,7 +154,7 @@ func (s *Store) SaveThresholds(value AlertThresholds) error {
|
||||
}
|
||||
|
||||
func defaultEmailSettings() EmailSettings {
|
||||
return EmailSettings{Port: 587, IntervalMinutes: 60, Severities: []string{"critical", "warning"}, Sources: []string{"CPU", "Память", "Storage", "Диски", "ZFS", "UPS", "VM/LXC", "Proxmox", "Dashboard"}}
|
||||
return EmailSettings{Port: 587, IntervalMinutes: 60, Severities: []string{"critical", "warning"}, Sources: []string{"CPU", "Память", "Storage", "Диски", "ZFS", "UPS", "VM/LXC", "Proxmox", "Dashboard", "Сервисы", "Система", "Сеть"}}
|
||||
}
|
||||
|
||||
func (s *Store) EmailSettings(includePassword bool) EmailSettings {
|
||||
|
||||
Reference in New Issue
Block a user