Fix 5 critical bugs identified through systematic code review: CRITICAL FIXES (prevent service crashes): - Add panic recovery to all alert callbacks (onAlert, onResolved, onEscalate) - Clone alerts before passing to escalation callback to prevent data races - Make clearAlertNoLock callback async to prevent deadlock HIGH PRIORITY FIXES (prevent memory leaks): - Add cleanup for stale pendingAlerts entries (deleted resources) - Add cleanup for dockerRestartTracking (ephemeral containers in CI/CD) MEDIUM PRIORITY FIXES (prevent stuck alerts): - Validate hysteresis thresholds (ensure clear < trigger) - Auto-fix invalid configurations with warning logs Impact: - Service stability: Malformed webhook URLs or email configs can no longer crash Pulse - Memory management: Prevents unbounded growth in dynamic environments - Alert reliability: Prevents alerts that never clear due to invalid thresholds - Concurrency safety: Eliminates data races in escalation path Technical details: - Created safeCallResolvedCallback() and safeCallEscalateCallback() wrappers - Added ensureValidHysteresis() validation helper - Extended Cleanup() with pendingAlerts and dockerRestartTracking pruning - All callbacks now have defer/recover panic handlers with detailed logging Testing: Verified compilation with 'go build -o /dev/null ./...' |
||
|---|---|---|
| .. | ||
| alerts.go | ||
| alerts_test.go | ||
| concurrency_test.go | ||
| history.go | ||
| history_concurrency_test.go | ||
| offline_toggle_test.go | ||
| quiet_hours_test.go | ||
| threshold_update_test.go | ||
| time_threshold_test.go | ||