feat: link health summary, recently resolved panel, event duration

- dashboard: pass recent_resolved (last 24h, limit 10) to index template;
  render "Recently Resolved" section showing type, target, resolved time,
  and calculated duration (first_seen → resolved_at)
- dashboard: event-age spans now also update via setInterval; duration
  shown for resolved events (e.g. "2h 15m")
- links page: link health summary panel shows server iface count,
  error/flap counts, switch port up/down, PoE total draw/capacity bar;
  only shows problematic stats if non-zero; shows "All OK ✔" when clean
- style.css: new classes for summary panel, resolved row/badge

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-14 21:48:40 -04:00
parent 6b6eaa6227
commit 0ca6b1f744
4 changed files with 195 additions and 0 deletions

View File

@@ -1524,3 +1524,73 @@ a:hover { text-decoration: underline; text-shadow: var(--glow-amber); }
border-radius: 2px;
font-size: .88em;
}
/* ── Link health summary panel ────────────────────────────────────── */
.link-summary-panel {
background: var(--bg2);
border: 1px solid var(--border);
border-radius: 2px;
padding: 12px 16px;
margin-bottom: 12px;
}
.link-summary-panel.link-summary-has-alerts {
border-color: var(--amber);
}
.link-summary-grid {
display: flex;
flex-wrap: wrap;
gap: 20px;
align-items: flex-end;
}
.link-summary-stat {
min-width: 80px;
}
.link-summary-stat.lss-alert .lss-label {
color: var(--amber);
}
.lss-label {
display: block;
font-size: .62em;
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: .05em;
margin-bottom: 2px;
}
.lss-value {
font-size: 1.2em;
font-weight: bold;
color: var(--text);
}
.lss-sub {
font-size: .7em;
color: var(--text-muted);
font-weight: normal;
}
/* ── Recently resolved table ──────────────────────────────────────── */
.row-resolved td {
opacity: 0.75;
}
.badge-resolved {
background: var(--bg3);
color: var(--text-muted);
border-color: var(--border);
text-decoration: line-through;
}
.section-badge-resolved {
background: var(--bg3);
color: var(--text-muted);
border: 1px solid var(--border);
font-size: .65em;
padding: 2px 7px;
border-radius: 10px;
}