From e11463a0e4f26cd554088f533ad0666e12fd626e Mon Sep 17 00:00:00 2001 From: ced4568 Date: Sat, 25 Apr 2026 18:22:43 -0500 Subject: [PATCH] Clean NOC structure V3.5 --- data/noc-status.json | 35 +-- index.html | 380 ++++++--------------------------- script.js | 7 + scripts/generate-noc-status.py | 19 ++ style.css | 37 ++++ 5 files changed, 145 insertions(+), 333 deletions(-) diff --git a/data/noc-status.json b/data/noc-status.json index 20232fd..ae12159 100644 --- a/data/noc-status.json +++ b/data/noc-status.json @@ -1,7 +1,7 @@ { "nocName": "Ced's NOC", "status": "All Systems Online", - "lastUpdated": "2026-04-25 17:45:47", + "lastUpdated": "2026-04-25 17:55:05", "summary": { "nodes": "12+", "services": "7/7", @@ -16,70 +16,77 @@ "type": "Virtualization Platform", "address": "10.10.30.250:8006", "status": "Online", + "severity": "Healthy", "layer": "Core Infrastructure", "label": "Hypervisor", - "latency": "4 ms", - "lastCheck": "2026-04-25 17:45:47" + "latency": "3 ms", + "lastCheck": "2026-04-25 17:55:05" }, { "name": "TrueNAS", "type": "Storage Platform", "address": "10.10.30.143", "status": "Online", + "severity": "Healthy", "layer": "Storage", "label": "NAS", - "latency": "1 ms", - "lastCheck": "2026-04-25 17:45:47" + "latency": "15 ms", + "lastCheck": "2026-04-25 17:55:05" }, { "name": "Nginx Proxy Manager", "type": "Reverse Proxy", "address": "10.10.30.210:81", "status": "Online", + "severity": "Healthy", "layer": "Access Layer", "label": "Proxy", "latency": "0 ms", - "lastCheck": "2026-04-25 17:45:47" + "lastCheck": "2026-04-25 17:55:05" }, { "name": "Dashy", "type": "Service Dashboard", "address": "10.10.30.61:4000", "status": "Online", + "severity": "Healthy", "layer": "Dashboard", "label": "Portal", - "latency": "17 ms", - "lastCheck": "2026-04-25 17:45:47" + "latency": "0 ms", + "lastCheck": "2026-04-25 17:55:05" }, { "name": "Jellyfin", "type": "Media Service", "address": "10.10.30.143:30013", "status": "Online", + "severity": "Healthy", "layer": "Application Service", "label": "App", - "latency": "2 ms", - "lastCheck": "2026-04-25 17:45:47" + "latency": "0 ms", + "lastCheck": "2026-04-25 17:55:05" }, { "name": "K3s API", "type": "Kubernetes API", "address": "10.10.30.72:6443", "status": "Online", + "severity": "Healthy", "layer": "Compute Cluster", "label": "Cluster", - "latency": "13 ms", - "lastCheck": "2026-04-25 17:45:47" + "latency": "0 ms", + "lastCheck": "2026-04-25 17:55:05" }, { "name": "APRS-IS", "type": "APRS Internet Service", "address": "noam.aprs2.net:14580", "status": "Online", + "severity": "Degraded", "layer": "Edge / RF", "label": "External", - "latency": "100 ms", - "lastCheck": "2026-04-25 17:45:47" + "latency": "79 ms", + "lastCheck": "2026-04-25 17:55:05" } ] } \ No newline at end of file diff --git a/index.html b/index.html index 33838c6..25afaa8 100644 --- a/index.html +++ b/index.html @@ -33,6 +33,8 @@
+ +
@@ -50,96 +52,34 @@ View Projects Contact Me
- - -
- -
- Headshot of Chase Dumphord - -
-
- - - -
- -
$ whoami
-systems_builder
-
-$ focus
-infrastructure
-networking
-automation
-edge_systems
-
-$ status
-building_real_systems
-
+

Systems Snapshot

-

- A quick look at the infrastructure and systems I’m actively building and documenting. -

-
-

12+

-

Nodes

- K3s cluster environment -
- -
-

10+

-

Services

- Self-hosted stack -
- -
-

4

-

VLANs

- Segmented network design -
- -
-

2

-

iGate Nodes

- Home + mobile APRS -
+

12+

Nodes

+

10+

Services

+

4

VLANs

+

2

iGate Nodes

+
+

Live Systems Overview

-

- Real infrastructure inventory from Ced’s HomeLab, K3s cluster, and APRS edge systems. -

@@ -147,311 +87,113 @@ building_real_systems Loading NOC status...
+

+ Built using real infrastructure: Proxmox • K3s • TrueNAS • VLAN segmentation • APRS RF Edge Systems +

+ +

--

-

Nodes

+

Infrastructure Nodes

-
-

--

-

Services Online

+
+

--

+

Services Online

+
+ +
+

--

+

Network Segments

+
+ +
+

--

+

Edge Systems

+
-
-

--

-

Network Segments

-
- -
-

--

-

Edge Systems

-
-
- +
+
+
-

Hands-on systems builder with a digital infrastructure mindset

+

Hands-on systems builder

-
-
-

- I’m a technical professional focused on digital systems, infrastructure, networking, - automation, and hands-on system integration. I enjoy building systems that are practical, - reliable, and well documented — from homelab services and dashboards to Raspberry Pi - deployments, APRS iGates, and troubleshooting workflows. -

- -

- My background blends field engineering, industrial technology, software-oriented thinking, - and infrastructure problem solving. I’m especially interested in projects that connect the - physical and digital worlds through monitoring, networking, automation, and resilient design. -

-
- -
-

Core Focus Areas

