Implement all vendor integrations, WAN graphs, and FortiGate health panel
- Wire up 26 vendor providers: Atlassian Statuspage API, Status.io, Instatus, AWS RSS feeds, Apple/Google JSON feeds, M365 Graph API, and synthetic checks - Add 11 new providers: AWS, Cloudflare, SmartPass, School Dismissal Manager, SherpaDesk, Classkick, ClassDojo, Savvas, Study Island, Promethean, RAZ-Kids - Rename Local Infrastructure → Internet (TCP check to 8.8.8.8:53) - Add WAN throughput graph section: dual-link canvas graphs (Crown Castle + Comcast) polling FortiGate REST API every 30s with 30-min rolling history - Add FortiGate health card: uptime, CPU %, memory % from FortiOS API - Add /api/throughput and /api/fortigate-health endpoints - Add README with setup instructions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -158,6 +158,150 @@ header {
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
|
||||
/* ===== WAN THROUGHPUT ===== */
|
||||
|
||||
#wan-section {
|
||||
padding: 1.5rem 2.5rem 0;
|
||||
}
|
||||
|
||||
#wan-graphs {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 1.25rem;
|
||||
}
|
||||
|
||||
.wan-panel {
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--border);
|
||||
border-top: 3px solid #388bfd;
|
||||
border-radius: 8px;
|
||||
padding: 1.25rem 1.5rem 1rem;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.wan-panel-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
.wan-name {
|
||||
font-family: var(--font-display);
|
||||
font-size: 1.1rem;
|
||||
font-weight: 800;
|
||||
color: var(--text-1);
|
||||
letter-spacing: 0.03em;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.wan-legend {
|
||||
display: flex;
|
||||
gap: 1.25rem;
|
||||
}
|
||||
|
||||
.wan-legend-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.4rem;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.68rem;
|
||||
color: var(--text-2);
|
||||
}
|
||||
|
||||
.wan-legend-dot {
|
||||
width: 7px;
|
||||
height: 7px;
|
||||
border-radius: 50%;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.wan-legend-dot.rx { background: #58a6ff; box-shadow: 0 0 5px rgba(88, 166, 255, 0.5); }
|
||||
.wan-legend-dot.tx { background: #3fb950; box-shadow: 0 0 5px rgba(63, 185, 80, 0.5); }
|
||||
|
||||
.wan-canvas {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
}
|
||||
|
||||
/* ===== FORTIGATE HEALTH CARD ===== */
|
||||
|
||||
#fg-health-card {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 2rem;
|
||||
margin-top: 1.25rem;
|
||||
background: var(--surface);
|
||||
border: 1px solid var(--border);
|
||||
border-top: 3px solid #388bfd;
|
||||
border-radius: 8px;
|
||||
padding: 1rem 1.5rem;
|
||||
}
|
||||
|
||||
.fg-identity {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.65rem;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.fg-model {
|
||||
font-family: var(--font-display);
|
||||
font-size: 1.1rem;
|
||||
font-weight: 800;
|
||||
color: var(--text-1);
|
||||
letter-spacing: 0.03em;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.fg-metrics {
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.fg-metric {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.2rem;
|
||||
}
|
||||
|
||||
.fg-metric-label {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.6rem;
|
||||
font-weight: 400;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.08em;
|
||||
color: var(--text-3);
|
||||
}
|
||||
|
||||
.fg-metric-value {
|
||||
font-family: var(--font-mono);
|
||||
font-size: 0.85rem;
|
||||
font-weight: 400;
|
||||
color: var(--text-1);
|
||||
}
|
||||
|
||||
.fg-metric-value.warn { color: var(--warn); }
|
||||
.fg-metric-value.crit { color: var(--crit); }
|
||||
|
||||
@media (max-width: 640px) {
|
||||
#wan-section {
|
||||
padding: 1.25rem 1.5rem 0;
|
||||
}
|
||||
|
||||
#wan-graphs {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
#fg-health-card {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
gap: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* ===== VENDOR GRID ===== */
|
||||
|
||||
#vendor-grid {
|
||||
@@ -269,6 +413,17 @@ header {
|
||||
|
||||
/* --- Vendor name --- */
|
||||
|
||||
.vendor-name a.vendor-link {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.vendor-name a.vendor-link:hover {
|
||||
text-decoration: underline;
|
||||
text-decoration-color: var(--text-3);
|
||||
text-underline-offset: 3px;
|
||||
}
|
||||
|
||||
.vendor-name {
|
||||
font-family: var(--font-display);
|
||||
font-size: 1.35rem;
|
||||
|
||||
Reference in New Issue
Block a user