New features: stale banner, tab title alerts, health checks, DB housekeeping

static/app.js:
- Browser tab title updates to show alert count: '(3 CRIT) GANDALF' or '(2 WARN) GANDALF'
- Stale monitoring banner: injected into .main if last_check > 15 min old,
  warns operator that the monitor daemon may be down

static/style.css:
- .stale-banner: amber top-border warning strip

app.py:
- /health now checks DB connectivity and monitor freshness (last_check age)
  Returns 503 + degraded status if DB unreachable or monitor stale >20min

db.py:
- cleanup_expired_suppressions(): marks time-limited suppressions inactive when
  expires_at <= NOW() (was only filtered in SELECTs, never marked inactive)
- purge_old_resolved_events(days=90): deletes old resolved events to prevent
  unbounded table growth

monitor.py:
- Calls cleanup_expired_suppressions() and purge_old_resolved_events() each cycle

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-14 21:35:32 -04:00
parent 14eaa6a8c9
commit 17d3b7d227
5 changed files with 111 additions and 2 deletions

View File

@@ -1423,3 +1423,16 @@ a:hover { text-decoration: underline; text-shadow: var(--glow-amber); }
.inspector-panel.open { width:100%; }
.inspector-panel-inner { width:100%; }
}
/* ── Stale monitoring banner ──────────────────────────────────────── */
.stale-banner {
background: rgba(255, 160, 0, 0.12);
border: 1px solid var(--warning);
border-left: 4px solid var(--warning);
color: var(--warning);
padding: 10px 16px;
margin: 12px 16px 0;
font-size: 0.88em;
font-family: var(--font-mono);
border-radius: 2px;
}