- -
    -
  • Digital systems and infrastructure
  • -
  • Linux systems and service management
  • -
  • Networking, VLANs, failover, and connectivity troubleshooting
  • -
  • Raspberry Pi and edge-device deployments
  • -
  • Documentation, process building, and reproducible project design
  • -
-
-
+

+ I build real infrastructure systems, homelabs, networking environments, + Raspberry Pi deployments, and monitoring systems. +

+
-

🔧 Infrastructure & Systems Projects

-

- These projects are built around real systems, networking, Linux services, edge devices, - and practical documentation. -

+

Infrastructure & Systems Projects

-
-
-
-
- -

📊 Ced’s NOC Vision

-

- Ced’s NOC is being built as a staged monitoring and systems-visibility platform for HomeLab, - Kubernetes, edge devices, and future production-style dashboards. -

-
- -
-
-

✅ Current: Portfolio NOC

-

- JSON-driven dashboard that displays real inventory, online/offline checks, service labels, - latency, and last-check timestamps. -

-
- -
-

⚙️ Next: Automated Data Updates

-

- Scheduled local script updates will refresh system status data automatically and push dashboard-ready - JSON into the portfolio. -

-
- -
-

📈 Future: Grafana + Prometheus

-

- Deeper monitoring stack for Proxmox, TrueNAS, K3s, Raspberry Pi nodes, Uptime Kuma, - and APRS edge systems. -

-
-
-
-
- -
+ +
- -

Technical experience that bridges field work and digital systems

+ +

📊 Ced’s NOC Vision

-
-
-

What I Bring

- -
    -
  • Industrial and field-service technical experience
  • -
  • Linux, Raspberry Pi, and systems administration work
  • -
  • Networking, connectivity, and troubleshooting depth
  • -
  • Documentation, process building, and reproducible project design
  • -
+
+
+

Current

+

Live JSON-driven NOC dashboard

-
-

Current Direction

+
+

Next

+

Automated updates + alerts

+
-

- I’m positioning myself around digital systems, infrastructure, networking, - automation, and technical operations — especially roles where hands-on problem - solving and system integration matter. -

- -

- More detailed resume content will be added here as the portfolio grows. -

+
+

Future

+

Grafana + Prometheus stack

-
-
-
- Chase Dumphord standing by a fence with a lake view in the background -
- -
- -

Technical, curious, and always building

- -

- Outside of work, I enjoy electronics, self-hosting, coding, drones, radio, and - hands-on technical projects that push me to learn something useful. That curiosity - carries directly into the way I build and document systems. -

-
-
-
- -
-
-
- -

Let’s connect

-
- -
-
-

Contact Info

- -

Email: chasedumphord@gmail.com

-

Phone: 662-214-2231

-

Location: Oxford, MS

-

- GitHub: - github.com/ced4568 -

-
- -
-

What I’m Open To

- -
    -
  • Digital systems and infrastructure roles
  • -
  • Networking and technical operations work
  • -
  • Automation and monitoring projects
  • -
  • Projects involving hardware + software integration
  • -
-
-
-
-
diff --git a/script.js b/script.js index 4be53c5..4adc1ca 100644 --- a/script.js +++ b/script.js @@ -5,6 +5,9 @@ document.addEventListener("DOMContentLoaded", () => { } loadNocStatus(); + + // Auto-refresh NOC dashboard every 30 seconds + setInterval(loadNocStatus, 30000); }); async function loadNocStatus() { @@ -58,6 +61,10 @@ async function loadNocStatus() {
${system.label || "System"}
+
+ ${system.severity || "Unknown"} +
+

${system.name}

${system.type}

${system.address} diff --git a/scripts/generate-noc-status.py b/scripts/generate-noc-status.py index 8836e79..0b30fc2 100644 --- a/scripts/generate-noc-status.py +++ b/scripts/generate-noc-status.py @@ -84,11 +84,29 @@ def check_tcp(host, port, timeout=2): return False, None +def severity_from_status(online, latency): + if not online: + return "Critical" + + if latency is None: + return "Unknown" + + if latency < 50: + return "Healthy" + + if latency <= 150: + return "Degraded" + + return "Critical" + + def health_label(online_count, total): if online_count == total: return "All Systems Online" + if online_count >= max(1, total - 2): return "Degraded" + return "Action Required" @@ -116,6 +134,7 @@ def main(): "type": system["type"], "address": system["address"], "status": status, + "severity": severity_from_status(online, latency), "layer": system["layer"], "label": system["label"], "latency": latency_value, diff --git a/style.css b/style.css index 411361f..f347cb3 100644 --- a/style.css +++ b/style.css @@ -610,4 +610,41 @@ a:hover { .system-meta small:first-child { color: var(--accent); font-weight: 800; +} + +.noc-proof { + margin: 0.5rem 0 1.5rem; + color: var(--muted); + font-size: 0.9rem; + border-left: 3px solid var(--accent-2); + padding-left: 0.75rem; +} + +.severity-pill { + display: inline-block; + margin-bottom: 0.5rem; + padding: 0.22rem 0.5rem; + border-radius: 999px; + font-size: 0.7rem; + font-weight: 800; + text-transform: uppercase; + letter-spacing: 0.04em; +} + +.severity-pill.healthy { + color: var(--accent-2); + background: rgba(142, 240, 207, 0.1); + border: 1px solid rgba(142, 240, 207, 0.28); +} + +.severity-pill.degraded { + color: var(--warning); + background: rgba(242, 204, 96, 0.1); + border: 1px solid rgba(242, 204, 96, 0.28); +} + +.severity-pill.critical { + color: #ff5f56; + background: rgba(255, 95, 86, 0.1); + border: 1px solid rgba(255, 95, 86, 0.28); } \ No newline at end of file