fix: dispatch alert.acknowledged + alert.resolved on UI ack/resolve
Spotted during the live Playwright sweep: clicking Acknowledge or Resolve updated the alert row but never fanned out a notification. The handlers went straight to Store.Acknowledge/Resolve, bypassing the hub. Add Engine.Acknowledge and Engine.Resolve that wrap the store call and dispatch the matching event to every enabled channel. The UI handlers prefer the engine path when wired, and fall back to the direct store call so unit tests that construct a Server without an engine still work. Use context.WithoutCancel for the goroutine dispatch — the request context is cancelled the instant the handler returns 204, so the naive 'go e.hub.Dispatch(ctx, ...)' was racing the response and losing the channel-list query with 'context canceled'.
This commit is contained in:
@@ -119,7 +119,13 @@ func (s *Server) handleUIAlertAcknowledge(w stdhttp.ResponseWriter, r *stdhttp.R
|
||||
stdhttp.Error(w, "missing id", stdhttp.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
if err := s.deps.Store.Acknowledge(r.Context(), id, u.ID, time.Now().UTC()); err != nil {
|
||||
var err error
|
||||
if s.deps.AlertEngine != nil {
|
||||
err = s.deps.AlertEngine.Acknowledge(r.Context(), id, u.ID, time.Now().UTC())
|
||||
} else {
|
||||
err = s.deps.Store.Acknowledge(r.Context(), id, u.ID, time.Now().UTC())
|
||||
}
|
||||
if err != nil {
|
||||
slog.Warn("ui alerts: ack", "err", err)
|
||||
}
|
||||
_ = s.deps.Store.AppendAudit(r.Context(), store.AuditEntry{
|
||||
@@ -147,7 +153,13 @@ func (s *Server) handleUIAlertResolve(w stdhttp.ResponseWriter, r *stdhttp.Reque
|
||||
stdhttp.Error(w, "missing id", stdhttp.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
if err := s.deps.Store.Resolve(r.Context(), id, time.Now().UTC()); err != nil {
|
||||
var err error
|
||||
if s.deps.AlertEngine != nil {
|
||||
err = s.deps.AlertEngine.Resolve(r.Context(), id, time.Now().UTC())
|
||||
} else {
|
||||
err = s.deps.Store.Resolve(r.Context(), id, time.Now().UTC())
|
||||
}
|
||||
if err != nil {
|
||||
slog.Warn("ui alerts: resolve", "err", err)
|
||||
}
|
||||
_ = s.deps.Store.AppendAudit(r.Context(), store.AuditEntry{
|
||||
|
||||
Reference in New Issue
Block a user