Security: replace internal IPs with hostnames, fix filter persistence, UI improvements

This commit is contained in:
2026-05-14 18:48:54 -05:00
parent 2992192e28
commit 6028bd19fc
4 changed files with 84 additions and 67 deletions
+1 -1
View File
@@ -49,7 +49,7 @@ Proxmox Biggie (Cron every 5min)
### Automation ### Automation
- Script: `~/scripts/noc_update.py` running on Biggie (`10.10.30.192`) - Script: `~/scripts/noc_update.py` running on Biggie
- Cron: `*/5 * * * *` — every 5 minutes - Cron: `*/5 * * * *` — every 5 minutes
- Log: `/var/log/noc_update.log` - Log: `/var/log/noc_update.log`
- Auth: GitHub Personal Access Token via baked remote URL - Auth: GitHub Personal Access Token via baked remote URL
+48 -48
View File
@@ -10,198 +10,198 @@
}, },
"systems": [ "systems": [
{ {
"name": "Proxmox \u2014 BigWorld", "name": "Proxmox BigWorld",
"type": "Proxmox VE Hypervisor", "type": "Proxmox VE Hypervisor",
"layer": "Infrastructure", "layer": "Infrastructure",
"label": "Compute", "label": "Compute",
"address": "10.10.30.250", "address": "BigWorld",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.2ms", "latency": "0.2ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "Proxmox \u2014 Biggie", "name": "Proxmox Biggie",
"type": "Proxmox VE Hypervisor", "type": "Proxmox VE Hypervisor",
"layer": "Infrastructure", "layer": "Infrastructure",
"label": "Compute", "label": "Compute",
"address": "10.10.30.192", "address": "Biggie",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.1ms", "latency": "0.1ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "Proxmox \u2014 Snoop", "name": "Proxmox Snoop",
"type": "Proxmox VE Hypervisor", "type": "Proxmox VE Hypervisor",
"layer": "Infrastructure", "layer": "Infrastructure",
"label": "Compute", "label": "Compute",
"address": "10.10.30.153", "address": "Snoop",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.7ms", "latency": "0.7ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "Proxmox \u2014 TooShort", "name": "Proxmox TooShort",
"type": "Proxmox VE Hypervisor", "type": "Proxmox VE Hypervisor",
"layer": "Infrastructure", "layer": "Infrastructure",
"label": "Compute", "label": "Compute",
"address": "10.10.30.120", "address": "TooShort",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.4ms", "latency": "0.4ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "Proxmox \u2014 Tupac", "name": "Proxmox Tupac",
"type": "Proxmox VE Hypervisor", "type": "Proxmox VE Hypervisor",
"layer": "Infrastructure", "layer": "Infrastructure",
"label": "Compute", "label": "Compute",
"address": "10.10.30.74", "address": "Tupac",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.5ms", "latency": "0.5ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "Proxmox \u2014 DrDre", "name": "Proxmox DrDre",
"type": "Proxmox VE Hypervisor", "type": "Proxmox VE Hypervisor",
"layer": "Infrastructure", "layer": "Infrastructure",
"label": "Compute", "label": "Compute",
"address": "10.10.30.227", "address": "DrDre",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.5ms", "latency": "0.5ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "K3s Control \u2014 django-1", "name": "K3s Control django-1",
"type": "K3s Control Plane", "type": "K3s Control Plane",
"layer": "Orchestration", "layer": "Orchestration",
"label": "K3s", "label": "K3s",
"address": "10.10.30.72", "address": "k3s-django-1",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.3ms", "latency": "0.3ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "K3s Control \u2014 django-2", "name": "K3s Control django-2",
"type": "K3s Control Plane", "type": "K3s Control Plane",
"layer": "Orchestration", "layer": "Orchestration",
"label": "K3s", "label": "K3s",
"address": "10.10.30.245", "address": "k3s-django-2",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.2ms", "latency": "0.2ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "K3s Control \u2014 django-3", "name": "K3s Control django-3",
"type": "K3s Control Plane", "type": "K3s Control Plane",
"layer": "Orchestration", "layer": "Orchestration",
"label": "K3s", "label": "K3s",
"address": "10.10.30.128", "address": "k3s-django-3",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.3ms", "latency": "0.3ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "K3s Ingress \u2014 node-1", "name": "K3s Ingress node-1",
"type": "K3s Worker / Ingress", "type": "K3s Worker / Ingress",
"layer": "Orchestration", "layer": "Orchestration",
"label": "K3s", "label": "K3s",
"address": "10.10.30.219", "address": "k3s-node-1",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.2ms", "latency": "0.2ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "K3s Ingress \u2014 node-2", "name": "K3s Ingress node-2",
"type": "K3s Worker / Ingress", "type": "K3s Worker / Ingress",
"layer": "Orchestration", "layer": "Orchestration",
"label": "K3s", "label": "K3s",
"address": "10.10.30.134", "address": "k3s-node-2",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.3ms", "latency": "0.3ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "K3s Ingress \u2014 node-3", "name": "K3s Ingress node-3",
"type": "K3s Worker / Ingress", "type": "K3s Worker / Ingress",
"layer": "Orchestration", "layer": "Orchestration",
"label": "K3s", "label": "K3s",
"address": "10.10.30.222", "address": "k3s-node-3",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.2ms", "latency": "0.2ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "K3s Data \u2014 node-4", "name": "K3s Data node-4",
"type": "K3s Worker / Data", "type": "K3s Worker / Data",
"layer": "Orchestration", "layer": "Orchestration",
"label": "K3s", "label": "K3s",
"address": "10.10.30.126", "address": "k3s-node-4",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.3ms", "latency": "0.3ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "K3s Data \u2014 node-5", "name": "K3s Data node-5",
"type": "K3s Worker / Data", "type": "K3s Worker / Data",
"layer": "Orchestration", "layer": "Orchestration",
"label": "K3s", "label": "K3s",
"address": "10.10.30.239", "address": "k3s-node-5",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.2ms", "latency": "0.2ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "K3s Data \u2014 node-6", "name": "K3s Data node-6",
"type": "K3s Worker / Data", "type": "K3s Worker / Data",
"layer": "Orchestration", "layer": "Orchestration",
"label": "K3s", "label": "K3s",
"address": "10.10.30.208", "address": "k3s-node-6",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.2ms", "latency": "0.2ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "K3s Monitor \u2014 node-7", "name": "K3s Monitor node-7",
"type": "K3s Worker / Monitoring", "type": "K3s Worker / Monitoring",
"layer": "Orchestration", "layer": "Orchestration",
"label": "K3s", "label": "K3s",
"address": "10.10.30.198", "address": "k3s-node-7",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.2ms", "latency": "0.2ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "K3s Monitor \u2014 node-8", "name": "K3s Monitor node-8",
"type": "K3s Worker / Monitoring", "type": "K3s Worker / Monitoring",
"layer": "Orchestration", "layer": "Orchestration",
"label": "K3s", "label": "K3s",
"address": "10.10.30.216", "address": "k3s-node-8",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.2ms", "latency": "0.2ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "K3s Monitor \u2014 node-9", "name": "K3s Monitor node-9",
"type": "K3s Worker / Monitoring", "type": "K3s Worker / Monitoring",
"layer": "Orchestration", "layer": "Orchestration",
"label": "K3s", "label": "K3s",
"address": "10.10.30.29", "address": "k3s-node-9",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.2ms", "latency": "0.2ms",
@@ -212,7 +212,7 @@
"type": "Network Attached Storage", "type": "Network Attached Storage",
"layer": "Infrastructure", "layer": "Infrastructure",
"label": "Storage", "label": "Storage",
"address": "10.10.30.143", "address": "TrueNAS",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.6ms", "latency": "0.6ms",
@@ -223,7 +223,7 @@
"type": "Reverse Proxy", "type": "Reverse Proxy",
"layer": "Networking", "layer": "Networking",
"label": "Access", "label": "Access",
"address": "10.10.30.210", "address": "NPM",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.3ms", "latency": "0.3ms",
@@ -234,7 +234,7 @@
"type": "Metrics Collection", "type": "Metrics Collection",
"layer": "Monitoring", "layer": "Monitoring",
"label": "Observability", "label": "Observability",
"address": "10.10.30.140", "address": "Prometheus",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.2ms", "latency": "0.2ms",
@@ -245,7 +245,7 @@
"type": "Metrics Dashboard", "type": "Metrics Dashboard",
"layer": "Monitoring", "layer": "Monitoring",
"label": "Observability", "label": "Observability",
"address": "10.10.30.68", "address": "Grafana",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.2ms", "latency": "0.2ms",
@@ -256,7 +256,7 @@
"type": "Service Monitor", "type": "Service Monitor",
"layer": "Monitoring", "layer": "Monitoring",
"label": "Observability", "label": "Observability",
"address": "10.10.30.14", "address": "Uptime Kuma",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.3ms", "latency": "0.3ms",
@@ -267,7 +267,7 @@
"type": "HomeLab Dashboard", "type": "HomeLab Dashboard",
"layer": "Services", "layer": "Services",
"label": "Dashboard", "label": "Dashboard",
"address": "10.10.30.61", "address": "Dashy",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.2ms", "latency": "0.2ms",
@@ -278,7 +278,7 @@
"type": "Home Automation", "type": "Home Automation",
"layer": "Services", "layer": "Services",
"label": "Automation", "label": "Automation",
"address": "10.10.30.104", "address": "Home Assistant",
"status": "Offline", "status": "Offline",
"severity": "Critical", "severity": "Critical",
"latency": "N/A", "latency": "N/A",
@@ -289,29 +289,29 @@
"type": "Media / Game Server", "type": "Media / Game Server",
"layer": "Services", "layer": "Services",
"label": "Media", "label": "Media",
"address": "10.10.30.233", "address": "PrimeStation",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "0.4ms", "latency": "0.4ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "APRS iGate \u2014 Home", "name": "APRS iGate Home",
"type": "RF Edge / APRS-IS Gateway", "type": "RF Edge / APRS-IS Gateway",
"layer": "Edge", "layer": "Edge",
"label": "RF", "label": "RF",
"address": "10.10.30.129", "address": "KJ5JCO-10 iGate",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "160.8ms", "latency": "160.8ms",
"lastCheck": "2026-05-14 23:45 UTC" "lastCheck": "2026-05-14 23:45 UTC"
}, },
{ {
"name": "APRS iGate \u2014 Mobile", "name": "APRS iGate Mobile",
"type": "RF Edge / Mobile Node", "type": "RF Edge / Mobile Node",
"layer": "Edge", "layer": "Edge",
"label": "RF", "label": "RF",
"address": "10.10.30.35", "address": "KJ5JCO Mobile",
"status": "Online", "status": "Online",
"severity": "Healthy", "severity": "Healthy",
"latency": "21.2ms", "latency": "21.2ms",
+26 -9
View File
@@ -16,6 +16,11 @@
<meta property="og:description" content="Live infrastructure visibility — Proxmox, K3s, TrueNAS, APRS edge systems." /> <meta property="og:description" content="Live infrastructure visibility — Proxmox, K3s, TrueNAS, APRS edge systems." />
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<meta property="og:url" content="https://noc.chasedumphord.com" /> <meta property="og:url" content="https://noc.chasedumphord.com" />
<meta property="og:image" content="https://chasedumphord.com/assets/images/noc-dashboard.png" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Ced's NOC | Live Systems Dashboard" />
<meta name="twitter:description" content="Live infrastructure visibility — Proxmox, K3s, TrueNAS, APRS edge systems." />
<meta name="twitter:image" content="https://chasedumphord.com/assets/images/noc-dashboard.png" />
<!-- Favicons (path up one level since we're in /noc/) --> <!-- Favicons (path up one level since we're in /noc/) -->
<link rel="icon" type="image/png" sizes="32x32" href="../assets/favicons/favicon-32x32.png" /> <link rel="icon" type="image/png" sizes="32x32" href="../assets/favicons/favicon-32x32.png" />
@@ -193,12 +198,11 @@
<nav> <nav>
<ul class="nav-links"> <ul class="nav-links">
<li><a href="https://chasedumphord.com/#snapshot">Snapshot</a></li> <li><a href="#top">Dashboard</a></li>
<li><a href="https://chasedumphord.com/#about">About</a></li> <li><a href="#layer-tabs">Systems</a></li>
<li><a href="https://chasedumphord.com/#projects">Projects</a></li> <li><a href="https://chasedumphord.com">← Portfolio</a></li>
<li><a href="https://chasedumphord.com/#stack">Stack</a></li> <li><a href="https://github.com/ced4568/ceds-homelab" target="_blank" rel="noopener noreferrer">GitHub</a></li>
<li><a href="https://chasedumphord.com/#contact">Contact</a></li> <li><a href="https://chasedumphord.com/#contact">Contact</a></li>
<li><a href="https://chasedumphord.com/assets/images/ChaseD_Resume.pdf" target="_blank" rel="noopener noreferrer">Resume</a></li>
</ul> </ul>
</nav> </nav>
</div> </div>
@@ -300,7 +304,7 @@
<!-- Stack info bar --> <!-- Stack info bar -->
<div class="noc-stack-bar"> <div class="noc-stack-bar">
<span><strong>Stack:</strong> Python health checks → JSON → JS dashboard</span> <span><strong>Stack:</strong> Python health checks → JSON → JS dashboard</span>
<span><strong>Next:</strong> Grafana + Prometheus integration</span> <span><strong>Live:</strong> <a href="https://grafana.cedshomelab.com" target="_blank" rel="noopener noreferrer">Grafana + Prometheus</a></span>
<span><strong>Source:</strong> <span><strong>Source:</strong>
<a href="https://github.com/ced4568/ceds-homelab" target="_blank" rel="noopener noreferrer"> <a href="https://github.com/ced4568/ceds-homelab" target="_blank" rel="noopener noreferrer">
github/ceds-homelab github/ceds-homelab
@@ -331,7 +335,7 @@
</p> </p>
</div> </div>
<div class="noc-card"> <div class="noc-card">
<div class="noc-card-badge future">📈 Future</div> <div class="noc-card-badge done">✅ Live</div>
<h3>Grafana + Prometheus</h3> <h3>Grafana + Prometheus</h3>
<p> <p>
Full observability stack for Proxmox, TrueNAS, K3s, Raspberry Pi, Full observability stack for Proxmox, TrueNAS, K3s, Raspberry Pi,
@@ -362,6 +366,7 @@
// ── Layer filter tabs ────────────────────────────────────────── // ── Layer filter tabs ──────────────────────────────────────────
// Populated after NOC data loads. Filters the system grid by layer. // Populated after NOC data loads. Filters the system grid by layer.
let allSystems = []; let allSystems = [];
let activeLayer = "all"; // Track active filter across refreshes
const originalLoad = window.loadNocStatus; const originalLoad = window.loadNocStatus;
@@ -372,7 +377,8 @@
if (cards.length > 0) { if (cards.length > 0) {
buildLayerTabs(); buildLayerTabs();
buildUptimePills(); buildUptimePills();
observer.disconnect(); // Re-apply active filter after data refresh
reapplyFilter();
} }
}); });
@@ -380,6 +386,16 @@
if (grid) observer.observe(grid, { childList: true }); if (grid) observer.observe(grid, { childList: true });
}); });
function reapplyFilter() {
if (activeLayer !== "all") {
document.querySelectorAll(".noc-system-card").forEach(card => {
const layerEl = card.querySelector(".noc-system-top span:last-child");
card.style.display =
layerEl && layerEl.textContent.trim() === activeLayer ? "" : "none";
});
}
}
function buildLayerTabs() { function buildLayerTabs() {
const cards = document.querySelectorAll(".noc-system-card"); const cards = document.querySelectorAll(".noc-system-card");
const layers = new Set(["all"]); const layers = new Set(["all"]);
@@ -394,7 +410,7 @@
layers.forEach(layer => { layers.forEach(layer => {
const btn = document.createElement("button"); const btn = document.createElement("button");
btn.className = "layer-tab" + (layer === "all" ? " active" : ""); btn.className = "layer-tab" + (layer === activeLayer ? " active" : "");
btn.dataset.layer = layer; btn.dataset.layer = layer;
btn.textContent = layer === "all" ? "All Systems" : layer; btn.textContent = layer === "all" ? "All Systems" : layer;
btn.addEventListener("click", () => filterByLayer(layer, btn)); btn.addEventListener("click", () => filterByLayer(layer, btn));
@@ -403,6 +419,7 @@
} }
function filterByLayer(layer, activeBtn) { function filterByLayer(layer, activeBtn) {
activeLayer = layer; // Persist across refreshes
document.querySelectorAll(".layer-tab").forEach(t => t.classList.remove("active")); document.querySelectorAll(".layer-tab").forEach(t => t.classList.remove("active"));
activeBtn.classList.add("active"); activeBtn.classList.add("active");
+9 -9
View File
@@ -12,7 +12,7 @@ SYSTEMS = [
"type": "Virtualization Platform", "type": "Virtualization Platform",
"host": "10.10.30.250", "host": "10.10.30.250",
"port": 8006, "port": 8006,
"address": "10.10.30.250:8006", "display_name": "BigWorld",
"layer": "Core Infrastructure", "layer": "Core Infrastructure",
"label": "Hypervisor" "label": "Hypervisor"
}, },
@@ -21,7 +21,7 @@ SYSTEMS = [
"type": "Storage Platform", "type": "Storage Platform",
"host": "10.10.30.143", "host": "10.10.30.143",
"port": 80, "port": 80,
"address": "10.10.30.143", "display_name": "TrueNAS",
"layer": "Storage", "layer": "Storage",
"label": "NAS" "label": "NAS"
}, },
@@ -30,7 +30,7 @@ SYSTEMS = [
"type": "Reverse Proxy", "type": "Reverse Proxy",
"host": "10.10.30.210", "host": "10.10.30.210",
"port": 81, "port": 81,
"address": "10.10.30.210:81", "display_name": "NPM",
"layer": "Access Layer", "layer": "Access Layer",
"label": "Proxy" "label": "Proxy"
}, },
@@ -39,7 +39,7 @@ SYSTEMS = [
"type": "Service Dashboard", "type": "Service Dashboard",
"host": "10.10.30.61", "host": "10.10.30.61",
"port": 4000, "port": 4000,
"address": "10.10.30.61:4000", "display_name": "Dashy",
"layer": "Dashboard", "layer": "Dashboard",
"label": "Portal" "label": "Portal"
}, },
@@ -48,7 +48,7 @@ SYSTEMS = [
"type": "Media Service", "type": "Media Service",
"host": "10.10.30.143", "host": "10.10.30.143",
"port": 30013, "port": 30013,
"address": "10.10.30.143:30013", "display_name": "PrimeStation",
"layer": "Application Service", "layer": "Application Service",
"label": "App" "label": "App"
}, },
@@ -57,7 +57,7 @@ SYSTEMS = [
"type": "Kubernetes API", "type": "Kubernetes API",
"host": "10.10.30.72", "host": "10.10.30.72",
"port": 6443, "port": 6443,
"address": "10.10.30.72:6443", "display_name": "k3s-django-1",
"layer": "Compute Cluster", "layer": "Compute Cluster",
"label": "Cluster" "label": "Cluster"
}, },
@@ -66,7 +66,7 @@ SYSTEMS = [
"type": "RF Edge Gateway", "type": "RF Edge Gateway",
"host": "10.10.30.129", "host": "10.10.30.129",
"port": 8001, "port": 8001,
"address": "KJ5JCO-10 / Direwolf KISS 8001", "display_name": "KJ5JCO-10 iGate",
"layer": "Edge / RF", "layer": "Edge / RF",
"label": "iGate" "label": "iGate"
}, },
@@ -75,7 +75,7 @@ SYSTEMS = [
"type": "APRS Internet Service", "type": "APRS Internet Service",
"host": "noam.aprs2.net", "host": "noam.aprs2.net",
"port": 14580, "port": 14580,
"address": "noam.aprs2.net:14580", "display_name": "noam.aprs2.net",
"layer": "Edge / RF", "layer": "Edge / RF",
"label": "External" "label": "External"
} }
@@ -141,7 +141,7 @@ def main():
systems.append({ systems.append({
"name": system["name"], "name": system["name"],
"type": system["type"], "type": system["type"],
"address": system["address"], "address": system["display_name"],
"status": status, "status": status,
"severity": severity_from_status(online, latency), "severity": severity_from_status(online, latency),
"layer": system["layer"], "layer": system["layer"],