Klein 51eb3bf7c8 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>
2026-02-20 13:46:13 -05:00

NHSD Service Status Dashboard

A web-based status feed aggregator for the North Hills School District IT department. Provides a single-pane-of-glass view of vendor service health across 26 platforms, plus live WAN throughput graphs and FortiGate health monitoring.

Features

  • Vendor status cards — real-time health for all district platforms, color-coded and sortable by severity
  • WAN throughput graphs — live RX/TX graphs for Crown Castle and Comcast WAN links, pulled from the FortiGate API
  • FortiGate health panel — hostname, firmware version, uptime, CPU, and memory utilization
  • Auto-refresh — vendor status refreshes every 2 minutes; throughput every 30 seconds
  • Glanceable design — optimized for a wall-mounted monitor; status obvious from across the room

Prerequisites

  • Node.js v18 or later
  • Caddy v2 — place caddy.exe in bin/caddy/
  • NSSM (optional, for running as Windows services) — place nssm.exe in bin/nssm/

Setup

1. Install backend dependencies

cd backend
npm install

2. Configure credentials

Copy the template and fill in your values:

cp backend/.env.example backend/.env

Edit backend/.env:

# Microsoft 365 — Azure AD app registration
AZURE_TENANT_ID=your-tenant-id
AZURE_CLIENT_ID=your-client-id
AZURE_CLIENT_SECRET=your-client-secret

# FortiGate — WAN throughput and system health
FORTIGATE_HOST=10.1.20.1
FORTIGATE_API_TOKEN=your-api-token
FORTIGATE_WAN1_INTERFACE=port25
FORTIGATE_WAN1_LABEL=Crown Castle
FORTIGATE_WAN2_INTERFACE=port8
FORTIGATE_WAN2_LABEL=Comcast

Microsoft 365: Create an app registration in Azure AD with ServiceHealth.Read.All permission (application, not delegated).

FortiGate: Create a read-only API token under System → Administrators → Create New → REST API Admin. Only Monitor access is required — no configuration access needed.

3. Start the backend

cd backend
npm start

The backend listens on http://localhost:3000.

4. Start Caddy

bin/caddy/caddy.exe run --config config/Caddyfile

The dashboard is then available at https://status.nhsd.net:8443.

Note: There is a separate, pre-existing Caddy instance on this machine. Always use the --config config/Caddyfile flag to target the dashboard Caddy specifically.

Running as Windows Services (NSSM)

Use the helper scripts in scripts/ to install the backend and Caddy as NSSM services so they start automatically with Windows.

API Endpoints

Endpoint Description
GET /api/status All vendor status (array)
GET /api/throughput WAN throughput history (array of 30-min data points)
GET /api/fortigate-health FortiGate hostname, version, uptime, CPU, memory
GET /api/health Backend liveness check

Adding a New Vendor

  1. Create backend/providers/<vendor>.js exporting name, url, and checkStatus()
  2. Add it to backend/providers/index.js

See any existing provider for the expected return shape:

export const name = "Vendor Name";
export const url  = "https://status.vendor.com/";

export async function checkStatus() {
  // ...
  return {
    name,
    status,      // "operational" | "degraded" | "outage" | "unknown"
    message,     // short human-readable description
    lastUpdated: new Date().toISOString(),
  };
}

If a vendor check throws, the backend catches it and returns status: "unknown" — the dashboard degrades gracefully.

S
Description
K-12 school district IT infrastructure monitoring dashboard
Readme 111 KiB
Languages
JavaScript 78%
CSS 20%
HTML 2%