gigafibre-fsm/services/targo-hub/data/network-topology.json
louispaulb 607ea54b5c refactor: reduce token count, DRY code, consolidate docs
Backend services:
- targo-hub: extract deepGetValue to helpers.js, DRY disconnect reasons
  lookup map, compact CAPABILITIES, consolidate vision.js prompts/schemas,
  extract dispatch scoring weights, trim section dividers across 9 files
- modem-bridge: extract getSession() helper (6 occurrences), resetIdleTimer(),
  consolidate DM query factory, fix duplicate username fill bug, trim headers
  (server.js -36%, tplink-session.js -47%, docker-compose.yml -57%)

Frontend:
- useWifiDiagnostic: extract THRESHOLDS const, split processDiagnostic into
  6 focused helpers (processOnlineStatus, processWanIPs, processRadios,
  processMeshNodes, processClients, checkRadioIssues)
- EquipmentDetail: merge duplicate ROLE_LABELS, remove verbose comments

Documentation (17 → 13 files, -1,400 lines):
- New consolidated README.md (architecture, services, dependencies, auth)
- Merge ECOSYSTEM-OVERVIEW into ARCHITECTURE.md
- Merge MIGRATION-PLAN + ARCHITECTURE-COMPARE + FIELD-GAP + CHANGELOG → MIGRATION.md
- Merge COMPETITIVE-ANALYSIS into PLATFORM-STRATEGY.md
- Update ROADMAP.md with current phase status
- Delete CONTEXT.md (absorbed into README)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 08:39:58 -04:00

307 lines
17 KiB
JSON

