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:
@@ -1,10 +1,50 @@
|
||||
export const name = "Raptor";
|
||||
export const url = "https://status.raptortech.com/";
|
||||
|
||||
const API_URL =
|
||||
"https://status.raptortech.com/1.0/status/6501d5abfab4ce052d52e315";
|
||||
|
||||
// Status.io status_code → dashboard status
|
||||
function mapStatusCode(code) {
|
||||
if (code === 100) return "operational";
|
||||
if (code === 200) return "degraded"; // planned maintenance
|
||||
if (code >= 300 && code < 500) return "degraded"; // degraded / partial disruption
|
||||
if (code >= 500) return "outage"; // service disruption / security event
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
export async function checkStatus() {
|
||||
const res = await fetch(API_URL);
|
||||
|
||||
if (!res.ok) {
|
||||
throw new Error(`Raptor status request failed (${res.status})`);
|
||||
}
|
||||
|
||||
const data = await res.json();
|
||||
const result = data.result ?? {};
|
||||
const overall = result.status_overall ?? {};
|
||||
const status = mapStatusCode(overall.status_code);
|
||||
|
||||
const incidents = result.incidents ?? [];
|
||||
let message;
|
||||
|
||||
if (incidents.length > 0) {
|
||||
message = incidents
|
||||
.map((i) => {
|
||||
const components = (i.containers_affected ?? [])
|
||||
.map((c) => c.name)
|
||||
.join(", ");
|
||||
return components ? `${i.name} (${components})` : i.name;
|
||||
})
|
||||
.join(" | ");
|
||||
} else {
|
||||
message = overall.status ?? "All services operational.";
|
||||
}
|
||||
|
||||
return {
|
||||
name,
|
||||
status: "operational",
|
||||
message: "Visitor management online.",
|
||||
status,
|
||||
message,
|
||||
lastUpdated: new Date().toISOString(),
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user