1 Commits
Author SHA1 Message Date
ced4568 361fbc7416 NOC auto-update: 2026-05-04 15:40 UTC 2026-05-04 10:40:35 -05:00
9 changed files with 260 additions and 381 deletions
+25 -34
View File
@@ -1,29 +1,29 @@
# Hi, I'm Chase (Ced) Dumphord
### DevOps Engineer | Platform & Cloud Infrastructure Engineer | Industrial Systems
### Digital Systems Engineer | Infrastructure | Automation | RF Edge Systems
> **Live Portfolio:** https://chasedumphord.com
> **Live NOC Dashboard:** https://noc.chasedumphord.com
---
## About
## 🧠 About
DevOps and Cloud Infrastructure Engineer with 10+ years of experience across industrial automation, manufacturing data systems, field service engineering, and infrastructure operations. Currently part of GE Aerospace's Digital Team building data pipelines, dashboards, and digital inspection systems using MTConnect and OPS Vision. Hands-on infrastructure engineer running an 18-node production environment consisting of a 6-node Proxmox VE cluster and a 12-node K3s Kubernetes cluster with TrueNAS, full observability stack, and VLAN-segmented networking. Built from the ground up and running in production every day. The infrastructure on this page is live. Not a demo.
Digital Systems Engineer with 10+ years of experience across industrial automation, manufacturing systems, and data-driven infrastructure. Currently at GE Aerospace Digital Team specializing in machine data integration, dashboard development, and system-level visibility. Hands-on homelab engineer bridging physical equipment with modern digital platforms. Increasingly integrating AI tooling for system documentation, automated diagnostics, and workflow acceleration.
---
## Live Sites
## 🌐 Live Sites
| Site | URL | Description |
|------|-----|-------------|
| Portfolio | https://chasedumphord.com | Personal portfolio, projects, stack, resume |
| Portfolio | https://chasedumphord.com | Personal portfolio — projects, stack, resume |
| NOC Dashboard | https://noc.chasedumphord.com | Live infrastructure visibility — 28 systems |
---
## Ced's NOC — Live Infrastructure Observability
## 📊 Ced's NOC — Live Infrastructure Observability
Real time network operations center dashboard monitoring 28 homelab systems across 6 infrastructure layers.
Real-time network operations center dashboard monitoring 28 homelab systems across 6 infrastructure layers.
### How It Works
@@ -43,32 +43,25 @@ Proxmox Biggie (Cron every 5min)
- **12-node K3s Cluster** — 3 control plane (django-1/2/3) + 9 workers (ingress, data, monitoring groups)
- **TrueNAS** — Network attached storage
- **Nginx Proxy Manager** — Reverse proxy layer
- **Prometheus + Grafana + Uptime Kuma** — Full observability stack with Prometheus actively scraping
- **Portainer** — Container management and deployment UI
- **Prometheus + Grafana + Uptime Kuma** — Full observability stack (Prometheus actively scraping)
- **Dashy + Home Assistant + PrimeStation** — Services layer
- **Hermes Agent** — AI-assisted ops automation agent
- **Hetzner VPS** — Cloud-hosted production node
- **Tailscale** — Zero-config VPN mesh networking
- **Restdesk** — Self-hosted helpdesk and ticketing
- **PaperClip Agents** — Document automation and processing agents
- **APRS iGate x2** — RF edge systems (home + mobile)
### Automation
- Script: `~/scripts/noc_update.py` running on Biggie
- Script: `~/scripts/noc_update.py` running on Biggie (`10.10.30.192`)
- Cron: `*/5 * * * *` — every 5 minutes
- Log: `/var/log/noc_update.log`
- Auth: GitHub Personal Access Token via baked remote URL
---
## Infrastructure Overview
## 🏗️ Infrastructure Overview
| Layer | Systems | Count |
|-------|---------|-------|
| Compute | Proxmox VE cluster | 6 nodes |
| Orchestration | K3s Kubernetes | 12 nodes |
| Total Nodes | Combined infrastructure | 18 nodes |
| Storage | TrueNAS | 1 |
| Networking | Nginx Proxy Manager, Cloudflare Tunnels, UniFi VLANs | 4 VLANs |
| Monitoring | Prometheus, Grafana, Uptime Kuma, Custom NOC | 4 services |
@@ -76,56 +69,54 @@ Proxmox Biggie (Cron every 5min)
---
## Featured Projects
## 🔥 Featured Projects
### Ced's NOC Dashboard
### 📊 Ced's NOC Dashboard
Real time monitoring system with live system health, latency tracking, severity based alerts, and layer filtering.
Real-time monitoring system with live system health, latency tracking, severity-based alerts, and layer filtering.
- **Live:** https://noc.chasedumphord.com
- **Source:** https://github.com/ced4568/ceds-noc
### Ced's HomeLab
### 🧱 Ced's HomeLab
Full enterprise style homelab with Proxmox clustering, K3s orchestration, VLAN segmentation, and full observability stack including Prometheus scraping.
Full enterprise-style homelab with Proxmox clustering, K3s orchestration, VLAN segmentation, and full observability stack including Prometheus scraping.
- **Source:** https://github.com/ced4568/ceds-homelab
### APRS iGate (RF Edge System)
### 📡 APRS iGate (RF Edge System)
Dual node RF to internet gateway. Raspberry Pi + Direwolf TNC. Live on aprs.fi.
Dual-node RF-to-internet gateway. Raspberry Pi + Direwolf TNC. Live on aprs.fi.
- **Source:** https://github.com/ced4568/ceds-aprs-igate
---
## Tech Stack
## 🧰 Tech Stack
**Infrastructure:** Proxmox VE • K3s • Docker • TrueNAS • Helm • Terraform • Nginx Proxy Manager • Cloudflare Tunnels
**Infrastructure:** Proxmox VE • K3s • Docker • TrueNAS • Nginx Proxy Manager • Cloudflare Tunnels
**Monitoring:** Prometheus • Grafana • Uptime Kuma • Custom NOC Dashboard
**Networking:** UniFi • VLAN Segmentation • Tailscale • Cloudflare DNS
**GitOps & CI/CD:** GitHub Actions • Docker Compose • Manifest-driven Config
**Networking:** UniFi • VLAN Segmentation • Cloudflare DNS
**Edge / RF:** Direwolf • APRS-IS • Raspberry Pi • RTL-SDR
**Development:** Python • Bash • JavaScript • HTML/CSS • Git
**AI & Automation:** n8n • OpenRouter • Telegram Bots • ChatGPT • Claude (Anthropic) •Crew AI Agent • Gemini • Hermes Agent • LLM-assisted Documentation • AI-driven Diagnostics
**AI & Automation:** Claude (Anthropic) • LLM-assisted Documentation • Prompt Engineering
---
## Connect
## 👤 Connect
[![LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-blue?style=for-the-badge&logo=linkedin)](https://www.linkedin.com/in/chase-dumphord/)
[![LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-blue?style=for-the-badge&logo=linkedin)](https://www.linkedin.com/in/toochase-dumphord/)
[![GitHub](https://img.shields.io/badge/GitHub-ced4568-black?style=for-the-badge&logo=github)](https://github.com/ced4568)
[![Portfolio](https://img.shields.io/badge/Portfolio-Live-brightgreen?style=for-the-badge)](https://chasedumphord.com)
[![NOC](https://img.shields.io/badge/NOC-Live-cyan?style=for-the-badge)](https://noc.chasedumphord.com)
📧 chasedumphord@gmail.com | Oxford, MS
📧 chasedumphord@gmail.com | 📍 Oxford, MS
---
> Built from the ground up and running in production every day. The infrastructure on this page is live. Not a demo.
> This is not a static portfolio — it is a live representation of working systems.
+29 -48
View File
@@ -1,5 +1,5 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R
@@ -17,7 +17,7 @@ endobj
endobj
4 0 obj
<<
/Contents 10 0 R /MediaBox [ 0 0 612 792 ] /Parent 9 0 R /Resources <<
/Contents 9 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -27,7 +27,7 @@ endobj
endobj
5 0 obj
<<
/Contents 11 0 R /MediaBox [ 0 0 612 792 ] /Parent 9 0 R /Resources <<
/Contents 10 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -37,76 +37,57 @@ endobj
endobj
6 0 obj
<<
/Contents 12 0 R /MediaBox [ 0 0 612 792 ] /Parent 9 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
>>
endobj
7 0 obj
<<
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
/Author (\(anonymous\)) /CreationDate (D:20260502182436+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260502182436+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
8 0 obj
<<
/Author (anonymous) /CreationDate (D:20260602024727+00'00') /Creator (ReportLab PDF Library - www.reportlab.com) /Keywords () /ModDate (D:20260602024727+00'00') /Producer (ReportLab PDF Library - www.reportlab.com)
/Subject (unspecified) /Title (untitled) /Trapped /False
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages
>>
endobj
9 0 obj
<<
/Count 3 /Kids [ 4 0 R 5 0 R 6 0 R ] /Type /Pages
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2874
>>
stream
Gb!SmgN)%.&q0LUoM\eYQ"42Il>79h:,K5HN29,5<qunG+UK*Ni..UD:$ou>2ZZfUXG^Abg+#m'YpC#r!/IIJ?YG(G5Bc]]9E79#iV^h&gO]/%Cp3<Dr#.3NB7HH)Au%NTHQES"Ibu7*'YMo(HtsE]h\oYkBE3J8*s;Z^eFG00)1`/Zc9[@Or2;S+IQ=_a><&9^cDm1OSh4ObE"dP_(XKA%$1nq$/=7lU]0=FP[,?I5*RYggL!F5JEXimsP-(O;hS]9K0`Qh8s+WaTj0l.NDqXd(VX9Nmg=qDlpK`FQXnP>:jc1>E#IkN4>_o4)=:DNY?LT4qbB,12c5#-h_]__&Kjo>$b-39+X*8e3.e1-d)<8#a#qL[&p"5=l0]l!i)%686%6LrUm;(:U1\@7''Ma(6+mt`C1%9h2nXr,=SWRRF3Uem#@-B:OIOl&40&4YNW\&>lU]1<L`9B:jf5hq`IWdLmZm,\H5F)ThEBf]0ZZ-9$WdLIDk95mK,hB:FYt2Y$8>OcYOe*@e<n;W*q88->ZtJ=qp=%n;,gWU&n(6@PER/LtKh_PsJ@Xkb('<]H[QPTm,G[[dCJ#*6g@;8%PNV*_qu,YhI.shXO4UIJ%q"7ScP]AK)HS"[.t1K=_=JWq7LUl4KW4XL[B76G]n>fu+3tpOWcZ%2"FS6;+g;!,mkj.m"dUuU"74D)]b0lWca@%`d&m<GF@HD\+)"C_RfgoImA0Wmn-Ktf;u[>Cc;Y9o!W5I-Q/HAtJVE<*3J`YjZGn9(OKc)s0QLE\/g8i4]>2i#,$(pSUr4KRCH+CbbLQJD.@&n,&[+L[JnPgWcu)5Y`JSSZ44N#WF-^nkcZk88&V&4C*1jAGBCT_:r*Jlh10]]>^3YlW,B0305Oqog$*LA=WqY>-krLqa>WdgE'^PV^R?A0MQpcb.O$^sQVWN=%KTl!K?J[j^N\\\U1/2J8aKZhDr6^5EDVf7(0io[9*RF@!`aA1HE-DIJ>4NS&\9F$=%n]5_ZBD?@\HicKr^SE;mH[9/aG?l2+p1XWZN;F&_$s/g:iVf]A;%HY"\juSbq;gT@_.4kbdnA-YU&fE61_lP5#]:`WQY_^RYUedeb;K`T+J#aa'<-25N4l@'D/DTS@@d1-PDX=Gk1[OI_:fnXLTRo%<QQfARhpr?pL"Pn7UWI*9S0YjucnF16tSLo4'ifCpSco=\uc)^B7`3_76qg!I'4;7f/s32oKLA*X[g,B/'%pC/Pnh1+>n\>>ui[*@$R]FcIBJ?>VMYAolQq%\)6rZ7V9PcLKn!NRGFEq35Z8&\FoESVuk-JrQS@K+$2B]d0rSCprNo>Vt).J-,+'qnijq=plfb["\-a5*9R%6i(K7Qo5*])94kh9(M*0%)*%*[8iYc,-GjW5_^,/iCd4-7/U30aPPr"Jr]jlM/_dRfYFM,mVF8CLCnX@f>QYQg_Qt0kDfiRnEmLhf-2e$0Jp$7,6ZeG5*ld.l+GsMrVJ3PaRD8m?+@j-n=p=;CW&2D9=d*>AJm(/L,>E1\Dct,YsI<L;ZV(e;c-'mqhIJD:'K?A`>3^\MCT"RoUs,>oK2Ss_riek)\^Fl0VQ5Z14]m)mlM1(r@OqJp[8V8':]Ds>@(-*49eJu.U9\nO)NDZF0S+t\jMNX=O^=j6/p\Fg&s^S;K4"oE$Z3J@W@@PR4cGWN=IZ45ESpQMRn#=Cn]njV@l4JPI]H@"DKPZ)+o5t'T6F\d*)V_h5]8re'7N42Aok\&O6(6F`q8*W_SkB7WOo;9&]Q6''"UTnkMWNQGO]]au^JAlXE;7quIh:$bru;2@Gek:t._SDm%D61F1I?;&J+M!.f2@if'd+Qq\[\+:KVrkXj"@L_FRP@\mT^66aSFohCKUWL-U:I'K4fO/Jl-_*Xu`,a2>A78mtB;M>.AMD^Uj"0"PA<EZTAQE>CQU7B#T*mDj&?/mnH,,pAs%>7kM'/:nB_:YVX.b''3B>npDf\MBL9_K54:,"_CnSn<MYEsI^bM1/#Oo4#Qg7*dler7+TWpjNA&"HR`%urm,><^tdDbg+cf&X!RS(m\lm6_+JFJ0u`[\fK6"HMg:Ca+lO,5eBTjA0QkP0mXk>lphT'ao.5hf?L7b3f"2h^*76PB:ouY9nSQX1NmD+!itj"p6DrI=r#+M4im2W.qh.!QkGh>?]m!%m*+*a0f8KD?DZq*,'lgAEkIh<3pJCB\_-#rV>\"OGR$Im81F(g)4eo`Q^&SDssaLO*%_+bVH/TG(6OV[nmTG];;q"#'I2tUPY8%OWi2ZWa%F@@?iM<&p>u#1QYd@e(B#bOB/@&VSAEuW&,VS]cdi#Ah#nGNLEcS<NQY'.02`#7912$XgDe]7>L/3NM[^)hEF6'VE)[UF``<?<QpL=[E_uaeU/qoL]iigjA77HAQC`BEFoY>?S#k+dN$"BK+d4sRj[@B34L`SI"fS;BoSo%Kj]R)%\\WGkh>GID_VnO]8UN;[[k,Upb>bHiS,aD=/Lk>X1BZb2k(,;73,q7-HJN)!I0NqVRNXO/6K$QH-#"-$^iJcoCXN-erJ?/3_ck`Y>&>qVX2Pmp-r)H\eps?"HOeOK@Q_&\aBKV:p:Y2;k9qq$K4%20oZ&qUa9nDL753^el`=@-V[4])KI)J6%iSCibra)dKgu''c0u?o;7nRQnaeE8Ubm5fs!Ybo+ErUF*+S;Pa8"B8kV-4=!gnu#WtT7[(;b]HF]5;:p#?:Jk1\g[boe9l;If=`7H5ANrB*ZT5cJOj3u8[Jq<ba/B_K7l@9H9/=()-`@dB++(ChFUtfL,AVNL%dn<LCWu`MN@/E[V&JTl45dkl(%)`)N,H#_!Wa8*UiJLQ5V+sOSV2g^I`L[W&'/:;7N!#%\DS918!o)(;.T&2&08mU56N~>endstream
endobj
10 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2779
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2700
>>
stream
GauHM>BALh(4OT53)@/S)3E5\fV^%JM4OEBJRiMro$U&<oN:BZ[3Wddm>p/.>KtF/:?#+9<#L=We).]ak7XD5pugDhBgMB'8geP*ncP?+acF)jVO)B_IHC9U+"'GH_QY-#0mRaY$mVD:ig%G`P<kfRI*(irUcH\LIg$^#+'XR&"gO1,p7+6mlFX+WK_e!,V?OXS03Q9YZmj.odb/OqrJRPfgZq6(6f)5'o7mWYK+J#@no7aWZT%Z1QQ3`Wn(Bctq>F#jd@"5Fagn;KdV[:p\^CZ[K>tH:1:iQgc)Or+C#)%DSYHuVC[aTnS0k;:k!cZc14b8d!!`m#6\DWc`Vp@eJV2VHJqFUJBP&A68^IqEW#Gl5O%XC4J1g07eHBegA"q1Mkhh;MM;1a(JLA!iG<?Pe]KHkt`1H=uO5drAeB;H9+/_5ZJG$00o5%JOh\b+'dsJtu07qYW05S>UD`&FS<[VT5IW@c=:KLVmO8mmqm0*3H[7K9d%Z?,E/)jU13Njp+Up5;G'MP_(J4;79Or(JP?\]#>54cj@Aa$P<mX)Y20F/Jc/om?'^(Vl$@;'o]%pEtM.oLHJ%jfhZbENZ5[Ak\hgIPdJXU8)r\IK?J2KNKk$+Z^feSO,T]<I7]!39i:YsWTKo8G0%mfi.<%LqK@/7u/J<WS>r[.7ncB[(+ZYGc!C2Ls\Ud>.m<a\r,aMG=>,#>h=g'f9\oN]:6*NND;IA-P5_U>uSS%Y,FtQ8?L%<jd`=-WS6fjJfs^:)RdrU]8kdXJEcZHi3#L6D&r<!ftXs6.Npjp9f2Z;EPdu88G8fDPT*j0M28:.ojTge1,6;(gPo*X^hI-[,,>X["f3L%u#>&cY&L)n/t+:C^e82*r$:IoV%[m/U>UAVZHI#$YV-1hD3Uj^E-,-asPG+c&==/9]VpS;,sspY-m$IbL(IAiX5jLB7u2W.X_P=4Sm.W>%I.s8F'O@bFMJQ&84Bo%4Z)@c%^!c^r>HI!buEUFV44N,PHR>\gV-d"6o48ADci';'0U67-VMQ+MgjG5/%+rdT;YBF!2#-'YD,Ag:tcjZ--.b3RcCN_bW&uaJ(7T$AP)+M*.t<(T'<#8sQH2fQ6:1n4iu?#p&L0LFZC^N#WO7_eWLYO0p_'jh$[24A\uS6*uc[NCj!;)F=5][gnt/oT&5ISb'[email protected]\m"3cg3c^Hs$:LO=J^K4Sr76ep'9,gP.(2=Th?PuLX%f952Y@dV<W>Dnm[KHk;gV]iq^7!<0bQHa-XhIeCD:A:ola;QT<EL)Z;[IkK_(u;/G$]O/L?B&pEJJFG4q=WHfI%YFb@^Da_cYooH1^'O"Hp]-R%nopd-aZJbD=2t5-Tc/q^*%XfgB;1MT7!cM1Y8-ssU;c6LI)nM[-S+3qu**L[^D9B"?/GgVCSWloJ]G2I1i0<b(/5YrA6)>+#YcR$qC+i7Q:,V'Q!Q*Id*gprIe&)MAHbJUlc=&?7=#q[tNc.]GDNARtcul?)C^bJ,D&[email protected]/EtM#\?\K2X*SK+,!!HBGG79>Ai-gd\QVoJNE&iUlH$4Np05`!:=J]@/@[YWT>!k*Xe\,PGi,'[`Z%3?k%`F))@3NlY.drF%2<K#lY`RsD,GYFS;Th2*uk"mb.=%V*Go,YW0=OOfK)+])I.PJ#'Z'tSBL=>c*EiaPUD&MDd/%CY:`Qsj3d)sZ)ne)5Fd,Z/(6+8*St5S2Gj/A$JKU<L5lsN],d<g__>3=!BaG[n_&goji"7<]++K.m%-pL/P9.5I!Tp\17h0US/bZ:^U;eZ_WC0C1iPct@c!>Sg>W4_]"G]@15oqUY\&J=,\jDOiK\P%mgV?WT(@Xo'8<HeT5>U$@I./fo@FRXa1uiYBH;"UhRl&l:FAB_4U,o\Q+Z5&1cCb1otQRts1bEcE"hi1B:.FI?0n:=6HB(==P^%4FF(075%i0cQ,19%%=A&u`J3F@pB^TlCCrXY&&#f1q)aE]#hoPSWmpoX>sVhFFFrDQ2U#rj*j=K^S,G_b))su"s2b9hpOUA'B1[IA)[sV$:JmulhR1Uc)om++CeDsFVG.B3(M7]bgj$akQa=Gg[FuWi%;l7:a$[J0&qg0*LM>[email protected]\q62Zn/m"l0<[j"Z27)Up+>l.Jd<<#&[6b/1PBI5nfn-D1pUKqiLS5N$/c:'<F1n`/G,$bSQ<gLGB<00@0]R.i>"<\gW#Me_Ae22#A*RW`fliHfMVQ)%da1imo==#6dQ$C<KfSq(H2W<_q&Aq"0n](&+`CqYbY/k\,LN#bRDigX;8okOgF=(c443i3an$7Er3UIU!Maejb]8j*F-`\8M)N8%a(dZ*:)QR/+Q/V)'Xo$D/pKG3=W0Hk&p>G;M&/5m\]?RM&/&-/\%@:;EojgMbmtJ+Qi53((0r,B\o_NsYgd9]nV@H(+47u%Ol#fOj3sSA6r*H"fWD!ck81\D*b^#\d+I(_m*,1&l<ac3Am;FkYfrHcDoCX2V=P+TOB=%:fOZ7l.a]7b21[CDLSdefdO-@^5T:3HTo6BYIB*+0hk",qdGE"tj-`H+8JPcKX]8,h'aYS1=er:X>1Te8(1E\GIaNc.#L#<oHc^^t+'Jba[[.5SAcm0gE,P?URCBYU4YTSp7t(?g$hk$eUK6k5+PC%8>?r(2gZic`dj3o'0S_T[W2P[AK\bo%`\eXZ+5h#-*sXCtfi-dGKrit];1*<CIaT?YDc:A<:7%^;/YT9!f/:*XeP)r(\+6-GgnGiGd;JRfUm:JKbhs.>a,il>1Cq1q*ro0%Zi~>endstream
endobj
11 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2872
>>
stream
Gatm<?'j9R(4FN43)<iI?/T,N&*VbY1.bT=FCkuXm6b35/O5<#Hn?4&J,S2dKl*3N[qSB6_MeN[S:/]9HV6P^nCP/LVd#lS$[Vcs-U49CMYtg/BlQpmMcZJl7\f4$]HBb^a<tnBs%p-&]=7-A!DU84?-`3BfWBpQI(+54;\EQS/cBqcpbXAgSnUskK@5-?6[F&KGM2ifi$V_+8W3U*+cZD6D"bd7UQE-e^Mg`10_%W];:=ioC9cgtF^dRm-S]m<&;='R-;>E!n9paM(6,:P$(j^0LQm`fG3--YRsO=qEr.oZ=boMkWuA:L;F@]Y<[Z;p4_eT`WC:[b`KTK^-J6qBfR6!]8O@?2Q4F@kE<%oHE[V:>X+G+BqsN-gC*e`p4Y]qhGuYmK;%P65H7LJZQhcLip5<9r8X@"u>0)<W#(0:L.].;fVn0#jR<@,+T4biJcJfa2?=G-(g&i"W4VAslbNb!(:gN4Xpd.&KM3[!:jerC*Jdb9.8mE1,GWI`7Hj&\./TM;6No<gRQ,j+^;Z8J#OBYKSCe;C"iB'>:?7XaPV8tZ6UfO>AZsk5GLtj3;hHOI6XNC'OnR;3,ratrae!o<cLHdBm'MgCh%NtbYA;(*=[#u.)&M2L65kWMqr$2ac[-9F:,J6c\r(6,:4Z\u(Y6m'VEBNe=[&'`"3N)]QR1qHNM&4h\IrRO0cn&_EIJoW&rcl)&RbdpgHZtpM=iCng2.H$.@[M:i^od31aV@mWl*7k(8CuGNT@NoJHkVPR(WfmqHRKX-J2tF?,+=6u'\sL>;/fj4BB`oKh_j4HGeSJ`NP2S]p3V,hUEBW#4egVSTtb_9&54nih,<_1k_</:Pq;$6a:$;%cW:9c2)Y&e<V8gUa.0o9&S=]KqU61:<LW!+o]C6WatPg@_D$ibKoDA/4IG"]VV*Z(0[g1S#Gl-Nejd>a7D3/b9[)\3<i>nNK3q5JEY&?Y:M@#pf?Gf`REe'(2J@b9/5>GfV$G/YK;m-,,dmtW;d%3NP\12!D^nnn2eB,)De,akEeTKZA>^iEG^Tq.R">rFF9j,S>P&;Ps1#S(7=jraXms?DcSAOQiENr/Qp`/4D,@>o`5'/YR[[;6pjQ5b/_u$9na27Y'SWfMLqrY_j:)1g^U5Ia0S]R<+.KA`KU0'2Y1s-=7:m5>03pHs^>P:1LpDkIbL2AqC_B31BmD_5ES*aF0st.V<^ARpiFFdK;2gg33iQe;SfqhGj4T8G[_XBhWJ[%JZJ]LIF62KViGhW-#t&e:>)Sqs`#Z*&BBM^h57>^X[2@tpAI_;4S3*e^*>84qe>=a]dST0o^K@OAmKZJ\'QVA>I-S9[L=;?@^8Wuu0cb(bhI;5%94a^,^-ZWbFF^-#.ZPnd-CYnq#)IE5.4%kiaNO.8rGpXhDFQ*i6#FYEXtHFc::f<MG;,m]Ut5ep$2[!3>18.8Z5RUQ!0+-\Nf$)aMB3Nk\(RKiEgo7f^VHJZ$r^]7qNO?mYnNBRlq.I1`Qib8+'BSj-rb_[\`P?/2MMf%%0"JjM:p1u'=h)Tg)WD5Y"HH6)m*f'8*cAY<du9IS)<CNG8jXHIXA`p-ebLk=n,q(PW&6"25JK^5*"8*Xe%D2QQ4oC:9YYTU`H8SJ;kp.@&LNDKQgr4o<9#@TQ6\W0q:kuXPjCP7`Kl=P%D)7BeJ`<b\2J._Z.F@KY^O5hoWGp=lFU;VoJ_J%8XG<$r?e,L*mr]0qTNp]ohSnbH>Rb`ma,S'[U=T=o'\/"!'N#TlKqk_9Hf;i*M[4PD%BlH?>A6m=NQ*>pJh@f72q\B57@X8PMP7EEq*SZcj>qk]LO12;D0,js[$>K:(_7F_.m8:+kaGK-2#%r1H'dr\@OH9>.^q<u@D@-S]+Rlkp1B1*_g\;H`3UjuB<E!]l+RT\hG_L.hj?K[uS*ZgPdE+30qdQ:AOmoNl4$$]\!5md)hkm[Jiu#GcTJENg%B!T)%N3C)K^,RG['kJq'8:3To2XNTu&6JsDjY[\]k'h5d<bduhSI*m?`qpY7fN[gQ+"#Mc@8[ptc/jK:)Zc1&=-@DO[2^#fr;ZHmG)(*"dI*d/Qf&$t9QkUPV%A'J]W3#a!XH1K(lG><^.!f`[AI/6uT"[L^6GqRIo>oWQ:'Zl%Le)92,?8XZ_3UBb]?D<g?9H?`oR1rFdPPFb?^D?EFWGm`gD6hO)4Zq.%se;s=73;#Ed#0:9kAGFfsMHigle]MI+*5G0s=(>h-H#2+cIAI(Q,fDOfUAk[M%o;D(IJO"M(a5n`<2aJu#`)IFHOs%/=>S'W36\*/>AHTm,)+]BO!`*POioRg[)`\i65Qp3q0jkmjHP;5NX@cl?XkUn(gZB^bbWk;8[Q^/\pC;<!9VSo,3T[uVi[S]/>Tm[u^-p+5Z:^>]=cquO(7o$(`P2ZrUGa4]5CS6jYaD(nagnbK)`l<u@f]80XTkQ6iX5'lq8GQ'IRD-QJ-kUf:CH#9`D)YRt[mebOcZ0'Z_$jY?Qkr3'gpsn1A2D2n,7)`7$Y[odKgT_qk]MPeXR<,cuZF.cpRtG]9HZ3f(hRb"Ziu$tR2o?=8?s%HunsQ]s]Wt6;r0+J&_qkf-mmc94i%#(O-CPO4/#QNW0@]Pp^*]iAg?3$u3"=*(:3srNE$b>qp`^,==fkBZ=agA2%hM!;<],W4i[#7<6VXVmon2Dd)8:W,?]t?/M5l&I<!<7Y7+$.r$bQd'5lYasL\/ncJFg\!RJk(arTsno._3ts2i\-pD4PGCi15k?$tRec]+W-A.:Kpu(FO!`+0LPmHm6tI&4#("G^H[tdG>SGYqqg!Amh)J4'?<190(;=jk?(dfGZ!sWH"IDgZ*?M]h\XBN'oMfS]/u63"Dt"4C0<+q^!%/SfZ=MpRGi6?$c0.LHGS;~>endstream
endobj
12 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2492
>>
stream
Gatm<?$"a[&q&$/R&[40m;>K(8Wfb>kfDUDDsXgV<q[sq&.(ofP6;C!jX>79rYbbcd9>cIHf`0fU*sEr1YpNtJ:.8&m*E$]qDbA`^BPC*1ga,lGnJ;>k\C+B$_l:G:<3g\,`2]p7eVbilMnP/<sra-NU1\:(Q@,An4q>J*KMY+Y[9[\h*%*0d<iIIH)d,\79\1#[ar*il)J!FP&p:Pc2UN0?eRqBYZ!3ZbPU-Q4L2VlG`di\gEcDYT8&#+j4CFkN[P43G*Nrko/TUuFS5.d<@2#hRq8JR[):33j"$h@h[ZGG'F#b_s/TtYN+^)ON+BmBe)ggJC^F3G:,Q)lOn+qV9atLqRd,d.K&u!]-s%Zd@bHL$.6bauE%50KU$T(=8<ouSjr%7qaFGPoa!Q)Ghr_Rao-5osVgF`pBpm0-HI*^.a:`u<.J%Z+6ohIPC<d/9=NOUVi2--n_0iHM9Un]0VDA-l-Bj8*dufXO99:E@a_S.2&+S4d:<P!1LFq0.`D,-@-dAgqT[rId%k&*-<Q\M'+:dK6rTh=k,a2qPNaNBT93%6q!VoB1qlris)]MYV<Kl];+e#uRJmOB+alF9>0NsCbRPmhG[Lg!rgKoa+E[-ZhZgjHW)c-4Th/fugW^)*6/1Oe3[pdQ@4?kANMo7q;Q'$F."\cP>r(eR(?'R_of:5[Bbp)?D>"WY7)a5ZRj5\HZn^Gk(8IJg]RaMPnUhb8lH;15(2(?TP+^j;%8bEEqIR(rnO`0uCO:,bu20ZSBXF.?jF_gDV.sQ\_NC/KDULpN4MonI8F1Dpr4tFaq6"G2N28J7AB7#N2-J+dL8;/Jr`UdB_asBZ*Q-0>K@?$SL/7_[XL0HQ@D+PU5Bpj%F#J1o<(XN/)[ab$96/`6tHTXN/2,'6-`HLmLVHPF7nbNOMcR`>k1t]/'(:(*>C6bjPKAM2o+_ss492nPR`Bhe/H*r:S>i$VQlFK9:@A#@O9."U]Z"Teh-eT:`e!>Eq/9\mA8XKhR>BfJ8<<>Nf#QRB,Wm;+)38&q,e+QVF'bjn`">hq3bDPS^Whe(Gmi3_d>#<+WAG/GmTu0R5a2q2P4DRWs'kJjMguH1ebakZZMW5I(/IHAq$*,r+lJRh^g_<f.[-"B9%5'jf<Ujb.V^X9Y;<Xto?!k?LYe$)e5F=LJo%tQlETj(+kY02qYdX2V=e@?3?-FD*r-VOsa+:RRf4EO#H3]4_*_(I:Og/#sr=7Kb\a#u,a\i[jCC*hI9'J3B;\j&0[6T;rKKjH_R<4q\RIdW<`st-'=&7rTX__!0U/5]/*A:DkQ3cHn1)3NDRY4"<6S4)k/"2'-l+^&b4Umb;X/-mH^]m=qpg5/)J<)tMSH6+@S'1kXIkrn$o`ljY(F>V@5W]+tL#)I&Wj/.41o?b8`h3eK;;`2]Bu@F$<kFn9q=QXEXN<ob>s:&pj*2*m"Y?DKI.ru:G45<4._&g.XR4t0!8q$\J[-!o>?P=jjKLqXnc(#pg@dqHL<0_h;ij"3=]6:4BDE;Q(<Uk?]m/&$f-ZB$-.Rn(RDgWo\Y85AZ`G/Ws-fqP(5,.'<hk92)`0#O*>4u;@oDUCa5!D)Rf?A6c<Lm2h]#[&-ZAmrRl>McSot'(mBS0X>';J[AOY.:>3T7X_9Or@RpGE-&a3gP9c+("hH\U'XGbJJdaj,Q$N+RDe>4$6R9o%rIa-\iB#9KRj#oYOG*oDm1PQ+\(KK?pFiLtnAo@f/fI?M[:sPtdj-X,Zb[Fe:qD^TB8)=W'D'm$/DfALiP=-ERD]6fJJ0q%7oJtdWhb9>R=g0/pA4bWCQ;Q_gs+`Gpp:BRmRh'3c[o,#NhqifCF(L;VQMH(b)Nj>Q_gM"/+5dC:(K^K2>BVaogSVt<iKq@c2liC*"`S'klo+2'G\EZdS?@aBo?2Q'gp=o,nBgl&2seMFRn#YT`lLr9p$3#T%p^]@WSqd1+eS6g]dWclVglF5K=%(g&u9L#fjpDGZ9c@_<rMV;5r+I.J<FU`TO,<g1I;Ve^%989r2qmS#a5Q00\u.M<$#G"nrF5b!7-_IM[rCGGg:=M-!V9KantRYXtDrb0':c0s#d)H87itKmUL0UI$&Tf^B,\+e%DRr]TH;'p\G-dr;@7q[eW-#LI!refo;&<__KK3A^"[^1o3e1qbBg]e2*NUI)WqTMn549(X;tddj72qq5_[/4#+-Tgr=Ga5O3hc>s>\m4)9fuTHQcsr^ID/O$a1P@'U^HnJO\#VEI#Q&*"FR'S>l5*inu]W$.R!`#mfVTU&>JO]C.MB:oEXbnI&EL=ksET:,qU.CM)&>k6-F<?m(WU+/0.+;FUij,72BG%*N`E(TLYlOB)m1p5rWbW$&^A!rF#B,`7`DFgCKO+3eXp%KO5nJEYFOt_on@($H<Veg5t3mnZD5P@G9T(\;rBCF6C)%=bK?IF=cZU/E:T7:Yn8n8%@p35U02NHflW&__2MJ=_Ck$^4o)h0;8n&/E\#[F\iY<QE$N=^1"&G5C?1SG@X~>endstream
Gb!TY>C5)6(5D;L/(R^EAl!An2GC:[8QquO23?MgU,TrT5uZJ-82^eSIP8e[aFUp>nhcgm:BRj*Q9MGDY(Q+lNB`I!*G5@B@lQSn^i<eQK&^'!N6gEm]_BaDZQ/3uQL@3%"]c2o8+;IScH,6Vo3pC$fR<D>qBC.a#Hj,5<WM.g*)DV[4E[?q&#<Sn[aPU)I!#P+LG.JdlNMMRfH4*^+_1oJi0Y9b/2EZ\E0="":9".#`dbo$htkcnnRm8q5O^8N`A_B=QL"3K-NqUKs1n3k^[$$DVs!Bfl","hX7EjuMf>'jm(9]A_\^o6!T,o^`B,#+<YP<,E'g.Yde-X=Y1Dsm]rpaT(&3e&4eC/$1Ta]e<i_hErhq)?bub!V)UEH?`KX6-?'0F7G-m^RrM<_9ZhVd.[@F2P&_Has03Tf\47`PApV/[bA7gSFg-0Cq7aA[rFffs[N8<im':,![T-c7eKU4J;Glj.l"HOu8+pA$H/gc6=asepeOfB,+a@)jITq'B,>_!M%;79%3p,pOTFifX]RH?i0@^T0-n@=jGaQ/XXH2pR5Ac5@7@!O5Y.V0?]Q))3[Wi1MKM@<+W9)M+5r"e[eXn"p:h7'lp)HVcAPu:Qp:=W$oP3#W`86un2N+Rp&.h*k(16I2mW01bkR?4)-#SRB,k%qYAmaC/[5GE-7oN(,Lj##U"g9&S%&pi%"BMS,cf%=Cc,<60f^RW5;Dae.4-V,6Rd7VDkPIR7/[3E_]`![DZ3G3=^O@.@IICcN25=%O0g.BtgnVF5e5YnmN)lNjp76[UW+n;[$AOPQ$#>5?SgmKt+iB1u*3T9CiV-aq,TlPj_$&_H89*gfJO8T+@N62Rh(s<2^4OXD2G_p)Lk]d<Nk*SOV5tias;+8><MR@54D^A*(MdDN"+#/_l$)_bl%9n9E=J?!N:@BRG&p/bm"3W!gE/r<^qW3[b')*B0?m85aB3KI<#^a/oQAnSAc<CXmcr#<Gm/nA]r_p)='EobJ!i7*2"'Nd#nX%1QZa)_M%a^_hSgNXar_q<:<$f9D4KlP:K,X86$dg+hkCD9>3[Mrt,/hE=e5;JV:"qMq]A'=D"g:IVCE5h8I]nru?Or0)"cheZ^u9Sm#EHP%_m3sC-P^7`%(CF*EGO<>4*jQX_!"<:($"C2_]YHq-C<<f@:n@j/!f,:SBb5qaZYji_m)b:pbBl]M4_[HW=9u!ceX#">Y-tHQ9Ii,N,fGE+-^@hU&M1]X>@bf>bD#0*7"#-:Cq)_/e!6^+^D^Lg*%Z@DJ\!<@>BVWFaa)Ka^@5GS'hXaGZd,Dl[`XAo]:'7K!61Xe8rS5\*9`Ck)uWE1KHP?>tOQF`iE,l]I%)l*aZk*rPQ#eN;sc;rF+$+gV)C$cO^imU(Z@((d7[phH!JMY5O6N*mitT$8*q9R["JTBhKE%ml"EGFG2t,3c6V/R&J\+T`=rlSqgF+iQrM,I?TYo5e_NHL#fu(I6!JR,.?JK_6@3V`D"@kMF@a'lX>[0Y9s,76S,s!Zq^M!3\umq:*qRTL9g/0kDqIQJ`u5<Y;;W;QFB20h.X5^N'sF=1O[O]bpM9G1UZAn`Xm4nQE!+3IC4nK]n(XtT;0Sf:*NQ"*&'8`81@Fe@B/6rTp?tUENlOK:?RH04C6N[4N$)RpL*=V8iW(^k`c1uc]*T?(J/BHmY,SPdFuX&fTA#0e9e&em:HX53YbR1=!cR(B0o9.f'$(pSFZE)d]f^RER5%K-Dcfnq1iRY[cis6gK"XZ2pcA('br'#B'm0VRT=)d+!aF_[Xm=Y0[48kUQkn#02S<i`a?,(dqS4En7A6R>0/42LALIFX*36eY+GNZ:"MF<I`-B$+eMH`4OHPI,Z\ssUZ^=>_#OEM.6Zht]<EmGY`>-46>;ohfPdEI)g4&f[HlUZiXTFX<?VQ7%;a(ec[G?uI&\[email protected]#:1nFA5_ca5mB*=Gp:!pC24T:Gm&GOg@qV;oiXTr6Z)>?irY!E)W-oj&;5*2JJmEODXr=f"^Ds3n<UU$s-0'2.m&0Ed#U^A!i03K]jEp:JNmH!3s6_X%*T.W03AY4?]if%"&CrIPGF0?(5qEoDHF70Y;o5N+Wfq$g.H=oa'1T9Sd(U-V4Nff;ESN9UfP(6Y"`W?gd03D)<Sn<#mkcc.]V^I00r3isP)b"5)qg%VCGV4jf&h/\ir@5c$;I2Ap;7I*<kL'g)Y0@cNA4Rok]aqfkCXR(chBKT=N_cMrQ0/>Aq*%&7bJND\!q7[VJ?"BE9@NXWek3n61;FB])HbY$WAQ.$+ahnGPTn39HN`+^PP)9.P-Pc>9@UkE`=b.MXfkXK5`(F1BgO.Dcf;<Qua;<R06^PH^-7eGNg2VG[TXW9K9j.=^mFR2b_D[-11nFE;j:;O@abrfhY2G]gmmCB>n4kN!8U8tF;hSB1B1c23,]:RYo<lMt_HZtLZ]d;sRY?iD;Bpd-II4Opef!c[i8sa4Y((<Ts<Oja=hDI60d*W)MF,Jr*`6u@t,%_*RXFQ?$A$dh(3;+:>JPheD4RBsVVc0P?mo[aCF.IV0CY?:dBnfpCM3o?,`<k[-8Sb`go3^76T!-T3C=%2SJq$`r1_e57\J/\!k+%fBk1\TRriS>9os9h;-dp<%.K>momU.A@qn!RHCQI(s4RMaf;bpmST@?sJp?t]fh'OLj&?3JaWK-FOh6,5^Z/!c-rh5)<.a>X+h+L1FmscnqLjf~>endstream
endobj
xref
0 13
0 11
0000000000 65535 f
0000000073 00000 n
0000000114 00000 n
0000000221 00000 n
0000000333 00000 n
0000000527 00000 n
0000000721 00000 n
0000000915 00000 n
0000000983 00000 n
0000001279 00000 n
0000001350 00000 n
0000004221 00000 n
0000007185 00000 n
0000000061 00000 n
0000000102 00000 n
0000000209 00000 n
0000000321 00000 n
0000000514 00000 n
0000000708 00000 n
0000000776 00000 n
0000001056 00000 n
0000001121 00000 n
0000004086 00000 n
trailer
<<
/ID
[<e07209f969febd6b4750ac978e60af12><e07209f969febd6b4750ac978e60af12>]
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
[<451d734656bfda21b00c95ac21a36c22><451d734656bfda21b00c95ac21a36c22>]
% ReportLab generated PDF document -- digest (opensource)
/Info 8 0 R
/Root 7 0 R
/Size 13
/Info 7 0 R
/Root 6 0 R
/Size 11
>>
startxref
9769
6878
%%EOF
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 MiB

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 561 KiB

+72 -72
View File
@@ -1,12 +1,12 @@
{
"nocName": "Ced's NOC",
"status": "2 System(s) Degraded",
"lastUpdated": "2026-10-07T13:40:01Z",
"status": "1 System(s) Degraded",
"lastUpdated": "2026-05-04T15:40:01Z",
"summary": {
"nodes": "12+ Pi",
"services": "26/28",
"services": "27/28",
"vlans": 4,
"edgeSystems": 0
"edgeSystems": 2
},
"systems": [
{
@@ -18,7 +18,7 @@
"status": "Online",
"severity": "Healthy",
"latency": "0.2ms",
"lastCheck": "2026-10-07 13:40 UTC"
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "Proxmox \u2014 Biggie",
@@ -29,7 +29,7 @@
"status": "Online",
"severity": "Healthy",
"latency": "0.1ms",
"lastCheck": "2026-10-07 13:40 UTC"
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "Proxmox \u2014 Snoop",
@@ -39,8 +39,8 @@
"address": "10.10.30.153",
"status": "Online",
"severity": "Healthy",
"latency": "0.4ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.2ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "Proxmox \u2014 TooShort",
@@ -50,8 +50,8 @@
"address": "10.10.30.120",
"status": "Online",
"severity": "Healthy",
"latency": "0.4ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.7ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "Proxmox \u2014 Tupac",
@@ -61,8 +61,8 @@
"address": "10.10.30.74",
"status": "Online",
"severity": "Healthy",
"latency": "0.1ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.5ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "Proxmox \u2014 DrDre",
@@ -72,19 +72,8 @@
"address": "10.10.30.227",
"status": "Online",
"severity": "Healthy",
"latency": "0.2ms",
"lastCheck": "2026-10-07 13:40 UTC"
},
{
"name": "Proxmox \u2014 soc-01",
"type": "Proxmox VE Hypervisor",
"layer": "Infrastructure",
"label": "Compute",
"address": "10.10.40.205",
"status": "Online",
"severity": "Healthy",
"latency": "0.7ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.3ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "K3s Control \u2014 django-1",
@@ -94,8 +83,8 @@
"address": "10.10.30.72",
"status": "Online",
"severity": "Healthy",
"latency": "0.3ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.2ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "K3s Control \u2014 django-2",
@@ -106,7 +95,7 @@
"status": "Online",
"severity": "Healthy",
"latency": "0.2ms",
"lastCheck": "2026-10-07 13:40 UTC"
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "K3s Control \u2014 django-3",
@@ -116,8 +105,8 @@
"address": "10.10.30.128",
"status": "Online",
"severity": "Healthy",
"latency": "0.4ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.2ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "K3s Ingress \u2014 node-1",
@@ -127,8 +116,8 @@
"address": "10.10.30.219",
"status": "Online",
"severity": "Healthy",
"latency": "0.3ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.2ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "K3s Ingress \u2014 node-2",
@@ -138,19 +127,19 @@
"address": "10.10.30.134",
"status": "Online",
"severity": "Healthy",
"latency": "0.3ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.2ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "K3s Ingress \u2014 node-3",
"type": "K3s Worker / Ingress",
"layer": "Orchestration",
"label": "K3s",
"address": "10.10.30.222",
"status": "Online",
"severity": "Healthy",
"latency": "0.4ms",
"lastCheck": "2026-10-07 13:40 UTC"
"address": "10.10.222",
"status": "Offline",
"severity": "Critical",
"latency": "N/A",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "K3s Data \u2014 node-4",
@@ -160,8 +149,8 @@
"address": "10.10.30.126",
"status": "Online",
"severity": "Healthy",
"latency": "0.2ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.3ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "K3s Data \u2014 node-5",
@@ -171,8 +160,8 @@
"address": "10.10.30.239",
"status": "Online",
"severity": "Healthy",
"latency": "0.3ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.4ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "K3s Data \u2014 node-6",
@@ -182,8 +171,8 @@
"address": "10.10.30.208",
"status": "Online",
"severity": "Healthy",
"latency": "0.2ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.3ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "K3s Monitor \u2014 node-7",
@@ -194,7 +183,7 @@
"status": "Online",
"severity": "Healthy",
"latency": "0.3ms",
"lastCheck": "2026-10-07 13:40 UTC"
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "K3s Monitor \u2014 node-8",
@@ -204,8 +193,8 @@
"address": "10.10.30.216",
"status": "Online",
"severity": "Healthy",
"latency": "0.3ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.2ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "K3s Monitor \u2014 node-9",
@@ -215,8 +204,8 @@
"address": "10.10.30.29",
"status": "Online",
"severity": "Healthy",
"latency": "0.3ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.4ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "TrueNAS",
@@ -226,8 +215,19 @@
"address": "10.10.30.143",
"status": "Online",
"severity": "Healthy",
"latency": "0.5ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.6ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "Nginx Proxy Manager",
"type": "Reverse Proxy",
"layer": "Networking",
"label": "Access",
"address": "10.10.30.210",
"status": "Online",
"severity": "Healthy",
"latency": "0.3ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "Prometheus",
@@ -237,8 +237,8 @@
"address": "10.10.30.140",
"status": "Online",
"severity": "Healthy",
"latency": "0.1ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.2ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "Grafana",
@@ -248,8 +248,8 @@
"address": "10.10.30.68",
"status": "Online",
"severity": "Healthy",
"latency": "0.1ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.3ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "Uptime Kuma",
@@ -259,8 +259,8 @@
"address": "10.10.30.14",
"status": "Online",
"severity": "Healthy",
"latency": "0.2ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.3ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "Dashy",
@@ -270,8 +270,8 @@
"address": "10.10.30.61",
"status": "Online",
"severity": "Healthy",
"latency": "0.4ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.3ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "Home Assistant",
@@ -281,8 +281,8 @@
"address": "10.10.30.104",
"status": "Online",
"severity": "Healthy",
"latency": "0.9ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.6ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "PrimeStation",
@@ -292,8 +292,8 @@
"address": "10.10.30.233",
"status": "Online",
"severity": "Healthy",
"latency": "0.1ms",
"lastCheck": "2026-10-07 13:40 UTC"
"latency": "0.3ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "APRS iGate \u2014 Home",
@@ -301,10 +301,10 @@
"layer": "Edge",
"label": "RF",
"address": "10.10.30.129",
"status": "Offline",
"severity": "Degraded",
"latency": "N/A",
"lastCheck": "2026-10-07 13:40 UTC"
"status": "Online",
"severity": "Healthy",
"latency": "3.7ms",
"lastCheck": "2026-05-04 15:40 UTC"
},
{
"name": "APRS iGate \u2014 Mobile",
@@ -312,10 +312,10 @@
"layer": "Edge",
"label": "RF",
"address": "10.10.30.35",
"status": "Offline",
"severity": "Degraded",
"latency": "N/A",
"lastCheck": "2026-10-07 13:40 UTC"
"status": "Online",
"severity": "Healthy",
"latency": "47.2ms",
"lastCheck": "2026-05-04 15:40 UTC"
}
]
}
+95 -127
View File
@@ -1,37 +1,22 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-EQJFN7CX4Y"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-EQJFN7CX4Y');
</script>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Chase Dumphord | DevOps &amp; Cloud Infrastructure Engineer</title>
<title>Chase Dumphord | Digital Systems & Infrastructure</title>
<meta
name="description"
content="Chase Dumphord DevOps and Cloud Infrastructure Engineer running an 18 node production environment with K3s, Proxmox, Prometheus, Grafana, and APRS RF edge systems out of Oxford, MS."
content="Chase Dumphord — digital systems builder focused on infrastructure, Linux, K3s, Proxmox, APRS RF edge systems, and real-world technical problem solving."
/>
<!-- Open Graph for LinkedIn / Discord sharing -->
<meta property="og:title" content="Chase Dumphord | DevOps &amp; Cloud Infrastructure Engineer" />
<meta property="og:description" content="DevOps &amp; Cloud Infrastructure Engineer. 18 nodes. 28 services. Always running. Based in Oxford, MS." />
<meta property="og:title" content="Chase Dumphord | Digital Systems & Infrastructure" />
<meta property="og:description" content="Hands-on systems builder. Proxmox • K3s • APRS • HomeLab. Based in Oxford, MS." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://chasedumphord.com" />
<meta property="og:image" content="https://chasedumphord.com/assets/images/noc-dashboard.png" />
<meta property="og:image:width" content="1536" />
<meta property="og:image:height" content="650" />
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:image" content="https://chasedumphord.com/assets/images/noc-dashboard.png" />
<!-- ── Favicon set (from ced-logo-pack) ── -->
<link rel="icon" type="image/png" sizes="32x32" href="assets/favicons/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="assets/favicons/favicon-16x16.png" />
@@ -87,13 +72,14 @@
<div class="hero-text">
<p class="eyebrow">
<span class="eyebrow-dot"></span>
DevOps • Platform Engineering • Cloud Infrastructure • Kubernetes • Observability
Digital Systems • Infrastructure • Networking • Automation • Edge Systems
</p>
<h1>I build systems that <span class="accent-word">connect</span> hardware, networks, and operations.</h1>
<p class="lead">
Chase Dumphord DevOps and Cloud Infrastructure Engineer running an 18 node production environment out of Oxford, MS. 6 node Proxmox VE cluster, 12 node K3s Kubernetes cluster, full observability stack, and VLAN-segmented networking. I build things that actually run, then document how they work.
Chase Dumphord — infrastructure builder running Proxmox, K3s, TrueNAS, and APRS RF edge systems out of Oxford, MS.
I build things that actually work, then document how they work.
</p>
<div class="hero-actions">
@@ -108,11 +94,11 @@
<li>📍 Oxford, MS</li>
<li>
<a href="https://github.com/ced4568" target="_blank" rel="noopener noreferrer">
github/ced4568
⌥ github/ced4568
</a>
</li>
<li>
<a href="mailto:[email protected]">[email protected]</a>
<a href="mailto:[email protected]">✉ [email protected]</a>
</li>
</ul>
@@ -160,16 +146,16 @@
<span class="terminal-title">ced's@homelab ~ $</span>
</div>
<pre><code><span class="t-prompt">ced's@homelab:~$</span> whoami
<span class="t-val">devops_engineer</span>
<span class="t-val">systems_builder</span>
<span class="t-prompt">ced's@homelab:~$</span> uptime
<span class="t-val">18 nodes • 28 services • always_on</span>
<span class="t-val">12+ nodes • 10+ services • always_on</span>
<span class="t-prompt">ced's@homelab:~$</span> cat focus.txt
<span class="t-val">kubernetes
devops
observability
cloud_infrastructure</span>
<span class="t-val">infrastructure
networking
automation
rf_edge_systems</span>
<span class="t-prompt">ced's@homelab:~$</span> systemctl status life
<span class="t-val">● building_real_systems.service</span>
@@ -192,14 +178,14 @@ cloud_infrastructure</span>
<div class="stats-grid">
<div class="stat-card">
<h3>18</h3>
<h3>12+</h3>
<p>Nodes</p>
<span>6-node Proxmox VE • 12 node K3s</span>
<span>K3s cluster • Raspberry Pi</span>
</div>
<div class="stat-card">
<h3>28+</h3>
<h3>10+</h3>
<p>Services</p>
<span>Self-hosted production stack</span>
<span>Self-hosted stack</span>
</div>
<div class="stat-card">
<h3>4</h3>
@@ -271,7 +257,7 @@ cloud_infrastructure</span>
<!-- Fallback shown when data can't load -->
<div id="noc-fallback" class="noc-fallback" style="display:none;">
<p class="noc-fallback-msg">
NOC feed unavailable from this context systems run locally.<br/>
📡 NOC feed unavailable from this context — systems run locally.<br/>
<a href="https://noc.chasedumphord.com" target="_blank" rel="noopener noreferrer">
View the live NOC dashboard →
</a>
@@ -285,35 +271,34 @@ cloud_infrastructure</span>
<div class="container">
<div class="section-heading">
<p class="section-label">// about</p>
<h2>DevOps and Cloud Infrastructure Engineer with 10+ years of real systems ownership</h2>
<h2>Hands-on systems builder with a digital infrastructure mindset</h2>
</div>
<div class="content-grid">
<div class="card">
<p>
I'm a DevOps and Cloud Infrastructure Engineer focused on reliable delivery, container
orchestration, and cloud native infrastructure built for production conditions. I run an
18 node environment every day consisting of a 6 node Proxmox VE hypervisor cluster and
a 12 node K3s Kubernetes cluster with Prometheus monitoring, Grafana dashboards, and
VLAN segmented networking. Not a lab. A production system.
I'm a technical professional focused on digital systems, infrastructure, networking,
automation, and hands-on system integration. I build things that are practical,
reliable, and well-documented — from homelab services and live dashboards to Raspberry Pi
deployments, APRS iGates, and complex troubleshooting workflows.
</p>
<p>
I come from 10+ years in industrial digital systems at GE Aerospace and in the field
as a Level III engineer on aerospace inspection equipment. I understand what production
failure actually costs. That same operational discipline is what I bring to cloud native
infrastructure. I don't simulate environments. I run them.
My background blends field engineering, industrial technology, and infrastructure
problem solving. Increasingly I'm integrating AI tooling — using LLMs for system
documentation, automated diagnostics, and workflow acceleration — as part of how
modern infrastructure gets built and maintained.
</p>
</div>
<div class="card">
<h3>Core Focus Areas</h3>
<ul class="clean-list">
<li>Kubernetes orchestration and container infrastructure</li>
<li>DevOps automation and CI/CD pipeline workflows</li>
<li>Observability with Prometheus, Grafana, and alerting pipelines</li>
<li>Cloud native infrastructure design and deployment</li>
<li>Networking, VLANs, reverse proxy, and Cloudflare edge configuration</li>
<li>AI assisted automation, documentation, and diagnostic workflows</li>
<li>Digital systems and infrastructure engineering</li>
<li>Linux systems and service management</li>
<li>Networking, VLANs, failover, and connectivity troubleshooting</li>
<li>Raspberry Pi and edge-device deployments</li>
<li>AI-assisted automation, documentation, and diagnostic workflows</li>
<li>Documentation, process building, and reproducible project design</li>
</ul>
</div>
</div>
@@ -325,8 +310,8 @@ cloud_infrastructure</span>
<div class="container">
<div class="section-heading">
<p class="section-label">// projects</p>
<h2>Infrastructure &amp; Systems Projects</h2>
<p class="section-intro">Built on real systems. Not demos, not tutorials running infrastructure.</p>
<h2>Infrastructure & Systems Projects</h2>
<p class="section-intro">Built on real systems. Not demos, not tutorials — running infrastructure.</p>
</div>
<div class="projects-grid">
@@ -343,7 +328,7 @@ cloud_infrastructure</span>
<ul class="clean-list">
<li>Proxmox VE virtualization platform</li>
<li>VLAN segmentation via UniFi (Main / IoT / HomeLab / Guest)</li>
<li>Self hosted services behind Nginx Proxy Manager + Cloudflare Tunnels</li>
<li>Self-hosted services behind Nginx Proxy Manager + Cloudflare Tunnels</li>
<li>Uptime Kuma + Grafana monitoring stack</li>
</ul>
<a href="https://github.com/ced4568/ceds-homelab" target="_blank" rel="noopener noreferrer" class="project-link">
@@ -358,12 +343,12 @@ cloud_infrastructure</span>
</div>
<p class="tags">Kubernetes • Containers • Linux • Automation</p>
<p class="project-impact">
12 node K3s cluster on Raspberry Pi running distributed infrastructure and container orchestration in production with dedicated control plane, ingress, data, and monitoring node pools.
12-node K3s cluster on Raspberry Pi built to simulate distributed infrastructure and container orchestration at scale.
</p>
<ul class="clean-list">
<li>Multi node cluster setup and management</li>
<li>Multi-node cluster setup and management</li>
<li>Containerized workload deployment</li>
<li>Infrastructure automation via manifest driven configuration</li>
<li>Infrastructure automation via manifest-driven configuration</li>
</ul>
<a href="https://github.com/ced4568/ced-k3s-homelab" target="_blank" rel="noopener noreferrer" class="project-link">
View on GitHub →
@@ -377,7 +362,7 @@ cloud_infrastructure</span>
</div>
<p class="tags">RF • Linux • Raspberry Pi • APRS-IS • Edge Systems</p>
<p class="project-impact">
Operational dual-node RF to internet gateway. Decodes real beacon packets and uplinks live to aprs.fi.
Operational dual-node RF-to-internet gateway. Decodes real beacon packets and uplinks live to aprs.fi.
</p>
<ul class="clean-list">
<li>Direwolf APRS TNC with tuned audio chain (target: 50–60 level)</li>
@@ -401,7 +386,7 @@ cloud_infrastructure</span>
<p class="section-label">// noc roadmap</p>
<h2>Ced's NOC Vision</h2>
<p class="section-intro">
Staged monitoring and systems visibility platform built on real infrastructure.
Staged monitoring and systems-visibility platform built on real infrastructure.
</p>
</div>
@@ -410,24 +395,24 @@ cloud_infrastructure</span>
<div class="noc-card-badge done">✅ Live</div>
<h3>Portfolio NOC</h3>
<p>
JSON driven dashboard showing real inventory, online/offline checks, service labels,
latency, and last check timestamps across 18 nodes and 28 services.
</p>
</div>
<div class="noc-card">
<div class="noc-card-badge done">✅ Live</div>
<h3>Grafana + Prometheus Observability Stack</h3>
<p>
Full observability stack running across Proxmox, TrueNAS, K3s nodes, Uptime Kuma,
and APRS edge systems with real time metrics ingestion and live alerting pipelines.
JSON-driven dashboard showing real inventory, online/offline checks, service labels,
latency, and last-check timestamps.
</p>
</div>
<div class="noc-card">
<div class="noc-card-badge next">⚙️ Next</div>
<h3>Automated Incident Response</h3>
<h3>Automated Data Updates</h3>
<p>
AI assisted ops automation using n8n, Telegram bots, and OpenRouter integrated with
Prometheus alerting for automated triage and remediation workflows.
Scheduled local scripts will auto-refresh system status and push dashboard-ready
JSON on a cron interval — no manual updates.
</p>
</div>
<div class="noc-card">
<div class="noc-card-badge future">📈 Future</div>
<h3>Grafana + Prometheus</h3>
<p>
Full observability stack for Proxmox, TrueNAS, K3s, Raspberry Pi nodes, Uptime Kuma,
and APRS edge systems with real-time metrics ingestion.
</p>
</div>
</div>
@@ -442,7 +427,7 @@ cloud_infrastructure</span>
>
<span class="btn-dot"></span> View Live NOC Dashboard
</a>
<span class="noc-cta-sub">noc.chasedumphord.com live infrastructure visibility</span>
<span class="noc-cta-sub">noc.chasedumphord.com — live infrastructure visibility</span>
</div>
</div>
</section>
@@ -452,7 +437,7 @@ cloud_infrastructure</span>
<div class="container">
<div class="section-heading">
<p class="section-label">// tech stack</p>
<h2>Tools &amp; Technologies</h2>
<h2>Tools & Technologies</h2>
</div>
<div class="stack-groups">
@@ -464,20 +449,17 @@ cloud_infrastructure</span>
<span class="stack-pill">K3s</span>
<span class="stack-pill">Docker</span>
<span class="stack-pill">TrueNAS</span>
<span class="stack-pill">Helm</span>
<span class="stack-pill">Terraform</span>
<span class="stack-pill">Nginx Proxy Manager</span>
<span class="stack-pill">Cloudflare Tunnels</span>
</div>
</div>
<div class="stack-group">
<h4 class="stack-group-label">Monitoring &amp; Observability</h4>
<h4 class="stack-group-label">Monitoring & Observability</h4>
<div class="stack-pills">
<span class="stack-pill">Grafana</span>
<span class="stack-pill">Prometheus</span>
<span class="stack-pill">Uptime Kuma</span>
<span class="stack-pill">Alerting Pipelines</span>
<span class="stack-pill">Custom NOC Dashboard</span>
</div>
</div>
@@ -487,23 +469,13 @@ cloud_infrastructure</span>
<div class="stack-pills">
<span class="stack-pill">UniFi</span>
<span class="stack-pill">VLAN Segmentation</span>
<span class="stack-pill">Nginx</span>
<span class="stack-pill">Traefik</span>
<span class="stack-pill">pfSense</span>
<span class="stack-pill">Cloudflare DNS</span>
</div>
</div>
<div class="stack-group">
<h4 class="stack-group-label">GitOps &amp; CI/CD</h4>
<div class="stack-pills">
<span class="stack-pill">GitHub Actions</span>
<span class="stack-pill">Docker Compose</span>
<span class="stack-pill">Manifest driven Config</span>
</div>
</div>
<div class="stack-group">
<h4 class="stack-group-label">RF &amp; Edge</h4>
<h4 class="stack-group-label">RF & Edge</h4>
<div class="stack-pills">
<span class="stack-pill">Direwolf</span>
<span class="stack-pill">APRS-IS</span>
@@ -525,18 +497,13 @@ cloud_infrastructure</span>
</div>
<div class="stack-group">
<h4 class="stack-group-label">AI &amp; Automation</h4>
<h4 class="stack-group-label">AI & Automation</h4>
<div class="stack-pills">
<span class="stack-pill">n8n</span>
<span class="stack-pill">OpenRouter</span>
<span class="stack-pill">Telegram Bots</span>
<span class="stack-pill">Claude (Anthropic)</span>
<span class="stack-pill">ChatGPT</span>
<span class="stack-pill">Gemini</span>
<span class="stack-pill">Hermes Agent</span>
<span class="stack-pill">Crew AI Agent</span>
<span class="stack-pill">LLM assisted Documentation</span>
<span class="stack-pill">AI driven Diagnostics</span>
<span class="stack-pill">LLM-assisted Documentation</span>
<span class="stack-pill">AI-driven Diagnostics</span>
<span class="stack-pill">Prompt Engineering</span>
</div>
</div>
@@ -549,7 +516,7 @@ cloud_infrastructure</span>
<div class="container">
<div class="section-heading">
<p class="section-label">// resume snapshot</p>
<h2>10+ years of systems ownership from the factory floor to cloud native infrastructure</h2>
<h2>Technical experience that bridges field work and digital systems</h2>
</div>
<div class="resume-grid">
@@ -557,26 +524,28 @@ cloud_infrastructure</span>
<div class="card resume-card">
<h3>What I Bring</h3>
<ul class="clean-list">
<li>Production Kubernetes infrastructure running 18 nodes across dedicated control plane, ingress, data, and monitoring node pools with live observability</li>
<li>10+ years of systems ownership in industrial environments where failure has direct production consequences including GE Aerospace digital systems and Level III field service on aerospace equipment</li>
<li>End to end cloud native infrastructure capability covering containers, ingress, secrets, monitoring, backups, and automated recovery with live systems to prove it</li>
<li>Infrastructure-as-documentation mindset where everything built gets written up with runbooks, architecture decisions, and SOPs</li>
<li>Industrial and field-service technical background — hands-on problem solving under real constraints</li>
<li>Linux systems administration — service management, troubleshooting, automation</li>
<li>Networking depth — VLANs, DNS, reverse proxy, firewall config, failover design</li>
<li>Infrastructure-as-documentation mindset — everything I build gets written up</li>
<li>Homelab → production thinking — I build lab environments that mirror real-world system design</li>
</ul>
</div>
<div class="card resume-card">
<h3>Target Roles</h3>
<ul class="clean-list">
<li>DevOps Engineer</li>
<li>Platform Engineer</li>
<li>Cloud Infrastructure Engineer</li>
<li>Site Reliability Engineer</li>
<li>Infrastructure Architect</li>
<li>Systems / Infrastructure Engineer</li>
<li>NOC Technician / Network Operations</li>
<li>Linux Systems Administrator</li>
<li>Technical Operations / IT Infrastructure</li>
<li>Edge Systems / Field Technical Roles</li>
</ul>
<div class="resume-note">
<p>
Open to remote and hybrid roles where real infrastructure ownership and operational depth matter. I come from industrial systems and I bring that same zero downtime discipline to cloud native environments.
Currently positioning around digital systems, infrastructure, and technical operations —
especially roles where hands-on problem solving and system integration matter more than certifications.
</p>
</div>
</div>
@@ -585,20 +554,20 @@ cloud_infrastructure</span>
<h3>Currently Learning / Building Toward</h3>
<div class="learning-grid">
<div class="learning-item">
<span class="learning-icon">☸️</span>
<span>Advanced Kubernetes patterns including GitOps with FluxCD, Helm chart authoring, and ArgoCD</span>
<span class="learning-icon">📈</span>
<span>Grafana + Prometheus full observability stack</span>
</div>
<div class="learning-item">
<span class="learning-icon">🏗️</span>
<span>Terraform infrastructure as code for cloud provisioning and repeatable environment builds</span>
<span class="learning-icon">☸️</span>
<span>Kubernetes production patterns (GitOps, Helm, ArgoCD)</span>
</div>
<div class="learning-item">
<span class="learning-icon">🔐</span>
<span>Infrastructure security hardening and zero-trust network architecture</span>
<span>Network security and zero-trust architecture</span>
</div>
<div class="learning-item">
<span class="learning-icon">📊</span>
<span>OpenTelemetry integration and distributed tracing across the K3s cluster</span>
<span class="learning-icon">📡</span>
<span>Mobile APRS iGate deployment</span>
</div>
</div>
</div>
@@ -614,7 +583,7 @@ cloud_infrastructure</span>
>
↓ Download Resume (PDF)
</a>
<span class="resume-download-note">Updated 2026 • PDF format</span>
<span class="resume-download-note">Updated 2025 • PDF format</span>
</div>
</div>
@@ -628,7 +597,7 @@ cloud_infrastructure</span>
<p class="section-label">// github</p>
<h2>Pinned Repositories</h2>
<p class="section-intro">
Active projects on GitHub source code, configs, and documentation for everything I'm building.
Active projects on GitHub — source code, configs, and documentation for everything I'm building.
</p>
</div>
@@ -666,10 +635,9 @@ cloud_infrastructure</span>
<p class="section-label">// personal</p>
<h2>Technical, curious, and always building</h2>
<p>
Outside of work I'm into electronics, self hosting, coding, drones, and ham radio.
I'm a licensed amateur radio operator running a dual node APRS RF iGate with a
verified uplink on aprs.fi. Kobe the Boston Terrier keeps the home lab grounded.
That curiosity carries directly into how I build and document systems.
Outside of work I'm into electronics, self-hosting, coding, drones, ham radio, and
hands-on projects that force me to learn something real. Ball pythons and dogs round
out the home lab. That curiosity carries directly into how I build and document systems.
</p>
</div>
</div>
@@ -695,10 +663,10 @@ cloud_infrastructure</span>
<div class="card">
<h3>Open To</h3>
<ul class="clean-list">
<li>DevOps Engineer and Platform Engineer roles</li>
<li>Cloud Infrastructure and SRE positions</li>
<li>Remote and hybrid opportunities</li>
<li>Consulting and infrastructure projects through Synthos Systems</li>
<li>Digital systems and infrastructure roles</li>
<li>Networking and technical operations</li>
<li>Automation and monitoring projects</li>
<li>Hardware + software integration work</li>
</ul>
</div>
</div>
@@ -717,4 +685,4 @@ cloud_infrastructure</span>
<script src="script.js"></script>
</body>
</html>
</html>
+29 -90
View File
@@ -1,22 +1,3 @@
<!--
╔══════════════════════════════════════════════════════════════════════╗
║ Ced's NOC — Live Infrastructure Dashboard ║
║ FILE: noc/index.html ║
╠══════════════════════════════════════════════════════════════════════╣
║ PAGE MAP (top → bottom) ║
║ 1. HEAD — meta, OG/Twitter tags, favicons, Google Fonts, ║
║ shared stylesheet (../style.css), NOC-specific CSS ║
║ 2. NAV — site header: Ced_ logo, nav links, portfolio link ║
║ 3. NOC HERO — eyebrow (live/auto-refresh badge), H1, lead text, ║
║ meta bar (location, portfolio link, GitHub) ║
║ 4. DASHBOARD — status command bar, uptime pills (JS), metrics grid, ║
║ alert panel, layer filter tabs, system cards grid, ║
║ stack info bar, NOC roadmap cards ║
║ 5. FOOTER — copyright + back-to-top link ║
║ 6. SCRIPTS — ../script.js + inline NOC JS (layer tabs, ║
║ uptime pill builder, MutationObserver for card grid) ║
╚══════════════════════════════════════════════════════════════════════╝
-->
<!DOCTYPE html>
<html lang="en">
<head>
@@ -27,19 +8,14 @@
<meta
name="description"
content="Ced's NOC — live network operations center dashboard showing real-time infrastructure health across 18 nodes and 28 services. Proxmox, K3s, TrueNAS, APRS edge systems."
content="Ced's NOC — live network operations center dashboard showing real-time infrastructure health, service status, and edge system monitoring."
/>
<!-- Open Graph -->
<meta property="og:title" content="Ced's NOC | Live Systems Dashboard" />
<meta property="og:description" content="Live infrastructure visibility — 18 nodes, 28 services. Proxmox, K3s, TrueNAS, APRS edge systems. Always running." />
<meta property="og:description" content="Live infrastructure visibility — Proxmox, K3s, TrueNAS, APRS edge systems." />
<meta property="og:type" content="website" />
<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 — 18 nodes, 28 services. Proxmox, K3s, TrueNAS, APRS edge systems. Always running." />
<meta name="twitter:image" content="https://chasedumphord.com/assets/images/noc-dashboard.png" />
<!-- Favicons (path up one level since we're in /noc/) -->
<link rel="icon" type="image/png" sizes="32x32" href="../assets/favicons/favicon-32x32.png" />
@@ -210,23 +186,19 @@
<body>
<!-- ══════════════════════════════════════════════════════════════════════ NAV
Shared site-header component (styled by ../style.css).
Left: "Ced_" logo linking back to chasedumphord.com.
Right: nav links — Dashboard (top anchor), Systems (layer-tabs anchor),
← Portfolio (main site), GitHub (ced4568), Contact.
══════════════════════════════════════════════════════════════════════════ -->
<!-- ═══════════════════════════════ NAV ═══════════════════════════════ -->
<header class="site-header">
<div class="container nav">
<a href="https://chasedumphord.com" class="logo">Ced<span class="logo-cursor">_</span></a>
<nav>
<ul class="nav-links">
<li><a href="#top">Dashboard</a></li>
<li><a href="#layer-tabs">Systems</a></li>
<li><a href="https://chasedumphord.com">← Portfolio</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/#snapshot">Snapshot</a></li>
<li><a href="https://chasedumphord.com/#about">About</a></li>
<li><a href="https://chasedumphord.com/#projects">Projects</a></li>
<li><a href="https://chasedumphord.com/#stack">Stack</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>
</nav>
</div>
@@ -234,12 +206,7 @@
<main id="top">
<!-- ══════════════════════════════════════════════════════════════════════ NOC HERO
Eyebrow tag: "Ced's NOC • Live Infrastructure Dashboard • Auto-refresh: 30s".
H1: "Live Systems Dashboard" with accent color on "Dashboard".
Lead text: describes 18 nodes, 28 services, Proxmox/K3s/TrueNAS/APRS stack.
Meta bar: location (Oxford MS), portfolio link, GitHub profile link.
══════════════════════════════════════════════════════════════════════════ -->
<!-- ═══════════════════════════════ NOC HERO ═══════════════════════════════ -->
<div class="noc-page-hero">
<div class="container">
<p class="eyebrow">
@@ -252,9 +219,9 @@
</h1>
<p class="noc-page-lead">
Real time visibility into Ced's HomeLab infrastructure across 18 nodes and 28 services
Proxmox, K3s, TrueNAS, APRS RF edge systems, and self-hosted services.
Built from the ground up and running in production every day. The infrastructure on this page is live. Not a demo.
Real-time visibility into Ced's HomeLab infrastructure — Proxmox, K3s,
TrueNAS, APRS RF edge systems, and self-hosted services.
Not simulated. Not a demo. Running hardware.
</p>
<ul class="noc-page-meta">
@@ -265,19 +232,7 @@
</div>
</div>
<!-- ══════════════════════════════════════════════════════════════════════ NOC DASHBOARD
Full-width live dashboard area. All dynamic content driven by ../script.js
pulling noc-status.json. Sub-sections inside:
• Status command bar — live connection status dot + refresh badge (JS)
• Uptime pills bar — online/degraded/offline counts built by buildUptimePills()
• Metrics grid — 4 counters: Nodes, Services Online, Network Segments, Edge Systems
• Alert panel — top 3 priority systems, fed from JSON data feed
• Layer filter tabs — filter cards by stack layer (Compute, Storage, Network, etc.)
• System cards grid — one card per host/service, populated by JS from JSON
• Fallback message — shown if JSON feed is unavailable
• Stack info bar — tech stack credits: Python → JSON → JS, Grafana link, GitHub repo
• NOC Roadmap — 3 build-stage cards (Portfolio NOC, Auto Updates, Grafana — all ✅ Live)
══════════════════════════════════════════════════════════════════════════ -->
<!-- ═══════════════════════════════ NOC DASHBOARD ═══════════════════════════════ -->
<div class="noc-full">
<div class="container">
@@ -337,7 +292,7 @@
<!-- Fallback -->
<div id="noc-fallback" class="noc-fallback" style="display:none;">
<p class="noc-fallback-msg">
NOC feed unavailable from this context systems run locally.<br/>
📡 NOC feed unavailable from this context — systems run locally.<br/>
Data updates when the local pipeline pushes a fresh noc-status.json.
</p>
</div>
@@ -345,7 +300,7 @@
<!-- Stack info bar -->
<div class="noc-stack-bar">
<span><strong>Stack:</strong> Python health checks → JSON → JS dashboard</span>
<span><strong>Live:</strong> <a href="https://grafana.cedshomelab.com" target="_blank" rel="noopener noreferrer">Grafana + Prometheus</a></span>
<span><strong>Next:</strong> Grafana + Prometheus integration</span>
<span><strong>Source:</strong>
<a href="https://github.com/ced4568/ceds-homelab" target="_blank" rel="noopener noreferrer">
github/ceds-homelab
@@ -364,23 +319,23 @@
<h3>Portfolio NOC</h3>
<p>
JSON-driven dashboard showing real inventory, online/offline checks,
service labels, latency, and last check timestamps across 18 nodes and 28 services.
service labels, latency, and last-check timestamps.
</p>
</div>
<div class="noc-card">
<div class="noc-card-badge done">✅ Live</div>
<div class="noc-card-badge next">⚙️ Next</div>
<h3>Automated Data Updates</h3>
<p>
Cron-driven scripts running on Biggie auto-refresh system status every 5 minutes
and push dashboard ready JSON to GitHub Pages with no manual updates required.
Scheduled scripts auto-refresh system status and push dashboard-ready
JSON on a cron interval — no manual updates.
</p>
</div>
<div class="noc-card">
<div class="noc-card-badge done">✅ Live</div>
<div class="noc-card-badge future">📈 Future</div>
<h3>Grafana + Prometheus</h3>
<p>
Full observability stack running across Proxmox, TrueNAS, K3s nodes, Uptime Kuma,
and APRS edge systems with real time metrics ingestion and live alerting pipelines.
Full observability stack for Proxmox, TrueNAS, K3s, Raspberry Pi,
Uptime Kuma, and APRS edge systems with real-time metrics.
</p>
</div>
</div>
@@ -391,9 +346,7 @@
</main>
<!-- ══════════════════════════════════════════════════════════════════════ FOOTER
Minimal single-row footer: copyright (year injected by data-year JS) + back-to-top link.
══════════════════════════════════════════════════════════════════════════ -->
<!-- ═══════════════════════════════ FOOTER ═══════════════════════════════ -->
<footer class="site-footer">
<div class="container footer-content">
<p>© <span data-year></span> Chase Dumphord — <span class="footer-mono">noc.chasedumphord.com</span></p>
@@ -401,28 +354,25 @@
</div>
</footer>
<!-- ══════════════════════════════════════════════════════════════════════ SCRIPTS
1. ../script.js — shared portfolio script (NOC JSON fetch, card rendering, year injection).
2. Inline NOC JS — layer filter tabs (buildLayerTabs, filterByLayer) and
uptime pill builder (buildUptimePills). Uses MutationObserver on the system grid
to rebuild tabs/pills whenever the JS card renderer populates the DOM.
══════════════════════════════════════════════════════════════════════════ -->
<!-- Shared script (up one level) -->
<script src="../script.js"></script>
<!-- NOC page extras — layer filter tabs + uptime pills -->
<script>
// ── Layer filter tabs ──────────────────────────────────────────
// Populated after NOC data loads. Filters the system grid by layer.
let allSystems = [];
let activeLayer = "all";
const originalLoad = window.loadNocStatus;
document.addEventListener("DOMContentLoaded", () => {
// Hook into data after the shared script loads it
const observer = new MutationObserver(() => {
const cards = document.querySelectorAll(".noc-system-card");
if (cards.length > 0) {
buildLayerTabs();
buildUptimePills();
reapplyFilter();
observer.disconnect();
}
});
@@ -430,16 +380,6 @@
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() {
const cards = document.querySelectorAll(".noc-system-card");
const layers = new Set(["all"]);
@@ -454,7 +394,7 @@
layers.forEach(layer => {
const btn = document.createElement("button");
btn.className = "layer-tab" + (layer === activeLayer ? " active" : "");
btn.className = "layer-tab" + (layer === "all" ? " active" : "");
btn.dataset.layer = layer;
btn.textContent = layer === "all" ? "All Systems" : layer;
btn.addEventListener("click", () => filterByLayer(layer, btn));
@@ -463,7 +403,6 @@
}
function filterByLayer(layer, activeBtn) {
activeLayer = layer;
document.querySelectorAll(".layer-tab").forEach(t => t.classList.remove("active"));
activeBtn.classList.add("active");
+1 -1
View File
@@ -95,6 +95,7 @@ async function loadNocStatus() {
</div>
<h3>${system.name}</h3>
<p>${system.type}</p>
<code>${system.address}</code>
<div class="system-meta">
<small>Status: ${system.status}</small>
<small>Latency: ${system.latency || "N/A"}</small>
@@ -235,7 +236,6 @@ async function loadGithubRepos() {
}
}
}
// Build the alert panel from system data
function renderAlerts(systems, alertList) {
const scored = systems
+9 -9
View File
@@ -12,7 +12,7 @@ SYSTEMS = [
"type": "Virtualization Platform",
"host": "10.10.30.250",
"port": 8006,
"display_name": "BigWorld",
"address": "10.10.30.250:8006",
"layer": "Core Infrastructure",
"label": "Hypervisor"
},
@@ -21,7 +21,7 @@ SYSTEMS = [
"type": "Storage Platform",
"host": "10.10.30.143",
"port": 80,
"display_name": "TrueNAS",
"address": "10.10.30.143",
"layer": "Storage",
"label": "NAS"
},
@@ -30,7 +30,7 @@ SYSTEMS = [
"type": "Reverse Proxy",
"host": "10.10.30.210",
"port": 81,
"display_name": "NPM",
"address": "10.10.30.210:81",
"layer": "Access Layer",
"label": "Proxy"
},
@@ -39,7 +39,7 @@ SYSTEMS = [
"type": "Service Dashboard",
"host": "10.10.30.61",
"port": 4000,
"display_name": "Dashy",
"address": "10.10.30.61:4000",
"layer": "Dashboard",
"label": "Portal"
},
@@ -48,7 +48,7 @@ SYSTEMS = [
"type": "Media Service",
"host": "10.10.30.143",
"port": 30013,
"display_name": "PrimeStation",
"address": "10.10.30.143:30013",
"layer": "Application Service",
"label": "App"
},
@@ -57,7 +57,7 @@ SYSTEMS = [
"type": "Kubernetes API",
"host": "10.10.30.72",
"port": 6443,
"display_name": "k3s-django-1",
"address": "10.10.30.72:6443",
"layer": "Compute Cluster",
"label": "Cluster"
},
@@ -66,7 +66,7 @@ SYSTEMS = [
"type": "RF Edge Gateway",
"host": "10.10.30.129",
"port": 8001,
"display_name": "KJ5JCO-10 iGate",
"address": "KJ5JCO-10 / Direwolf KISS 8001",
"layer": "Edge / RF",
"label": "iGate"
},
@@ -75,7 +75,7 @@ SYSTEMS = [
"type": "APRS Internet Service",
"host": "noam.aprs2.net",
"port": 14580,
"display_name": "noam.aprs2.net",
"address": "noam.aprs2.net:14580",
"layer": "Edge / RF",
"label": "External"
}
@@ -141,7 +141,7 @@ def main():
systems.append({
"name": system["name"],
"type": system["type"],
"address": system["display_name"],
"address": system["address"],
"status": status,
"severity": severity_from_status(online, latency),
"layer": system["layer"],