{
"sites": {
"2900MC": {
"name": "Vantage QC2",
"city": "Saint-Laurent",
"address": "2900 Av. Marie Curie, Saint-Laurent, QC H4S 2C2",
"type": "datacenter",
"lat": 45.5017, "lng": -73.6673,
"devices": [
{ "hostname": "R1.2900", "type": "router", "make": "Edgecore", "model": "AS5916-XKS", "ip": "23.159.240.63", "os": "OcNOS", "role": "core-bgp" }
]
},
"800SQV": {
"name": "eStruxture MTL1",
"city": "Montréal",
"address": "800 Rue du Square-Victoria, Montréal, QC H4Z 1B7",
"type": "datacenter",
"lat": 45.5000, "lng": -73.5613,
"devices": [
{ "hostname": "R1.800", "type": "router", "make": "Edgecore", "model": "AS5916-XKS", "ip": "23.159.240.62", "os": "OcNOS", "role": "core-bgp" },
{ "hostname": "SW1.800", "type": "switch-l3", "make": "Raisecom", "model": "ISCOM 3048X-4Q", "ip": "10.100.0.4", "role": "aggregation" }
]
},
"1250RL": {
"name": "Cologix MTL3",
"city": "Montréal",
"address": "250 Boul. René-Lévesque O, Montréal, QC H3B 4W8",
"type": "datacenter",
"lat": 45.5025, "lng": -73.5685,
"devices": [
{ "hostname": "R1.1250", "type": "router", "make": "Edgecore", "model": "AS5916-XKS", "ip": "23.159.240.61", "os": "OcNOS", "role": "core-bgp" }
]
},
"RemEdge": {
"name": "St-Rémi",
"city": "Saint-Rémi",
"address": "104 rue de la Gare, Saint-Rémi, QC J0L 2L0",
"type": "pop",
"lat": 45.2643, "lng": -73.6156,
"devices": [
{ "hostname": "R1.Remi", "type": "router", "make": "Edgecore", "model": "AS5916-XKS", "ip": "23.159.240.0", "os": "OcNOS", "role": "edge-bgp" },
{ "hostname": "oltRem01", "type": "olt", "make": "TP-Link", "ip": "172.17.192.4", "role": "gpon" },
{ "hostname": "oltRem02", "type": "olt", "make": "TP-Link", "ip": "172.17.192.5", "role": "gpon" },
{ "hostname": "oltRem03", "type": "olt", "make": "TP-Link XGSPON", "ip": "172.17.192.6", "role": "gpon" },
{ "hostname": "oltRem04", "type": "olt", "make": "TP-Link", "ip": "172.17.192.7", "role": "gpon" }
]
},
"Boisee": {
"name": "Boisé / Ste-Clotilde",
"city": "Sainte-Clotilde",
"address": "1 rue des colibris, Sainte-Clotilde, QC J0L 1W0",
"type": "pop",
"lat": 45.1486, "lng": -73.6790,
"devices": [
{ "hostname": "UFIBoisee", "type": "router", "make": "Ufispace", "model": "S9501-18SMT", "ip": "23.159.240.20", "os": "OcNOS", "role": "edge-bgp" },
{ "hostname": "SW1.BureauServ", "type": "switch-l3", "make": "Raisecom", "model": "ISCOM 3048X-4Q", "ip": "172.17.0.9", "role": "aggregation" },
{ "hostname": "oltClotBoise", "type": "olt", "make": "Raisecom", "model": "ISCOM 6800", "ip": "172.17.0.4", "role": "gpon" },
{ "hostname": "oltBoiseeTpLink01", "type": "olt", "make": "TP-Link", "ip": "172.17.0.6", "role": "gpon" },
{ "hostname": "oltBoiseeTpLink02", "type": "olt", "make": "TP-Link", "ip": "172.17.0.7", "role": "gpon" }
]
},
"MichPigeon": {
"name": "Saint-Michel",
"city": "Saint-Michel",
"address": "Pigeon / Principale",
"type": "pop",
"lat": 45.2327, "lng": -73.5594,
"devices": [
{ "hostname": "UFI.StMichel", "type": "router", "make": "Ufispace", "model": "S9500-30XS", "ip": "23.159.240.40", "os": "OcNOS", "role": "edge-bgp", "status": "planned" },
{ "hostname": "SW1.Mich", "type": "switch-l3", "make": "Raisecom", "model": "ISCOM 3048X-4Q", "ip": "10.0.0.50", "role": "aggregation" }
]
},
"CloJune": {
"name": "June / Grand Rang",
"city": "Sainte-Clotilde",
"address": "Grand Rang / Hope Clo",
"type": "pop",
"lat": 45.1318, "lng": -73.7153,
"devices": [
{ "hostname": "UFI.June", "type": "router", "make": "Ufispace", "model": "S9500-30XS", "ip": "23.159.240.41", "os": "OcNOS", "role": "edge-bgp", "status": "planned" },
{ "hostname": "SW1.June", "type": "switch-l3", "make": "Raisecom", "model": "ISCOM 3048X-4Q", "ip": "10.0.1.70", "role": "aggregation" }
]
},
"OrmsMuni": {
"name": "Ormstown",
"city": "Ormstown",
"address": "5 Rue Gale, Ormstown, QC J0S 1K0",
"type": "pop",
"lat": 45.1290, "lng": -73.9092,
"devices": [
{ "hostname": "UFI.Ormstown", "type": "router", "make": "Ufispace", "model": "S9500-30XS", "ip": "23.159.240.48", "os": "OcNOS", "role": "edge-bgp", "status": "planned" },
{ "hostname": "SW1.Orms", "type": "switch-l3", "make": "Raisecom", "model": "ISCOM 3048X-4Q", "ip": "10.0.0.121", "role": "aggregation" },
{ "hostname": "oltOrmsMuni", "type": "olt", "make": "TP-Link", "ip": "172.17.128.4", "role": "gpon" },
{ "hostname": "oltOrmsMuni02", "type": "olt", "make": "TP-Link", "ip": "172.17.128.5", "role": "gpon" }
]
},
"BarbCoop": {
"name": "Sainte-Barbe",
"city": "Sainte-Barbe",
"address": "63 Montée du Lac, Sainte-Barbe, QC J0S 1P0",
"type": "pop",
"lat": 45.1669, "lng": -74.1933,
"devices": [
{ "hostname": "R1.Barb", "type": "router", "make": "Ufispace", "model": "S9500-30XS-P", "ip": "23.159.240.60", "os": "OcNOS", "role": "edge-bgp" },
{ "hostname": "oltBarbe01", "type": "olt", "make": "TP-Link", "ip": "172.17.176.4", "role": "gpon" },
{ "hostname": "oltBarbe02", "type": "olt", "make": "TP-Link", "ip": "172.17.176.5", "role": "gpon" },
{ "hostname": "oltBarbe03", "type": "olt", "make": "TP-Link", "ip": "172.17.176.6", "role": "gpon" },
{ "hostname": "oltBarbe04", "type": "olt", "make": "TP-Link", "ip": "172.17.176.7", "role": "gpon" }
]
},
"AnicetBiblio": {
"name": "Saint-Anicet",
"city": "Saint-Anicet",
"address": "1555 Route 132, Saint-Anicet, QC J0S 1M0",
"type": "pop",
"lat": 45.1269, "lng": -74.3430,
"devices": [
{ "hostname": "R1.AniBiblio", "type": "router", "make": "Ufispace", "model": "S9500-22XST", "ip": "23.159.240.59", "os": "OcNOS", "role": "edge-bgp" },
{ "hostname": "SW1.Anic", "type": "switch-l3", "make": "Raisecom", "model": "ISCOM 3048X-4Q", "ip": "172.17.16.1", "role": "aggregation" },
{ "hostname": "oltAnicetBiblio", "type": "olt", "make": "Raisecom", "model": "ISCOM 6800", "ip": "172.17.16.2", "role": "gpon" }
]
},
"DundeeMuni": {
"name": "Dundee / Ste-Agnès",
"city": "Dundee",
"address": "3307 Montée Smallman, Dundee, QC J0S 1L0",
"type": "pop",
"lat": 45.0634, "lng": -74.4308,
"devices": [
{ "hostname": "UFI.Dundee", "type": "router", "make": "Ufispace", "model": "S9501-18SMT", "ip": "23.159.240.53", "os": "OcNOS", "role": "edge-bgp", "status": "planned" },
{ "hostname": "oltAgnes", "type": "olt", "make": "TP-Link", "ip": "172.17.144.2", "role": "gpon" }
]
},
"HemWitsend": {
"name": "Hemmingford",
"city": "Hemmingford",
"address": "490 Rue Frontière, Hemmingford, QC J0L 1H0",
"type": "pop",
"lat": 45.0614, "lng": -73.5964,
"devices": [
{ "hostname": "UFI.Hemm", "type": "router", "make": "Ufispace", "model": "S9501-18SMT", "ip": "23.159.240.50", "os": "OcNOS", "role": "edge-bgp", "status": "planned" },
{ "hostname": "SW1.Hemm", "type": "switch-l3", "make": "Raisecom", "model": "ISCOM 3048X-4Q", "ip": "172.17.47.253", "role": "aggregation" },
{ "hostname": "oltHemmWitsend", "type": "olt", "make": "Raisecom", "model": "ISCOM 6800", "ip": "172.17.32.2", "role": "gpon" }
]
},
"SherVegco": {
"name": "Sherrington",
"city": "Saint-Patrice-de-Sherrington",
"address": "279 Rue Saint-Patrice, Saint-Patrice-de-Sherrington, QC J0L 1N0",
"type": "pop",
"lat": 45.1753, "lng": -73.5189,
"devices": [
{ "hostname": "UFI.Sherrington", "type": "router", "make": "Ufispace", "model": "S9501-18SMT", "ip": "23.159.240.44", "os": "OcNOS", "role": "edge-bgp", "status": "planned" },
{ "hostname": "oltSherVegco", "type": "olt", "make": "Raisecom", "model": "ISCOM 6800", "ip": "172.17.80.2", "role": "gpon" }
]
},
"BernCaserne": {
"name": "Saint-Bernard-de-Lacolle",
"city": "Saint-Bernard-de-Lacolle",
"address": "139 Rang Saint-André, Saint-Bernard-de-Lacolle, QC J0J 1V0",
"type": "pop",
"lat": 45.0872, "lng": -73.4208,
"devices": [
{ "hostname": "UFI.BernCaserne", "type": "router", "make": "Ufispace", "model": "S9501-18SMT", "ip": "23.159.240.43", "os": "OcNOS", "role": "edge-bgp", "status": "planned" },
{ "hostname": "oltBernCasern", "type": "olt", "make": "Raisecom", "model": "ISCOM 6800", "ip": "172.17.96.2", "role": "gpon" }
]
},
"StLouis": {
"name": "Saint-Louis-de-Gonzague",
"city": "Saint-Louis-de-Gonzague",
"address": "2855 Chemin d'Athelstan, Hinchinbrooke, QC J0S 1A0",
"type": "pop",
"lat": 45.1543, "lng": -73.9870,
"devices": [
{ "hostname": "oltStLouisMuni", "type": "olt", "make": "Raisecom", "model": "ISCOM 6800", "ip": "172.17.112.2", "role": "gpon" }
]
},
"HaveMuni": {
"name": "Havelock",
"city": "Havelock",
"address": "481 Route 203, Havelock, QC J0S 2C0",
"type": "pop",
"lat": 45.0967, "lng": -73.7808,
"devices": [
{ "hostname": "UFI.Havelock", "type": "router", "make": "Ufispace", "model": "S9500-30XS", "ip": "23.159.240.42", "os": "OcNOS", "role": "edge-bgp", "status": "planned" },
{ "hostname": "oltHaveMuni", "type": "olt", "make": "Raisecom", "model": "ISCOM 6800", "ip": "172.17.64.2", "role": "gpon" }
]
},
"AthelCaserne": {
"name": "Athelstan",
"city": "Hinchinbrooke",
"address": "2848 Chemin d'Athelstan, Hinchinbrooke, QC J0S 1A0",
"type": "pop",
"lat": 45.0640, "lng": -74.0525,
"devices": [
{ "hostname": "R1.Athel", "type": "router", "make": "Ufispace", "model": "S9500-30XS-P", "ip": "23.159.240.52", "os": "OcNOS", "role": "edge-bgp" },
{ "hostname": "oltAtheCaserne", "type": "olt", "make": "Raisecom", "model": "ISCOM 6800", "ip": "172.17.48.4", "role": "gpon" }
]
},
"AntoPins": {
"name": "Lac des Pins / Franklin",
"city": "Franklin",
"address": "3615 Route 201, Franklin, QC J0S 1N0",
"type": "pop",
"lat": 45.0912, "lng": -73.9155,
"devices": [
{ "hostname": "R1.AntoPins", "type": "router", "make": "Ufispace", "model": "S9500-30XS-P", "ip": "23.159.240.55", "os": "OcNOS", "role": "edge-bgp" },
{ "hostname": "oltAntoLacdesPins", "type": "olt", "make": "Raisecom", "model": "ISCOM 6800", "ip": "172.17.48.2", "role": "gpon" }
]
},
"ChrysTherese": {
"name": "Saint-Chrysostome",
"city": "Saint-Chrysostome",
"address": "Saint-Chrysostome",
"type": "pop",
"lat": 45.1003, "lng": -73.8130,
"devices": [
{ "hostname": "R1.ChrysTherese", "type": "router", "make": "Ufispace", "model": "S9500-22XST", "ip": "23.159.240.51", "os": "OcNOS", "role": "edge-bgp" },
{ "hostname": "olt1.Chrys", "type": "olt", "make": "TP-Link XGSPON", "ip": "172.17.224.4", "role": "gpon" }
]
},
"HuntDalousie": {
"name": "Huntingdon",
"city": "Huntingdon",
"address": "78 Rue Dalhousie, Huntingdon, QC J0S 1H0",
"type": "pop",
"lat": 45.0800, "lng": -74.1680,
"devices": [
{ "hostname": "UFI.Huntingdon", "type": "router", "make": "Ufispace", "model": "S9500-30XS", "ip": "23.159.240.45", "os": "OcNOS", "role": "edge-bgp", "status": "planned" },
{ "hostname": "oltHunt01", "type": "olt", "make": "TP-Link", "ip": "172.17.160.2", "role": "gpon" },
{ "hostname": "oltHunt02", "type": "olt", "make": "TP-Link", "ip": "172.17.160.5", "role": "gpon" },
{ "hostname": "oltHunt03", "type": "olt", "make": "TP-Link", "ip": "172.17.160.6", "role": "gpon" }
]
}
},
"links": [
{ "id": "L01", "from": "2900MC", "to": "800SQV", "type": "dwdm", "distance_km": 26, "speed_gbps": 100, "fibers": 2, "note": "MUX/DEMUX" },
{ "id": "L02", "from": "800SQV", "to": "1250RL", "type": "fiber", "distance_km": 2, "speed_gbps": 100 },
{ "id": "L03", "from": "800SQV", "to": "RemEdge", "type": "fiber", "distance_km": 53, "speed_gbps": 100, "note": "via stop Isidore, excl prolongation CSSDGS" },
{ "id": "L04", "from": "BarbCoop", "to": "2900MC", "type": "dwdm", "distance_km": 82, "speed_gbps": 100, "note": "MUX/DEMUX + OADM(1)" },
{ "id": "L05", "from": "1250RL", "to": "MichPigeon", "type": "fiber", "distance_km": 52, "speed_gbps": 100 },
{ "id": "L06", "from": "MichPigeon", "to": "RemEdge", "type": "fiber", "distance_km": 6, "speed_gbps": 100 },
{ "id": "L07", "from": "MichPigeon", "to": "SherVegco", "type": "fiber", "distance_km": null, "speed_gbps": 20, "note": "2x10G" },
{ "id": "L08", "from": "SherVegco", "to": "BernCaserne", "type": "fiber", "distance_km": null, "speed_gbps": 20, "note": "2x10G — dorsale problématique" },
{ "id": "L09", "from": "SherVegco", "to": "HemWitsend", "type": "fiber", "distance_km": 28, "speed_gbps": 20, "note": "2x10G" },
{ "id": "L10", "from": "BernCaserne", "to": "HemWitsend", "type": "fiber", "distance_km": 15, "speed_gbps": 20, "note": "2x10G" },
{ "id": "L11", "from": "RemEdge", "to": "CloJune", "type": "fiber", "distance_km": 12, "speed_gbps": 100 },
{ "id": "L12", "from": "CloJune", "to": "OrmsMuni", "type": "fiber", "distance_km": 40, "speed_gbps": 100 },
{ "id": "L13", "from": "OrmsMuni", "to": "BarbCoop", "type": "fiber", "distance_km": 26, "speed_gbps": 100 },
{ "id": "L14", "from": "BarbCoop", "to": "AnicetBiblio", "type": "fiber", "distance_km": 17, "speed_gbps": 25, "fibers": 2 },
{ "id": "L15", "from": "AnicetBiblio", "to": "DundeeMuni", "type": "fiber", "distance_km": 37, "speed_gbps": 10, "fibers": 2 },
{ "id": "L16", "from": "HemWitsend", "to": "Boisee", "type": "fiber", "distance_km": 19 },
{ "id": "L17", "from": "HaveMuni", "to": "ChrysTherese", "type": "fiber" },
{ "id": "L18", "from": "ChrysTherese", "to": "CloJune", "type": "fiber" },
{ "id": "L19", "from": "HaveMuni", "to": "AntoPins", "type": "fiber" },
{ "id": "L20", "from": "AntoPins", "to": "OrmsMuni", "type": "fiber" },
{ "id": "L21", "from": "AntoPins", "to": "AthelCaserne", "type": "fiber" },
{ "id": "L22", "from": "AthelCaserne", "to": "DundeeMuni", "type": "fiber" },
{ "id": "L23", "from": "HuntDalousie", "to": "AthelCaserne", "type": "fiber" },
{ "id": "L24", "from": "HuntDalousie", "to": "BarbCoop", "type": "fiber", "note": "OADM" },
{ "id": "L25", "from": "HuntDalousie", "to": "OrmsMuni", "type": "fiber", "note": "OADM" },
{ "id": "L26", "from": "DundeeMuni", "to": "AnicetBiblio", "type": "fiber", "distance_km": 37, "speed_gbps": 10, "fibers": 2, "note": "return path" },
{ "id": "L27", "from": "RemEdge", "to": "Boisee", "type": "fiber" },
{ "id": "L28", "from": "StLouis", "to": "BarbCoop", "type": "fiber" },
{ "id": "L29", "from": "HemWitsend", "to": "HaveMuni", "type": "fiber" }
],
"rings": [
{
"name": "Anneau MTL ↔ Ouest",
"description": "Ring principal 100G: MTL → St-Rémi → June → Ormstown → Barbe → MTL",
"path": ["800SQV", "RemEdge", "CloJune", "OrmsMuni", "BarbCoop", "2900MC", "800SQV"],
"speed_gbps": 100
},
{
"name": "Anneau MTL ↔ Sud",
"description": "Ring secondaire via Cologix et Saint-Michel",
"path": ["800SQV", "1250RL", "MichPigeon", "RemEdge", "800SQV"],
"speed_gbps": 100
},
{
"name": "Triangle Sud",
"description": "Sherrington — St-Bernard — Hemmingford (2x10G)",
"path": ["SherVegco", "BernCaserne", "HemWitsend", "SherVegco"],
"speed_gbps": 20
}
],
"cabinets": {
"CAB_Anicet": "1555 Route 132, Saint-Anicet, QC J0S 1M0",
"CAB_Anto": "3615 Route 201, Franklin, QC J0S 1N0",
"CAB_Athe": "2848 Chemin d'Athelstan, Hinchinbrooke, QC J0S 1A0",
"CAB_Barbe": "63 Montée du Lac, Sainte-Barbe, QC J0S 1P0",
"CAB_Bern": "139 Rang Saint-André, Saint-Bernard-de-Lacolle, QC J0J 1V0",
"CAB_Boisé": "1 rue des colibris, Sainte-Clotilde, QC J0L 1W0",
"CAB_Dundee": "3307 Montée Smallman, Dundee, QC J0S 1L0",
"CAB_Have": "481 Route 203, Havelock, QC J0S 2C0",
"CAB_Hemm": "490 Rue Frontière, Hemmingford, QC J0L 1H0",
"CAB_Hunt": "78 Rue Dalhousie, Huntingdon, QC J0S 1H0",
"CAB_Orms": "5 Rue Gale, Ormstown, QC J0S 1K0",
"CAB_Rem": "104 rue de la Gare, Saint-Rémi, QC J0L 2L0",
"CAB_Sher": "279 Rue Saint-Patrice, Saint-Patrice-de-Sherrington, QC J0L 1N0",
"CAB_St-Louis": "2855 Chemin d'Athelstan, Hinchinbrooke, QC J0S 1A0"
}
}