Pulse/internal/alerts
rcourtman ad371bf412 feat: improve alert system performance, UX, and edge case handling
Implement 5 medium/low priority improvements identified in systematic review:

UX IMPROVEMENTS:
- Notify existing critical alerts when activating from pending_review state
  Previously: critical alerts during observation window would never notify
  Now: users receive notifications for active critical alerts after activation
  Implementation: Added NotifyExistingAlert() method and logic in ActivateAlerts()

PERFORMANCE OPTIMIZATIONS:
- Replace per-alert cleanup goroutines with periodic batch cleanup
  Prevents spawning 1000s of goroutines during alert flapping
  recentlyResolved entries now cleaned up once per minute instead of 1 goroutine per alert
- Simplify GetActiveAlerts() implementation
  Removed intermediate map copy, holds lock slightly longer but operation is fast
  Cleaner code with reduced memory allocation

CONFIGURATION VALIDATION:
- Validate timezone in quiet hours configuration
  Invalid timezones now disable quiet hours with error log instead of silent fallback
  Prevents unexpected behavior when timezone is typo'd or invalid

GRACEFUL SHUTDOWN:
- Add 100ms delay in Stop() for background goroutine cleanup
  Reduces risk of state corruption during shutdown
  Allows escalation checker and periodic save to exit cleanly

Technical details:
- internal/alerts/alerts.go: Added NotifyExistingAlert(), optimized cleanup patterns
- internal/api/alerts.go: Enhanced ActivateAlerts() to notify existing critical alerts
- Removed ~20 lines of goroutine spawning code
- Added periodic cleanup for recentlyResolved map
- All changes preserve backward compatibility

Testing: Verified compilation with 'go build -o /dev/null ./...'
2025-10-21 11:05:45 +00:00
..
alerts.go feat: improve alert system performance, UX, and edge case handling 2025-10-21 11:05:45 +00:00
alerts_test.go Adjust backup and snapshot alert handling 2025-10-18 20:11:01 +00:00
concurrency_test.go Fix settings security tab navigation 2025-10-11 23:29:47 +00:00
history.go Fix settings security tab navigation 2025-10-11 23:29:47 +00:00
history_concurrency_test.go Fix settings security tab navigation 2025-10-11 23:29:47 +00:00
offline_toggle_test.go Fix settings security tab navigation 2025-10-11 23:29:47 +00:00
quiet_hours_test.go Fix settings security tab navigation 2025-10-11 23:29:47 +00:00
threshold_update_test.go Fix settings security tab navigation 2025-10-11 23:29:47 +00:00
time_threshold_test.go Fix settings security tab navigation 2025-10-11 23:29:47 +00:00