Add binary-compatible collection watchdog

This commit is contained in:
Maxim
2026-08-01 17:03:15 +03:00
parent a570537e64
commit 96af2faeb1
2 changed files with 19 additions and 0 deletions

View File

@@ -63,6 +63,24 @@ type monitorTracker struct {
duration time.Duration
}
func runCollectionWatchdog(monitor *monitorTracker) {
started := time.Now()
ticker := time.NewTicker(15 * time.Second)
defer ticker.Stop()
for range ticker.C {
monitor.mu.RLock()
last := monitor.lastSuccess
monitor.mu.RUnlock()
if time.Since(started) < 2*time.Minute {
continue
}
if last.IsZero() || time.Since(last) > 90*time.Second {
log.Printf("Встроенный watchdog: сбор метрик не завершался более 90 секунд; перезапускаем процесс")
os.Exit(1)
}
}
}
func (m *monitorTracker) record(start time.Time, err error) {
m.mu.Lock()
defer m.mu.Unlock()

1
web.go
View File

@@ -122,6 +122,7 @@ func routes(collector *cpuCollector, store *Store) http.Handler {
systemHealth := newSystemHealthCollector()
activity := newActivityCollector()
monitor := &monitorTracker{}
go runCollectionWatchdog(monitor)
go runUPSShutdownController(store, ups, guests)
collect := func() (dashboardMetrics, error) {
started := time.Now()