Add real-time NOC status badge

This commit is contained in:
2026-04-26 17:52:06 -05:00
parent c7c1028462
commit b5e097f0fb
4 changed files with 67 additions and 22 deletions
+3 -2
View File
@@ -70,9 +70,10 @@ This demonstrates:
## 🔴 Live System Status ## 🔴 Live System Status
![NOC Status](https://img.shields.io/badge/NOC-Operational-brightgreen?style=for-the-badge) ![Ced's NOC](https://img.shields.io/endpoint?url=https://ced4568.github.io/ced-portfolio/data/noc-badge.json&style=for-the-badge)
![Systems](https://img.shields.io/badge/Systems-Online-blue?style=for-the-badge)
![Edge](https://img.shields.io/badge/Edge-RF%20Active-orange?style=for-the-badge) ![Edge](https://img.shields.io/badge/Edge-RF%20Active-orange?style=for-the-badge)
![Portfolio](https://img.shields.io/badge/Portfolio-Live-blue?style=for-the-badge)
--- ---
# 🧠 Featured System — Ceds NOC (Network Operations Center) # 🧠 Featured System — Ceds NOC (Network Operations Center)
+6
View File
@@ -0,0 +1,6 @@
{
"schemaVersion": 1,
"label": "Ced's NOC",
"message": "All Systems Online | 8/8 online | 0 offline",
"color": "brightgreen"
}
+20 -20
View File
@@ -1,7 +1,7 @@
{ {
"nocName": "Ced's NOC", "nocName": "Ced's NOC",
"status": "All Systems Online", "status": "All Systems Online",
"lastUpdated": "2026-04-26 16:03:47", "lastUpdated": "2026-04-26 17:50:50",
"summary": { "summary": {
"nodes": "12+", "nodes": "12+",
"services": "8/8", "services": "8/8",
@@ -16,11 +16,11 @@
"type": "Virtualization Platform", "type": "Virtualization Platform",
"address": "10.10.30.250:8006", "address": "10.10.30.250:8006",
"status": "Online", "status": "Online",
"severity": "Degraded", "severity": "Healthy",
"layer": "Core Infrastructure", "layer": "Core Infrastructure",
"label": "Hypervisor", "label": "Hypervisor",
"latency": "52 ms", "latency": "4 ms",
"lastCheck": "2026-04-26 16:03:47" "lastCheck": "2026-04-26 17:50:50"
}, },
{ {
"name": "TrueNAS", "name": "TrueNAS",
@@ -30,8 +30,8 @@
"severity": "Healthy", "severity": "Healthy",
"layer": "Storage", "layer": "Storage",
"label": "NAS", "label": "NAS",
"latency": "1 ms", "latency": "0 ms",
"lastCheck": "2026-04-26 16:03:47" "lastCheck": "2026-04-26 17:50:50"
}, },
{ {
"name": "Nginx Proxy Manager", "name": "Nginx Proxy Manager",
@@ -41,8 +41,8 @@
"severity": "Healthy", "severity": "Healthy",
"layer": "Access Layer", "layer": "Access Layer",
"label": "Proxy", "label": "Proxy",
"latency": "0 ms", "latency": "3 ms",
"lastCheck": "2026-04-26 16:03:47" "lastCheck": "2026-04-26 17:50:50"
}, },
{ {
"name": "Dashy", "name": "Dashy",
@@ -52,8 +52,8 @@
"severity": "Healthy", "severity": "Healthy",
"layer": "Dashboard", "layer": "Dashboard",
"label": "Portal", "label": "Portal",
"latency": "13 ms", "latency": "11 ms",
"lastCheck": "2026-04-26 16:03:47" "lastCheck": "2026-04-26 17:50:50"
}, },
{ {
"name": "Jellyfin", "name": "Jellyfin",
@@ -63,8 +63,8 @@
"severity": "Healthy", "severity": "Healthy",
"layer": "Application Service", "layer": "Application Service",
"label": "App", "label": "App",
"latency": "15 ms", "latency": "0 ms",
"lastCheck": "2026-04-26 16:03:47" "lastCheck": "2026-04-26 17:50:50"
}, },
{ {
"name": "K3s API", "name": "K3s API",
@@ -74,30 +74,30 @@
"severity": "Healthy", "severity": "Healthy",
"layer": "Compute Cluster", "layer": "Compute Cluster",
"label": "Cluster", "label": "Cluster",
"latency": "1 ms", "latency": "0 ms",
"lastCheck": "2026-04-26 16:03:47" "lastCheck": "2026-04-26 17:50:50"
}, },
{ {
"name": "APRS Home iGate", "name": "APRS Home iGate",
"type": "RF Edge Gateway", "type": "RF Edge Gateway",
"address": "KJ5JCO-10 / Direwolf KISS 8001", "address": "KJ5JCO-10 / Direwolf KISS 8001",
"status": "Online", "status": "Online",
"severity": "Degraded", "severity": "Critical",
"layer": "Edge / RF", "layer": "Edge / RF",
"label": "iGate", "label": "iGate",
"latency": "97 ms", "latency": "324 ms",
"lastCheck": "2026-04-26 16:03:47" "lastCheck": "2026-04-26 17:50:50"
}, },
{ {
"name": "APRS-IS", "name": "APRS-IS",
"type": "APRS Internet Service", "type": "APRS Internet Service",
"address": "noam.aprs2.net:14580", "address": "noam.aprs2.net:14580",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Degraded",
"layer": "Edge / RF", "layer": "Edge / RF",
"label": "External", "label": "External",
"latency": "42 ms", "latency": "98 ms",
"lastCheck": "2026-04-26 16:03:47" "lastCheck": "2026-04-26 17:50:50"
} }
] ]
} }
+38
View File
@@ -0,0 +1,38 @@
import json
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
NOC_FILE = ROOT / "data" / "noc-status.json"
BADGE_FILE = ROOT / "data" / "noc-badge.json"
with open(NOC_FILE, "r", encoding="utf-8") as file:
data = json.load(file)
status = data.get("status", "Unknown")
summary = data.get("summary", {})
online = summary.get("online", "?")
offline = summary.get("offline", "?")
services = summary.get("services", f"{online}/?")
if status == "All Systems Online":
color = "brightgreen"
elif status == "Degraded":
color = "yellow"
else:
color = "red"
badge = {
"schemaVersion": 1,
"label": "Ced's NOC",
"message": f"{status} | {services} online | {offline} offline",
"color": color
}
BADGE_FILE.parent.mkdir(parents=True, exist_ok=True)
with open(BADGE_FILE, "w", encoding="utf-8") as file:
json.dump(badge, file, indent=2)
print(f"NOC badge written to {BADGE_FILE}")
print(badge["message"])