Files
Netbox/topology/topo_full.json
T
dcstephenson b6151b7de5 Add port labels, modernize patch panels, add a real PNG preview
- export_topology.py: edges now carry the exact port name on both ends
  (pulled directly from Cable/CableTermination, not inferred from the
  trace chain), so the diagram can label each connector.
- generate_drawio.py: patch panels are now a small rack-unit shape
  (header strip + port ticks, parented to the panel body so they move
  together) instead of a plain box; connectors show 'porta <-> portb'
  and no longer carry a directional arrowhead (these are physical
  cables, not directed links); switches keep the network-switch icon.
- render_png.js + render_host.html: headless Puppeteer driver for
  embed.diagrams.net's postMessage export protocol -- an actual
  render of the .drawio file, not an approximation. Field-Switch-
  Topology.png is the committed output, for anyone who wants a look
  without opening draw.io.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NM3nivbufxEWiKKmatEtEe
2026-09-15 13:03:18 -05:00

2 lines
19 KiB
JSON

{"devices": [{"id": 57, "name": "afl-104", "role": "patch-panel", "role_name": "Patch Panel", "site": "Highway 104 Base Station", "status": "active", "device_type": "AFL 12-Port Splice Module"}, {"id": 92, "name": "afl-cr13", "role": "patch-panel", "role_name": "Patch Panel", "site": "County Road 13 Base Station", "status": "active", "device_type": "AFL 12-Port Splice Module"}, {"id": 85, "name": "afl-lem", "role": "patch-panel", "role_name": "Patch Panel", "site": "Lemler Substation", "status": "active", "device_type": "AFL 12-Port Splice Module"}, {"id": 58, "name": "afl-mag", "role": "patch-panel", "role_name": "Patch Panel", "site": "Magnolia Springs Base Station", "status": "active", "device_type": "AFL 12-Port Splice Module"}, {"id": 82, "name": "afl-swf", "role": "patch-panel", "role_name": "Patch Panel", "site": "Southwest Foley Substation", "status": "active", "device_type": "AFL 12-Port Splice Module"}, {"id": 42, "name": "bs-104-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Highway 104 Base Station", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 93, "name": "bs-cr13-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "County Road 13 Base Station", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 40, "name": "bs-lem-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Lemler Substation", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 38, "name": "bs-lil-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Lillian Substation", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 43, "name": "bs-mag-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Magnolia Springs Base Station", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 41, "name": "bs-nwt-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "North Water Tank", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 39, "name": "bs-swf-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Southwest Foley Substation", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 7, "name": "dmo-lob-sw35a", "role": "dist-switch", "role_name": "Distribution Switch", "site": "DMO-LOB", "status": "active", "device_type": "S4112F-ON"}, {"id": 2, "name": "FCHE-PP-32B", "role": "patch-panel", "role_name": "Patch Panel", "site": "FCHE Cable Headend", "status": "active", "device_type": "LS Series 288-Port LC UPC"}, {"id": 4, "name": "FCHE-PP17D", "role": "patch-panel", "role_name": "Patch Panel", "site": "FCHE Cable Headend", "status": "active", "device_type": "FIS 48-Port LC UPC"}, {"id": 3, "name": "FCHE-PP34A", "role": "patch-panel", "role_name": "Patch Panel", "site": "FCHE Cable Headend", "status": "active", "device_type": "FIS 144-Port LC UPC 12-Slot"}, {"id": 1, "name": "fche-sw17a", "role": "dist-switch", "role_name": "Distribution Switch", "site": "FCHE Cable Headend", "status": "active", "device_type": "ProCurve 5412zl"}, {"id": 63, "name": "fis-nwt", "role": "patch-panel", "role_name": "Patch Panel", "site": "North Water Tank", "status": "active", "device_type": "F1-DW2X"}, {"id": 11, "name": "gs-nff-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "North Foley Field Gas Regulator", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 19, "name": "ls-avls-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Aaronville Lift Station", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 14, "name": "ls-bsls-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Bay Street Lift Station", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 20, "name": "ls-clls-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Cornerstone Lodge Lift Station", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 10, "name": "ls-guls-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Gulftel Lift Station", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 25, "name": "ls-mals-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Marlin Place Lift Station", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 23, "name": "ls-mmls-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Majestic Manor Lift Station", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 26, "name": "ls-mpls-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "McSwain Place Lift Station", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 9, "name": "ls-pals-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Peachtree Lift Station", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 21, "name": "ls-rols-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "River Oaks Lift Station", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 24, "name": "ls-spls-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "South Pointe Lift Station", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 22, "name": "ls-vhls-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Villages at Hickory Lift Station", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 76, "name": "primex-ebert", "role": "patch-panel", "role_name": "Patch Panel", "site": "Ebert Substation", "status": "active", "device_type": "Primex 12-Port LC Panel"}, {"id": 79, "name": "primex-holk", "role": "patch-panel", "role_name": "Patch Panel", "site": "Holk Substation", "status": "active", "device_type": "Primex 12-Port LC Panel"}, {"id": 80, "name": "primex-lem", "role": "patch-panel", "role_name": "Patch Panel", "site": "Lemler Substation", "status": "active", "device_type": "Primex 12-Port LC Panel"}, {"id": 81, "name": "primex-lil", "role": "patch-panel", "role_name": "Patch Panel", "site": "Lillian Substation", "status": "active", "device_type": "Primex 12-Port LC Panel"}, {"id": 83, "name": "primex-wpb", "role": "patch-panel", "role_name": "Patch Panel", "site": "West Perdido Beach Substation", "status": "active", "device_type": "Primex 12-Port LC Panel"}, {"id": 33, "name": "rec-10000-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Bay St @ Azalea Recloser", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 34, "name": "rec-10008-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Cedar @ Michigan Recloser", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 17, "name": "rec-10016-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Underwood Rd Recloser", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 28, "name": "rec-10018-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Summerdale Recloser", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 18, "name": "rec-10136-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "WHEP Recloser", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 15, "name": "rec-10160-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Coca Cola Plant Hwy 104 Recloser", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 32, "name": "rec-10660-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Old Foley Rd Recloser", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 16, "name": "rec-13032-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Peachtree Recloser", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 30, "name": "rec-50094-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Randall Ave @ Hwy 98 Recloser", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 31, "name": "rec-52882-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Pollard Rd Recloser", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 87, "name": "sec-holk-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Holk Substation", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 88, "name": "sec-lem-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Lemler Substation", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 89, "name": "sec-swf-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Southwest Foley Substation", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 45, "name": "spare-163", "role": "field-switch", "role_name": "Field Switch", "site": "FCHE Cable Headend", "status": "inventory", "device_type": "IES3220-8T4F"}, {"id": 46, "name": "spare-164", "role": "field-switch", "role_name": "Field Switch", "site": "FCHE Cable Headend", "status": "inventory", "device_type": "IES3220-8T4F"}, {"id": 47, "name": "spare-165", "role": "field-switch", "role_name": "Field Switch", "site": "FCHE Cable Headend", "status": "inventory", "device_type": "IES3220-8T4F"}, {"id": 48, "name": "spare-166", "role": "field-switch", "role_name": "Field Switch", "site": "FCHE Cable Headend", "status": "inventory", "device_type": "IES3220-8T4F"}, {"id": 36, "name": "sub-ebert-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Ebert Substation", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 13, "name": "sub-fair-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Fairhope Substation", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 29, "name": "sub-holk-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Holk Substation", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 49, "name": "sub-lem-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Lemler Substation", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 35, "name": "sub-lem-sw01-decommissioned", "role": "field-switch", "role_name": "Field Switch", "site": "Lemler Substation", "status": "decommissioning", "device_type": "2930F"}, {"id": 8, "name": "sub-lil-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Lillian Substation", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 27, "name": "sub-swf-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Southwest Foley Substation", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 37, "name": "sub-wpb-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "West Perdido Beach Substation", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 90, "name": "wtr-cwt-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Cypress Water Tank", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 12, "name": "wtr-ecc-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Elberta Cross Connect", "status": "active", "device_type": "IES3110-8TFP-R"}, {"id": 44, "name": "wtr-w12-sw01", "role": "field-switch", "role_name": "Field Switch", "site": "Well 12", "status": "planned", "device_type": "IES3110-8TFP-R"}, {"id": 51, "name": "xpak-10000", "role": "patch-panel", "role_name": "Patch Panel", "site": "Bay St @ Azalea Recloser", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 53, "name": "xpak-10008", "role": "patch-panel", "role_name": "Patch Panel", "site": "Cedar @ Michigan Recloser", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 72, "name": "xpak-10016", "role": "patch-panel", "role_name": "Patch Panel", "site": "Underwood Rd Recloser", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 71, "name": "xpak-10018", "role": "patch-panel", "role_name": "Patch Panel", "site": "Summerdale Recloser", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 74, "name": "xpak-10136", "role": "patch-panel", "role_name": "Patch Panel", "site": "WHEP Recloser", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 54, "name": "xpak-10160", "role": "patch-panel", "role_name": "Patch Panel", "site": "Coca Cola Plant Hwy 104 Recloser", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 64, "name": "xpak-10660", "role": "patch-panel", "role_name": "Patch Panel", "site": "Old Foley Rd Recloser", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 66, "name": "xpak-13032", "role": "patch-panel", "role_name": "Patch Panel", "site": "Peachtree Recloser", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 68, "name": "xpak-50094", "role": "patch-panel", "role_name": "Patch Panel", "site": "Randall Ave @ Hwy 98 Recloser", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 67, "name": "xpak-52882", "role": "patch-panel", "role_name": "Patch Panel", "site": "Pollard Rd Recloser", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 50, "name": "xpak-avls", "role": "patch-panel", "role_name": "Patch Panel", "site": "Aaronville Lift Station", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 52, "name": "xpak-bsls", "role": "patch-panel", "role_name": "Patch Panel", "site": "Bay Street Lift Station", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 55, "name": "xpak-clls", "role": "patch-panel", "role_name": "Patch Panel", "site": "Cornerstone Lodge Lift Station", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 91, "name": "xpak-cwt", "role": "patch-panel", "role_name": "Patch Panel", "site": "Cypress Water Tank", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 56, "name": "xpak-guls", "role": "patch-panel", "role_name": "Patch Panel", "site": "Gulftel Lift Station", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 60, "name": "xpak-mals", "role": "patch-panel", "role_name": "Patch Panel", "site": "Marlin Place Lift Station", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 59, "name": "xpak-mmls", "role": "patch-panel", "role_name": "Patch Panel", "site": "Majestic Manor Lift Station", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 61, "name": "xpak-mpls", "role": "patch-panel", "role_name": "Patch Panel", "site": "McSwain Place Lift Station", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 62, "name": "xpak-nff", "role": "patch-panel", "role_name": "Patch Panel", "site": "North Foley Field Gas Regulator", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 65, "name": "xpak-pals", "role": "patch-panel", "role_name": "Patch Panel", "site": "Peachtree Lift Station", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 69, "name": "xpak-rols", "role": "patch-panel", "role_name": "Patch Panel", "site": "River Oaks Lift Station", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 70, "name": "xpak-spls", "role": "patch-panel", "role_name": "Patch Panel", "site": "South Pointe Lift Station", "status": "active", "device_type": "xPAK 6-Port SC/APC"}, {"id": 73, "name": "xpak-vhls", "role": "patch-panel", "role_name": "Patch Panel", "site": "Villages at Hickory Lift Station", "status": "active", "device_type": "xPAK 6-Port SC/APC"}], "edges": [{"a": 7, "a_port": "4", "b": 13, "b_port": "9"}, {"a": 41, "a_port": "Gi1/10", "b": 63, "b_port": "P2:6"}, {"a": 63, "a_port": "P2:8", "b": 3, "b_port": "55"}, {"a": 1, "a_port": "E3", "b": 3, "b_port": "51"}, {"a": 19, "a_port": "10", "b": 50, "b_port": "2"}, {"a": 14, "a_port": "10", "b": 52, "b_port": "2"}, {"a": 20, "a_port": "9", "b": 55, "b_port": "1"}, {"a": 10, "a_port": "9", "b": 56, "b_port": "1"}, {"a": 25, "a_port": "9", "b": 60, "b_port": "1"}, {"a": 23, "a_port": "10", "b": 59, "b_port": "2"}, {"a": 26, "a_port": "10", "b": 61, "b_port": "2"}, {"a": 9, "a_port": "10", "b": 65, "b_port": "2"}, {"a": 21, "a_port": "10", "b": 69, "b_port": "2"}, {"a": 24, "a_port": "9", "b": 70, "b_port": "1"}, {"a": 22, "a_port": "10", "b": 73, "b_port": "2"}, {"a": 52, "a_port": "2", "b": 50, "b_port": "1"}, {"a": 50, "a_port": "2", "b": 69, "b_port": "1"}, {"a": 69, "a_port": "2", "b": 73, "b_port": "1"}, {"a": 73, "a_port": "2", "b": 59, "b_port": "1"}, {"a": 59, "a_port": "2", "b": 61, "b_port": "1"}, {"a": 61, "a_port": "2", "b": 55, "b_port": "1"}, {"a": 65, "a_port": "2", "b": 56, "b_port": "1"}, {"a": 33, "a_port": "10", "b": 51, "b_port": "2"}, {"a": 34, "a_port": "10", "b": 53, "b_port": "2"}, {"a": 17, "a_port": "10", "b": 72, "b_port": "2"}, {"a": 28, "a_port": "9", "b": 71, "b_port": "1"}, {"a": 18, "a_port": "10", "b": 74, "b_port": "2"}, {"a": 15, "a_port": "9", "b": 54, "b_port": "1"}, {"a": 32, "a_port": "9", "b": 64, "b_port": "1"}, {"a": 16, "a_port": "10", "b": 66, "b_port": "2"}, {"a": 30, "a_port": "9", "b": 68, "b_port": "1"}, {"a": 31, "a_port": "9", "b": 67, "b_port": "1"}, {"a": 7, "a_port": "11", "b": 67, "b_port": "1"}, {"a": 7, "a_port": "1", "b": 68, "b_port": "1"}, {"a": 66, "a_port": "2", "b": 72, "b_port": "1"}, {"a": 72, "a_port": "2", "b": 74, "b_port": "1"}, {"a": 74, "a_port": "2", "b": 71, "b_port": "1"}, {"a": 51, "a_port": "2", "b": 53, "b_port": "1"}, {"a": 1, "a_port": "E12", "b": 2, "b_port": "7"}, {"a": 1, "a_port": "E2", "b": 4, "b_port": "10"}, {"a": 4, "a_port": "31", "b": 64, "b_port": "1"}, {"a": 4, "a_port": "27", "b": 12, "b_port": "9"}, {"a": 76, "a_port": "6", "b": 36, "b_port": "10"}, {"a": 4, "a_port": "12", "b": 76, "b_port": "5"}, {"a": 76, "a_port": "8", "b": 83, "b_port": "3"}, {"a": 83, "a_port": "4", "b": 37, "b_port": "10"}, {"a": 83, "a_port": "6", "b": 81, "b_port": "12"}, {"a": 81, "a_port": "10", "b": 8, "b_port": "9"}, {"a": 2, "a_port": "49", "b": 70, "b_port": "1"}, {"a": 2, "a_port": "3", "b": 60, "b_port": "1"}, {"a": 85, "a_port": "2", "b": 40, "b_port": "Gi1/10"}, {"a": 2, "a_port": "15", "b": 85, "b_port": "1"}, {"a": 85, "a_port": "2", "b": 82, "b_port": "3"}, {"a": 82, "a_port": "6", "b": 39, "b_port": "10"}, {"a": 82, "a_port": "6", "b": 58, "b_port": "1"}, {"a": 58, "a_port": "1", "b": 43, "b_port": "Gi1/9"}, {"a": 2, "a_port": "4", "b": 52, "b_port": "1"}, {"a": 3, "a_port": "96", "b": 54, "b_port": "1"}, {"a": 3, "a_port": "1", "b": 66, "b_port": "1"}, {"a": 3, "a_port": "53", "b": 62, "b_port": "1"}, {"a": 62, "a_port": "1", "b": 11, "b_port": "9"}, {"a": 3, "a_port": "51", "b": 65, "b_port": "1"}, {"a": 2, "a_port": "14", "b": 79, "b_port": "5"}, {"a": 79, "a_port": "4", "b": 29, "b_port": "10"}, {"a": 79, "a_port": "4", "b": 51, "b_port": "1"}, {"a": 82, "a_port": "1", "b": 27, "b_port": "9"}, {"a": 79, "a_port": "6", "b": 87, "b_port": "10"}, {"a": 80, "a_port": "4", "b": 88, "b_port": "10"}, {"a": 79, "a_port": "6", "b": 80, "b_port": "3"}, {"a": 80, "a_port": "2", "b": 82, "b_port": "1"}, {"a": 82, "a_port": "2", "b": 89, "b_port": "9"}, {"a": 53, "a_port": "2", "b": 80, "b_port": "1"}, {"a": 80, "a_port": "2", "b": 49, "b_port": "10"}, {"a": 81, "a_port": "12", "b": 38, "b_port": "Gi1/9"}, {"a": 2, "a_port": "7", "b": 91, "b_port": "1"}, {"a": 90, "a_port": "9", "b": 91, "b_port": "1"}, {"a": 42, "a_port": "Gi1/10", "b": 57, "b_port": "2"}, {"a": 57, "a_port": "1", "b": 63, "b_port": "P2:6"}, {"a": 57, "a_port": "2", "b": 92, "b_port": "1"}, {"a": 93, "a_port": "Gi1/9", "b": 92, "b_port": "1"}]}