This commit is contained in:
Robert Chacon committed 2026-04-01 07:36:34 -06:00
1 parent 5651305bc9
commit 1c9469dbf2
5 files changed
+786 -8

No files matched your search

+24 -2
View File
@@ -62,6 +62,28 @@ def fetch_netzur_data() -> Tuple[List[dict], List[dict]]:
def _build_exclusion_set() -> set:
return {entry.lower().strip() for entry in exclude_sites() if entry}
def _split_ip_field(raw_value) -> List[str]:
values: List[str] = []
if raw_value in (None, ""):
return values
if isinstance(raw_value, (list, tuple, set)):
parts = raw_value
else:
parts = str(raw_value).split(",")
seen = set()
for part in parts:
entry = str(part).strip()
if not entry or entry in seen:
continue
seen.add(entry)
values.append(entry)
return values
def createShaper() -> NetworkGraph:
LOG.info("[Netzur] Starting sync")
if integration_common_use_mikrotik_ipv6():
@@ -122,8 +144,8 @@ def createShaper() -> NetworkGraph:
)
)
ipv4 = [subscriber["ip"]] if subscriber.get("ip") else []
ipv6 = [subscriber["ipv6"]] if subscriber.get("ipv6") else []
ipv4 = _split_ip_field(subscriber.get("ip"))
ipv6 = _split_ip_field(subscriber.get("ipv6"))
mac = str(subscriber.get("mac") or "").strip()
if ipv4 or ipv6 or mac:
net.addRawNode(
+661
View File
@@ -0,0 +1,661 @@
digraph {
0 [ label = "Site { name: \"Macarena\", id: \"93ac62e3-ea04-456f-bb19-bc1f294b08e3\", latitude: Some(31.91146), longitude: Some(-106.67658) }" ]
1 [ label = "Root { name: \"WestRedd\", id: \"5581d110-004f-415d-ae34-ab04a59b19cd\", latitude: Some(31.861092), longitude: Some(-106.54948) }" ]
2 [ label = "Site { name: \"LaDobe\", id: \"8b36fbc8-1768-4b13-bd1c-3212d67a0074\", latitude: Some(31.914206), longitude: Some(-106.680504) }" ]
3 [ label = "Site { name: \"Enchanted\", id: \"fa6befcf-75a8-4e1c-b24a-cb56c345a6d6\", latitude: Some(31.916632), longitude: Some(-106.57687) }" ]
4 [ label = "Site { name: \"175 Kittyhawk\", id: \"55251a1b-448d-4d3d-aa35-2bdbf25c698c\", latitude: Some(31.862467), longitude: Some(-106.692795) }" ]
5 [ label = "Site { name: \"2832 Girlscout Lane PoP\", id: \"cfb79dfe-f9ea-4d30-9ffc-3f37521a42ac\", latitude: Some(31.808187), longitude: Some(-106.57663) }" ]
6 [ label = "Site { name: \"1308 Desierto Seco PoP\", id: \"c95fab9a-c10f-4953-acee-02db2e460ae7\", latitude: Some(31.867725), longitude: Some(-106.56048) }" ]
7 [ label = "Site { name: \"Medano Heights Apt 4\", id: \"d7d8451a-dc5b-47ab-a19e-70fee3316a47\", latitude: Some(31.870169), longitude: Some(-106.57575) }" ]
8 [ label = "Site { name: \"Vinton\", id: \"93fe0eae-8733-4dd4-86c4-d34e2fd51f99\", latitude: Some(31.963459), longitude: Some(-106.62187) }" ]
9 [ label = "Site { name: \"Tuscany Ridge\", id: \"804a3feb-3808-4d1a-b1b1-db9b265e9ab8\", latitude: Some(31.871101), longitude: Some(-106.54482) }" ]
10 [ label = "Site { name: \"Medano Heights Apt 7\", id: \"e3f33d28-7813-407c-9127-67a3c450a5a8\", latitude: Some(31.870134), longitude: Some(-106.575) }" ]
11 [ label = "Site { name: \"1300NVintonUnits3and4\", id: \"a634d84d-ffa6-4642-87b4-b8ccd6558efe\", latitude: Some(31.962906), longitude: Some(-106.62146) }" ]
12 [ label = "Site { name: \"2801 Girl Scout Lane\", id: \"1532675e-d631-4989-8d6f-c38638d2984f\", latitude: Some(31.806168), longitude: Some(-106.57586) }" ]
13 [ label = "Site { name: \"190 LaDobe PoP\", id: \"d5f253b6-59c4-4226-b4b1-aeec2acd3a6f\", latitude: Some(31.914616), longitude: Some(-106.68102) }" ]
14 [ label = "Site { name: \"MDC El Paso\", id: \"1ce2fc56-4521-4b0c-beb3-9fde312884bb\", latitude: Some(31.74995), longitude: Some(-106.30986) }" ]
15 [ label = "Site { name: \"FescuePoP\", id: \"d1e84fab-f69d-469c-9845-7de9a105afc2\", latitude: Some(31.92754), longitude: Some(-106.62176) }" ]
16 [ label = "Site { name: \"TrailerCity\", id: \"651b2e8a-be7a-462e-8be9-fefc15bfaa66\", latitude: Some(31.81881), longitude: Some(-106.66134) }" ]
17 [ label = "Site { name: \"Medano Heights Apt 9\", id: \"b95c4e1b-8493-4ea2-851a-08acdee4eae3\", latitude: Some(31.869942), longitude: Some(-106.57515) }" ]
18 [ label = "Site { name: \"6360 Gato Rd PoP\", id: \"d4500ad8-18d5-429d-bf20-c9cf00e4bf33\", latitude: Some(31.887419), longitude: Some(-106.63829) }" ]
19 [ label = "Site { name: \"7280 Westside Rd\", id: \"9c305b81-d273-4ed5-ae91-7ca83ef78799\", latitude: Some(31.922024), longitude: Some(-106.6224) }" ]
20 [ label = "Site { name: \"Oro Onions PoP\", id: \"4cfd270c-ec3c-4df8-8cf0-4a3031adb26b\", latitude: Some(31.85667), longitude: Some(-106.709366) }" ]
21 [ label = "Site { name: \"Medano Heights Apt 8\", id: \"5ace14aa-a838-4d1c-abf8-53bd96b1816c\", latitude: Some(31.87055), longitude: Some(-106.57533) }" ]
22 [ label = "Site { name: \"Medano Heights Apt 5\", id: \"ed0b9430-71c4-495a-81dc-3f09e00fd8cd\", latitude: Some(31.870543), longitude: Some(-106.576645) }" ]
23 [ label = "Site { name: \"412 Bellwoode\", id: \"8763cb6a-1e11-4038-b58f-d2a1b11845f2\", latitude: Some(31.890833), longitude: Some(-106.58559) }" ]
24 [ label = "Site { name: \"Appaloosa PoP\", id: \"e366b7ce-4779-470c-9edc-40413a8375a1\", latitude: Some(31.82079), longitude: Some(-106.591515) }" ]
25 [ label = "Site { name: \"Valley Acres\", id: \"dd8cf5ac-90e4-4032-8749-f342058344e4\", latitude: Some(31.929832), longitude: Some(-106.62389) }" ]
26 [ label = "Site { name: \"Canutillo\", id: \"30a1f385-eef2-417b-b4ef-ce98824c6fb6\", latitude: Some(31.893366), longitude: Some(-106.5853) }" ]
27 [ label = "Site { name: \"Santiago\", id: \"0d6d0350-474a-4b64-b444-ff7a100d07c3\", latitude: Some(31.94448), longitude: Some(-106.593475) }" ]
28 [ label = "Site { name: \"1395 Koogle PoP\", id: \"29472928-45a8-4bea-b65d-60c8760f4753\", latitude: Some(31.908194), longitude: Some(-106.67889) }" ]
29 [ label = "Site { name: \"Medano Heights Apt 3\", id: \"140ab861-d12f-4e71-96ba-2789721891b5\", latitude: Some(31.869995), longitude: Some(-106.57619) }" ]
30 [ label = "Site { name: \"Medano Heights Apt 2\", id: \"579ae80d-0cff-471e-bb49-e80c651b0132\", latitude: Some(31.869286), longitude: Some(-106.57539) }" ]
31 [ label = "Site { name: \"Admiral\", id: \"25b9445f-a8d3-45ec-976f-24550e198280\", latitude: Some(31.850914), longitude: Some(-106.70479) }" ]
32 [ label = "Site { name: \"Medano Heights Apt 6\", id: \"12d9f9fe-3445-4ba5-9389-4ac8b10e5a9d\", latitude: Some(31.870625), longitude: Some(-106.575905) }" ]
33 [ label = "Site { name: \"2049 Boy Scout\", id: \"8ebc8e2e-6117-40cb-9da9-948f69f6d825\", latitude: Some(31.808477), longitude: Some(-106.57116) }" ]
34 [ label = "Site { name: \"WestRedd Tower\", id: \"54314e0f-a30a-40f5-af79-5a10091fd0a1\", latitude: Some(31.861029), longitude: Some(-106.54946) }" ]
35 [ label = "Site { name: \"Butterfield\", id: \"665e71f2-4d07-4c5b-8457-6aaf92655857\", latitude: Some(31.823368), longitude: Some(-106.33805) }" ]
36 [ label = "Site { name: \"2800 Airport Road\", id: \"774f79c6-1356-48cf-b324-0a2bd67a9d7a\", latitude: Some(31.869122), longitude: Some(-106.69814) }" ]
37 [ label = "Site { name: \"Monte Del Sol\", id: \"30f74137-a59d-494f-b5b3-bee0877e539c\", latitude: Some(31.881372), longitude: Some(-106.55896) }" ]
38 [ label = "Site { name: \"MRE\", id: \"8acf2b30-b104-4d62-87cb-b57f861fd1c6\", latitude: Some(31.815521), longitude: Some(-106.48929) }" ]
39 [ label = "Site { name: \"7232 Rochester\", id: \"1652b68c-0908-4f5a-b9d6-4631dea26b67\", latitude: Some(31.854183), longitude: Some(-106.55559) }" ]
40 [ label = "Site { name: \"Sun Plaza\", id: \"2666860f-5b0e-4124-86dd-75b11a49e134\", latitude: Some(31.762056), longitude: Some(-106.47605) }" ]
41 [ label = "AccessPoint { name: \"NanoSwitch-Girlscout\", id: \"84317fc8-74c3-47cc-a8f1-adb57fad4b75\", site_name: \"2801 Girl Scout Lane\", download_mbps: 1000, upload_mbps: 1000 }" ]
42 [ label = "AccessPoint { name: \"MikroTik-WestRedd-ALERT\", id: \"fffa0f89-0b6c-4ddf-a6c7-a036307de161\", site_name: \"WestRedd\", download_mbps: 5000, upload_mbps: 5000 }" ]
43 [ label = "AccessPoint { name: \"JackRabbit_T\", id: \"5f8f20e7-b88f-449f-bd0d-cb0c028196b3\", site_name: \"7232 Rochester\", download_mbps: 328, upload_mbps: 71 }" ]
44 [ label = "AccessPoint { name: \"EPMPF400C_LaDobeToMonte\", id: \"8664884f-14c2-4253-962a-040338a4ad0e\", site_name: \"LaDobe\", download_mbps: 1000, upload_mbps: 1000 }" ]
45 [ label = "AccessPoint { name: \"LAP-1315LosPinos_SE\", id: \"2d972772-6e78-4353-a680-8882b12f1582\", site_name: \"Vinton\", download_mbps: 342, upload_mbps: 344 }" ]
46 [ label = "AccessPoint { name: \"SunPlaza-Floor4-Switch\", id: \"b9ede9b4-8dd6-4f46-878a-16ff7449bbed\", site_name: \"Sun Plaza\", download_mbps: 5000, upload_mbps: 5000 }" ]
47 [ label = "AccessPoint { name: \"Rochester-Roof-Switch\", id: \"ccae9b06-284b-4e39-865a-22ae83789e0c\", site_name: \"7232 Rochester\", download_mbps: 5000, upload_mbps: 5000 }" ]
48 [ label = "AccessPoint { name: \"JackRabbit_D\", id: \"9f3219a4-1f64-4c7e-80ba-37a37ecd7607\", site_name: \"WestRedd Tower\", download_mbps: 180, upload_mbps: 50 }" ]
49 [ label = "AccessPoint { name: \"F425_Monte_to_LaDobe\", id: \"5d5dcfb3-254a-42ae-8480-8a3ee10ce61c\", site_name: \"Monte Del Sol\", download_mbps: 1000, upload_mbps: 1000 }" ]
50 [ label = "AccessPoint { name: \"Rochester PacketFlux RackInjector\", id: \"049f9009-78ed-40e6-bbfa-999546098a13\", site_name: \"7232 Rochester\", download_mbps: 5000, upload_mbps: 5000 }" ]
51 [ label = "AccessPoint { name: \"NanoSwitch-1308DesiertoSeco\", id: \"d0447259-db26-4ce7-9f8f-58d915d66d17\", site_name: \"1308 Desierto Seco PoP\", download_mbps: 1000, upload_mbps: 1000 }" ]
52 [ label = "AccessPoint { name: \"FiberBox-MRE-2\", id: \"bf76a744-55ff-4a91-ae31-6691d47d657b\", site_name: \"MRE\", download_mbps: 5000, upload_mbps: 5000 }" ]
53 [ label = "AccessPoint { name: \"Core-SDWAN\", id: \"bcbac668-c34c-4729-acdc-7f9db429d480\", site_name: \"MDC El Paso\", download_mbps: 100, upload_mbps: 50 }" ]
54 [ label = "AccessPoint { name: \"Macarena Site Router\", id: \"00ca3a21-88b7-4896-8f6e-2de42ecd89d1\", site_name: \"Macarena\", download_mbps: 5000, upload_mbps: 5000 }" ]
55 [ label = "AccessPoint { name: \"4600C_MRE_To_ROCH\", id: \"73805387-414a-4e67-8302-9c4add6fd2bc\", site_name: \"MRE\", download_mbps: 5000, upload_mbps: 5000 }" ]
56 [ label = "AccessPoint { name: \"4600C_ROCH_To_MRE\", id: \"2f216b07-6379-4221-abf2-79ab6fdde445\", site_name: \"7232 Rochester\", download_mbps: 5000, upload_mbps: 5000 }" ]
57 [ label = "AccessPoint { name: \"NanoSwitch-2832Girlscout\", id: \"2ae6d489-2ee9-477e-9fc0-17b423b70a1a\", site_name: \"2832 Girlscout Lane PoP\", download_mbps: 1000, upload_mbps: 1000 }" ]
58 [ label = "AccessPoint { name: \"Rochester Switch\", id: \"f26c25b7-72d5-46ee-ba58-8aa9a2e7c2fd\", site_name: \"7232 Rochester\", download_mbps: 5000, upload_mbps: 5000 }" ]
59 [ label = "AccessPoint { name: \"MT-7280WestsideRd\", id: \"149947bc-a040-4c26-8533-e945a47f6fab\", site_name: \"7280 Westside Rd\", download_mbps: 300, upload_mbps: 30 }" ]
60 [ label = "AccessPoint { name: \"PowerBoxPro-Fescue\", id: \"a784adfb-9a67-4f06-a30f-fcdd5127579a\", site_name: \"FescuePoP\", download_mbps: 5000, upload_mbps: 5000 }" ]
61 [ label = "AccessPoint { name: \"PowerBoxPro-1395KooglePoP\", id: \"eeab0d04-a0e4-40f8-9431-b92d6b30be02\", site_name: \"1395 Koogle PoP\", download_mbps: 5000, upload_mbps: 5000 }" ]
62 [ label = "AccessPoint { name: \"SunPlaza-Floor7-Switch\", id: \"1624c9de-4d06-4f18-8d23-b6f4dc1386ad\", site_name: \"Sun Plaza\", download_mbps: 5000, upload_mbps: 5000 }" ]
63 [ label = "AccessPoint { name: \"JR_AP_KH_A\", id: \"6b5e7b1c-d9fb-4ad8-a2a8-ba53e76cde31\", site_name: \"175 Kittyhawk\", download_mbps: 262, upload_mbps: 126 }" ]
64 [ label = "AccessPoint { name: \"PowerBoxPro-Macarena\", id: \"31b81659-7697-4296-82a9-415b51a7001f\", site_name: \"Macarena\", download_mbps: 5000, upload_mbps: 5000 }" ]
65 [ label = "AccessPoint { name: \"Router-Vinton\", id: \"d3172daa-ce0c-4f1e-9830-a47c4a3a3594\", site_name: \"Vinton\", download_mbps: 5000, upload_mbps: 5000 }" ]
66 [ label = "AccessPoint { name: \"MRE Rack 10G Switch\", id: \"0c030ff3-aacd-46eb-8b7a-34d647a9b406\", site_name: \"MRE\", download_mbps: 5000, upload_mbps: 5000 }" ]
67 [ label = "AccessPoint { name: \"Switch-412Bellwoode-PoP\", id: \"2b51527f-0f47-43d3-9ab8-5ca25476d03b\", site_name: \"412 Bellwoode\", download_mbps: 1000, upload_mbps: 1000 }" ]
68 [ label = "AccessPoint { name: \"JackRabbit_A\", id: \"ed942bdd-2e23-47c6-8ce4-3cc94f6ad900\", site_name: \"WestRedd Tower\", download_mbps: 177, upload_mbps: 176 }" ]
69 [ label = "AccessPoint { name: \"NetBox-TuscanyToAdmiral\", id: \"3813b609-b432-41e4-a273-e7151c91b3bc\", site_name: \"Tuscany Ridge\", download_mbps: 5000, upload_mbps: 5000 }" ]
70 [ label = "AccessPoint { name: \"LBE-1300NVintonUnit3\", id: \"ca7e9d04-14ba-42e7-914f-394323e9d32a\", site_name: \"1300NVintonUnits3and4\", download_mbps: 222, upload_mbps: 224 }" ]
71 [ label = "AccessPoint { name: \"LBE-2832Girlscout\", id: \"41eeee89-1c08-4673-bcdd-3723fd29d340\", site_name: \"2832 Girlscout Lane PoP\", download_mbps: 200, upload_mbps: 207 }" ]
72 [ label = "AccessPoint { name: \"LTU-4005Appaloosa\", id: \"b9421fd2-5fdb-4c89-9cac-52887a251a6c\", site_name: \"Appaloosa PoP\", download_mbps: 200, upload_mbps: 56 }" ]
73 [ label = "AccessPoint { name: \"Core-WestRedd\", id: \"f54506dd-79a9-4f41-adab-58f7d07de1ad\", site_name: \"MDC El Paso\", download_mbps: 5000, upload_mbps: 5000 }" ]
74 [ label = "AccessPoint { name: \"SunPlaza-Floor6-Switch\", id: \"31aeb012-928a-47d9-b435-073fa30a85ed\", site_name: \"Sun Plaza\", download_mbps: 5000, upload_mbps: 5000 }" ]
75 [ label = "AccessPoint { name: \"JR_AP_MRE_D\", id: \"2763a7cc-a433-46bd-98a4-2bbfe3aea37f\", site_name: \"MRE\", download_mbps: 949, upload_mbps: 949 }" ]
76 [ label = "AccessPoint { name: \"MRE-SiteRouter\", id: \"897abef1-bf51-4bbd-8076-004f3c440f1c\", site_name: \"MRE\", download_mbps: 5000, upload_mbps: 5000 }" ]
77 [ label = "AccessPoint { name: \"JackRabbit_B\", id: \"ccd3e418-0a5b-48a4-8998-c81122b2bc52\", site_name: \"WestRedd Tower\", download_mbps: 172, upload_mbps: 106 }" ]
78 [ label = "AccessPoint { name: \"NetPower16P-OroOnionsPoP\", id: \"2a10bc2e-fe1f-4eeb-8dc2-e6979af11e87\", site_name: \"Oro Onions PoP\", download_mbps: 5000, upload_mbps: 5000 }" ]
79 [ label = "AccessPoint { name: \"LTU-412Bellwoode-AP\", id: \"9033429c-98f9-46ff-a534-01fcd4230c37\", site_name: \"412 Bellwoode\", download_mbps: 254, upload_mbps: 81 }" ]
80 [ label = "AccessPoint { name: \"JR_ST_AP_5_180_90\", id: \"079e3abf-5ad7-48aa-9dcf-4507892fabbc\", site_name: \"Santiago\", download_mbps: 273, upload_mbps: 327 }" ]
81 [ label = "AccessPoint { name: \"JR_AP_MRE_E\", id: \"d37bf63b-2d13-4bfc-92e1-371c79ebf917\", site_name: \"MRE\", download_mbps: 195, upload_mbps: 45 }" ]
82 [ label = "AccessPoint { name: \"JR_AP_TR_C\", id: \"3515e4da-6666-4965-b909-ea94e56c74e1\", site_name: \"Tuscany Ridge\", download_mbps: 300, upload_mbps: 70 }" ]
83 [ label = "AccessPoint { name: \"JackRabbit_L\", id: \"7569ece2-008f-4bc5-8933-ac6a29fb8d6d\", site_name: \"WestRedd Tower\", download_mbps: 188, upload_mbps: 167 }" ]
84 [ label = "AccessPoint { name: \"JackRabbit_G\", id: \"07479df5-2676-42c0-820d-a45292b92c93\", site_name: \"WestRedd Tower\", download_mbps: 129, upload_mbps: 80 }" ]
85 [ label = "AccessPoint { name: \"FiberBox-OroOnionsPoP\", id: \"1f02e8bd-8e7a-4e63-bf92-64ddd2d44b1c\", site_name: \"Oro Onions PoP\", download_mbps: 5000, upload_mbps: 5000 }" ]
86 [ label = "AccessPoint { name: \"WestRedd-SiteRouter\", id: \"2fc7c936-a4be-42bc-9f96-fdc22c23a5d6\", site_name: \"WestRedd\", download_mbps: 5000, upload_mbps: 5000 }" ]
87 [ label = "AccessPoint { name: \"SunPlaza-SiteRouter\", id: \"4999ae48-fde1-427a-ba9b-10b248a7864f\", site_name: \"Sun Plaza\", download_mbps: 5000, upload_mbps: 5000 }" ]
88 [ label = "AccessPoint { name: \"JR_AP_TR_B\", id: \"e02f6883-ebdb-4e15-a4a0-512e2b5f0883\", site_name: \"Tuscany Ridge\", download_mbps: 287, upload_mbps: 59 }" ]
89 [ label = "AccessPoint { name: \"Kittyhawk_to_2660\", id: \"919f00f8-5703-4467-aab5-88f361fcee84\", site_name: \"175 Kittyhawk\", download_mbps: 5000, upload_mbps: 5000 }" ]
90 [ label = "AccessPoint { name: \"LiteAP-LaDobe\", id: \"d8c1b0b7-7121-401d-a54d-705141cd7f15\", site_name: \"190 LaDobe PoP\", download_mbps: 148, upload_mbps: 124 }" ]
91 [ label = "AccessPoint { name: \"SunPlaza-Floor8-Switch\", id: \"13565d97-3f59-46fb-b0e4-dbbabf69a8b2\", site_name: \"Sun Plaza\", download_mbps: 5000, upload_mbps: 5000 }" ]
92 [ label = "AccessPoint { name: \"JR_AP_LD_B\", id: \"0339c9bc-a53b-4cb4-8259-c64d066669c9\", site_name: \"LaDobe\", download_mbps: 325, upload_mbps: 61 }" ]
93 [ label = "AccessPoint { name: \"JackRabbit_H\", id: \"bb1cca36-5bbb-4061-8dd2-1b87e9a9d1bf\", site_name: \"WestRedd Tower\", download_mbps: 225, upload_mbps: 50 }" ]
94 [ label = "AccessPoint { name: \"LBE-BoyScoutPoP\", id: \"04fd7619-9cc6-492f-98a8-cb2c407609a8\", site_name: \"2049 Boy Scout\", download_mbps: 400, upload_mbps: 425 }" ]
95 [ label = "AccessPoint { name: \"JackRabbit_E\", id: \"4f2464b1-3d08-4d39-8be0-42c0eeb95f69\", site_name: \"WestRedd Tower\", download_mbps: 225, upload_mbps: 50 }" ]
96 [ label = "AccessPoint { name: \"WestwindRedd_EdgePoint_1\", id: \"0b68ff0b-1411-405c-8662-fa5c955afe11\", site_name: \"WestRedd Tower\", download_mbps: 5000, upload_mbps: 5000 }" ]
97 [ label = "AccessPoint { name: \"PowerBoxPro-GatoPoP\", id: \"6e444858-14f3-406d-ba09-0912e782d623\", site_name: \"6360 Gato Rd PoP\", download_mbps: 1000, upload_mbps: 1000 }" ]
98 [ label = "AccessPoint { name: \"LTU-2801GirlScoutLane\", id: \"1a76bc06-03f3-4391-9b45-826adead27e8\", site_name: \"2801 Girl Scout Lane\", download_mbps: 330, upload_mbps: 71 }" ]
99 [ label = "AccessPoint { name: \"JR_AP_CT_A\", id: \"af8cae80-1790-4063-afc2-6f82cd212800\", site_name: \"Canutillo\", download_mbps: 283, upload_mbps: 87 }" ]
100 [ label = "AccessPoint { name: \"LBE-Vinton_NE\", id: \"2715e127-41b8-4236-a3e0-f74d20448ffd\", site_name: \"Vinton\", download_mbps: 3249, upload_mbps: 3249 }" ]
101 [ label = "AccessPoint { name: \"SiteRouter-Admiral\", id: \"a22b6075-9f6e-47e7-b734-f2c829109a03\", site_name: \"Admiral\", download_mbps: 5000, upload_mbps: 5000 }" ]
102 [ label = "AccessPoint { name: \"ICT_UPS_MRE\", id: \"bb8bd4b4-1be7-45cb-a01f-3f7889b1ccc5\", site_name: \"MRE\", download_mbps: 5000, upload_mbps: 5000 }" ]
103 [ label = "AccessPoint { name: \"LTU-ValleyAcres\", id: \"a1ae64fc-79c0-45f8-b1d7-e884b9160e4c\", site_name: \"Valley Acres\", download_mbps: 198, upload_mbps: 37 }" ]
104 [ label = "AccessPoint { name: \"LTU-2049BoyScout\", id: \"5c261c61-c27e-4208-919a-a1aa2d4808b9\", site_name: \"2049 Boy Scout\", download_mbps: 330, upload_mbps: 94 }" ]
105 [ label = "AccessPoint { name: \"NetPower16P-AppaloosaPoP\", id: \"422b3852-6d49-4847-8873-915707450c8b\", site_name: \"Appaloosa PoP\", download_mbps: 1000, upload_mbps: 1000 }" ]
106 [ label = "AccessPoint { name: \"JackRabbit_C\", id: \"a9347915-677e-4115-8938-06d6a7a931e2\", site_name: \"WestRedd Tower\", download_mbps: 211, upload_mbps: 189 }" ]
107 [ label = "AccessPoint { name: \"LTU-700Fescue\", id: \"e7c3b629-ea2b-41f2-aec1-29eb4ea8ccf6\", site_name: \"FescuePoP\", download_mbps: 276, upload_mbps: 75 }" ]
108 [ label = "AccessPoint { name: \"JR_AP_CT_D\", id: \"d9f0cedc-98aa-46b6-bbbe-9d8886f4cb4d\", site_name: \"Canutillo\", download_mbps: 300, upload_mbps: 50 }" ]
109 [ label = "AccessPoint { name: \"SunPlaza-Floor3-Switch\", id: \"6892544c-2586-4eb9-905a-141274dee1a4\", site_name: \"Sun Plaza\", download_mbps: 5000, upload_mbps: 5000 }" ]
110 [ label = "AccessPoint { name: \"GigaBeam_Medano_Apt7_To_Apt9\", id: \"67346c82-3093-4c19-bf11-414ba2092dfc\", site_name: \"Medano Heights Apt 7\", download_mbps: 1617, upload_mbps: 1617 }" ]
111 [ label = "AccessPoint { name: \"JR_AP_MRE_C\", id: \"4168d03a-013d-404d-9e10-2c49f8a8c6ff\", site_name: \"MRE\", download_mbps: 230, upload_mbps: 92 }" ]
112 [ label = "AccessPoint { name: \"EdgePoint-MRE-1\", id: \"5a13cb64-a4a0-4300-8550-bd0edca52914\", site_name: \"MRE\", download_mbps: 5000, upload_mbps: 5000 }" ]
113 [ label = "AccessPoint { name: \"GBE-1308DesiertoSeco\", id: \"0ea20e1a-e1ce-4487-8218-89f5301c5eda\", site_name: \"1308 Desierto Seco PoP\", download_mbps: 1395, upload_mbps: 1617 }" ]
114 [ label = "AccessPoint { name: \"JR_AP_TR_KG\", id: \"bad4dad0-e250-4844-908d-9977a2704ec0\", site_name: \"Tuscany Ridge\", download_mbps: 193, upload_mbps: 56 }" ]
115 [ label = "AccessPoint { name: \"JackRabbit_N\", id: \"76e6f502-8d6c-44e9-b978-baff24d9f434\", site_name: \"7232 Rochester\", download_mbps: 258, upload_mbps: 58 }" ]
116 [ label = "AccessPoint { name: \"airCube-LaDobeAlert\", id: \"768429d7-7903-4360-8d01-ac649ced45e0\", site_name: \"LaDobe\", download_mbps: 5000, upload_mbps: 5000 }" ]
117 [ label = "AccessPoint { name: \"FiberBox-MRE-1\", id: \"dd6dc666-e2f0-49cd-8a29-a8ceddc5d1fd\", site_name: \"MRE\", download_mbps: 10000, upload_mbps: 10000 }" ]
118 [ label = "AccessPoint { name: \"Enchanted (Site Router)\", id: \"3ab15580-d162-42ac-9b18-094d8d7bbd9c\", site_name: \"Enchanted\", download_mbps: 5000, upload_mbps: 5000 }" ]
119 [ label = "AccessPoint { name: \"LaDobe Camera\", id: \"f4cf7dc0-8d5b-41f0-bbe8-cce4dc49cb48\", site_name: \"LaDobe\", download_mbps: 5000, upload_mbps: 5000 }" ]
120 [ label = "AccessPoint { name: \"TrailerCity\", id: \"201b7b84-e5fe-46e7-b43f-3973ae5a3922\", site_name: \"TrailerCity\", download_mbps: 1200, upload_mbps: 1200 }" ]
121 [ label = "AccessPoint { name: \"SunPlaza-Floor2-Switch\", id: \"42f80d04-3a7a-4d88-869b-0f224b17f932\", site_name: \"Sun Plaza\", download_mbps: 5000, upload_mbps: 5000 }" ]
122 [ label = "AccessPoint { name: \"JR_AP_MT_60_A\", id: \"5184f200-d42c-4f48-b6f3-623b903cc1ab\", site_name: \"Monte Del Sol\", download_mbps: 1000, upload_mbps: 1000 }" ]
123 [ label = "AccessPoint { name: \"GigaBeam_Medano_Apt4_To_Apt6\", id: \"012e3874-71f9-4a0b-b696-c59c72119082\", site_name: \"Medano Heights Apt 4\", download_mbps: 1617, upload_mbps: 1617 }" ]
124 [ label = "AccessPoint { name: \"SunPlaza-Floor5-Switch\", id: \"dfb201f6-0159-4642-b69a-07b9ca8a459a\", site_name: \"Sun Plaza\", download_mbps: 5000, upload_mbps: 5000 }" ]
125 [ label = "AccessPoint { name: \"JackRabbit_P\", id: \"cbead119-b8b4-4fe1-9360-b3a9a582acc7\", site_name: \"7232 Rochester\", download_mbps: 298, upload_mbps: 70 }" ]
126 [ label = "AccessPoint { name: \"JR_AP_TR_WV1\", id: \"020b432d-0563-4bb2-9db6-e17f4de86fdf\", site_name: \"Tuscany Ridge\", download_mbps: 950, upload_mbps: 950 }" ]
127 [ label = "AccessPoint { name: \"JackRabbit_O\", id: \"22b8d93a-fe70-46f1-981e-a4861d2b4846\", site_name: \"7232 Rochester\", download_mbps: 290, upload_mbps: 73 }" ]
128 [ label = "AccessPoint { name: \"airCube-TuscanyRidgeAlert\", id: \"c913f8f1-a86a-41ec-ba81-3a7d4d83fffe\", site_name: \"Tuscany Ridge\", download_mbps: 5000, upload_mbps: 5000 }" ]
129 [ label = "AccessPoint { name: \"JR_AP_TC_C\", id: \"85532523-e400-430b-941a-d57858bba471\", site_name: \"TrailerCity\", download_mbps: 5000, upload_mbps: 5000 }" ]
130 [ label = "AccessPoint { name: \"JR_AP_CT_B\", id: \"b238866b-b082-4a0a-ab0b-63fbe2021678\", site_name: \"Canutillo\", download_mbps: 319, upload_mbps: 83 }" ]
131 [ label = "AccessPoint { name: \"JackRabbit_K\", id: \"a04ba682-4391-4512-8019-19d7bef23424\", site_name: \"WestRedd Tower\", download_mbps: 3249, upload_mbps: 3249 }" ]
132 [ label = "AccessPoint { name: \"JR_AP_RR_B\", id: \"a4a2bdc4-e135-44d8-bbd1-03d72e43fddb\", site_name: \"Appaloosa PoP\", download_mbps: 400, upload_mbps: 400 }" ]
133 [ label = "AccessPoint { name: \"UBNT EdgeSwitch\", id: \"485133df-fc31-4026-99d5-f34244a66314\", site_name: \"WestRedd Tower\", download_mbps: 5000, upload_mbps: 5000 }" ]
134 [ label = "AccessPoint { name: \"PowerBoxPro-BoyScout\", id: \"481bad9d-7f8b-4300-b6a3-d1d4c09f3949\", site_name: \"2049 Boy Scout\", download_mbps: 1000, upload_mbps: 1000 }" ]
135 [ label = "AccessPoint { name: \"JR_AP_TR_E\", id: \"ad6595e3-7dbf-407e-a998-dc46d53b6c9f\", site_name: \"Tuscany Ridge\", download_mbps: 127, upload_mbps: 108 }" ]
136 [ label = "AccessPoint { name: \"N7R-1300NVintonUnits3and4\", id: \"9afdf86d-fd3a-46f5-baca-bf7b7867411b\", site_name: \"1300NVintonUnits3and4\", download_mbps: 1000, upload_mbps: 1000 }" ]
137 [ label = "AccessPoint { name: \"SunPlaza-Floor9-Switch\", id: \"3736dae5-3c16-4963-89a1-38c660adf88a\", site_name: \"Sun Plaza\", download_mbps: 5000, upload_mbps: 5000 }" ]
138 [ label = "AccessPoint { name: \"EPMPF400C_CanutilloToLaDobe\", id: \"dc0c1f26-4fcc-4f8e-a996-fc7bf9a50c98\", site_name: \"Canutillo\", download_mbps: 5000, upload_mbps: 5000 }" ]
139 [ label = "AccessPoint { name: \"MedanoHeights_Apt8_EdgeSwitch18X\", id: \"36defd70-6a2a-4564-8894-655a4d3eea2b\", site_name: \"Medano Heights Apt 8\", download_mbps: 5000, upload_mbps: 5000 }" ]
140 [ label = "AccessPoint { name: \"NetPower16P-MRE\", id: \"deec1dd6-6995-4422-b3b7-111ccfa669cb\", site_name: \"MRE\", download_mbps: 10000, upload_mbps: 10000 }" ]
141 [ label = "AccessPoint { name: \"PTP_700Fescue_House\", id: \"3d816fd8-e05a-4849-86d5-b470b910b88d\", site_name: \"FescuePoP\", download_mbps: 191, upload_mbps: 193 }" ]
142 [ label = "AccessPoint { name: \"EdgeSwitch-TuscanyRidge\", id: \"0e1ad159-25da-4cea-b2bb-df15462a3770\", site_name: \"Tuscany Ridge\", download_mbps: 5000, upload_mbps: 5000 }" ]
143 [ label = "AccessPoint { name: \"EdgeSwitch-TuscanyRidge\", id: \"0e1ad159-25da-4cea-b2bb-df15462a3770\", site_name: \"Tuscany Ridge\", download_mbps: 5000, upload_mbps: 5000 }" ]
144 [ label = "AccessPoint { name: \"EdgeSwitch-TuscanyRidge\", id: \"0e1ad159-25da-4cea-b2bb-df15462a3770\", site_name: \"Tuscany Ridge\", download_mbps: 5000, upload_mbps: 5000 }" ]
145 [ label = "AccessPoint { name: \"EdgeSwitch-TuscanyRidge\", id: \"0e1ad159-25da-4cea-b2bb-df15462a3770\", site_name: \"Tuscany Ridge\", download_mbps: 5000, upload_mbps: 5000 }" ]
146 [ label = "AccessPoint { name: \"JackRabbit_M\", id: \"767762fe-b693-4ecf-b909-fec441433079\", site_name: \"7232 Rochester\", download_mbps: 345, upload_mbps: 64 }" ]
147 [ label = "AccessPoint { name: \"MRE NVR (Power Outage Alert)\", id: \"6e73730c-8adf-4f6d-bf99-1ca890046304\", site_name: \"MRE\", download_mbps: 5000, upload_mbps: 5000 }" ]
148 [ label = "AccessPoint { name: \"MedanoHeights_Apt9_EdgeSwitch18X\", id: \"d4dff542-acaf-4b9d-8a7f-6672e3c3ca5e\", site_name: \"Medano Heights Apt 9\", download_mbps: 5000, upload_mbps: 5000 }" ]
149 [ label = "AccessPoint { name: \"LTU-190LadobeCt\", id: \"d9a4db03-37b8-4342-86cc-1b59d14ff746\", site_name: \"190 LaDobe PoP\", download_mbps: 131, upload_mbps: 36 }" ]
150 [ label = "AccessPoint { name: \"OroOnionsPoP-SiteRouter\", id: \"b4a3dbc0-3ea5-4350-afe2-3c3de9605592\", site_name: \"Oro Onions PoP\", download_mbps: 5000, upload_mbps: 5000 }" ]
151 [ label = "AccessPoint { name: \"LTU-412BellwoodeAve\", id: \"ffbbbdf8-0811-4e17-a9af-f01ae6189092\", site_name: \"412 Bellwoode\", download_mbps: 340, upload_mbps: 71 }" ]
152 [ label = "AccessPoint { name: \"JackRabbit_Q\", id: \"e6521f7b-1878-4aff-b16b-772e68e904b5\", site_name: \"7232 Rochester\", download_mbps: 322, upload_mbps: 63 }" ]
153 [ label = "AccessPoint { name: \"JR_AP_CT_C\", id: \"f9116834-d3ff-4d2e-b3aa-bb570c8e6991\", site_name: \"Canutillo\", download_mbps: 322, upload_mbps: 80 }" ]
154 [ label = "AccessPoint { name: \"JR_AP_EC_A\", id: \"32cc8c5e-95c9-4762-a6be-08d7c1125647\", site_name: \"Enchanted\", download_mbps: 1000, upload_mbps: 1000 }" ]
155 [ label = "AccessPoint { name: \"WestwindRedd_EdgePoint_4\", id: \"575c3da4-c9d7-46a5-8fe7-1f8dc8c85c4a\", site_name: \"WestRedd Tower\", download_mbps: 5000, upload_mbps: 5000 }" ]
156 [ label = "AccessPoint { name: \"WavePro-MRE-To-ClayCo-Connex\", id: \"9f857607-080b-40aa-b099-1a833ba667e5\", site_name: \"MRE\", download_mbps: 5000, upload_mbps: 5000 }" ]
157 [ label = "AccessPoint { name: \"NetPower16P-429Sonaran\", id: \"e97caedb-30ca-4f27-b15e-a43c0b59238c\", site_name: \"Canutillo\", download_mbps: 5000, upload_mbps: 5000 }" ]
158 [ label = "AccessPoint { name: \"JR_AP_LD_C\", id: \"4f65e8d3-dee7-49c8-8691-1dbd7cc7e8e9\", site_name: \"LaDobe\", download_mbps: 255, upload_mbps: 56 }" ]
159 [ label = "AccessPoint { name: \"NP16-Santiago\", id: \"3561754c-5355-439b-bd60-6753f91bae0d\", site_name: \"Santiago\", download_mbps: 5000, upload_mbps: 5000 }" ]
160 [ label = "AccessPoint { name: \"JackRabbit-Rochester-MikroTik\", id: \"21edb52c-5aeb-42b3-a28f-8abc22f5829a\", site_name: \"7232 Rochester\", download_mbps: 5000, upload_mbps: 5000 }" ]
161 [ label = "AccessPoint { name: \"JR_AP_LD_D\", id: \"5a741571-255f-4413-ad88-c7191de13721\", site_name: \"LaDobe\", download_mbps: 226, upload_mbps: 40 }" ]
162 [ label = "AccessPoint { name: \"LTU-175Kittyhawk\", id: \"0322c3f7-3758-4cc2-a15d-e4f92fce3ca6\", site_name: \"175 Kittyhawk\", download_mbps: 134, upload_mbps: 129 }" ]
163 [ label = "AccessPoint { name: \"JR_AP_TR_D\", id: \"3d1909fc-e660-43af-8e1b-aedc124bd85f\", site_name: \"Tuscany Ridge\", download_mbps: 338, upload_mbps: 84 }" ]
164 [ label = "AccessPoint { name: \"GigaBeam_Medano_Apt6_To_Apt4\", id: \"426f33ae-ec7d-4966-9b57-2ffe9f7f056f\", site_name: \"Medano Heights Apt 6\", download_mbps: 1617, upload_mbps: 1617 }" ]
165 [ label = "AccessPoint { name: \"NP16P-Kittyhawk\", id: \"18a7d6e3-3402-4ea9-ab6f-570d179d6574\", site_name: \"175 Kittyhawk\", download_mbps: 1000, upload_mbps: 1000 }" ]
166 [ label = "AccessPoint { name: \"MDC-Edge-A\", id: \"9543fa9b-93e9-4332-a135-78f6f774a169\", site_name: \"MDC El Paso\", download_mbps: 5000, upload_mbps: 5000 }" ]
167 [ label = "AccessPoint { name: \"NetPower16P-Enchanted\", id: \"431cfe17-054f-47de-a033-040634ae6c26\", site_name: \"Enchanted\", download_mbps: 5000, upload_mbps: 5000 }" ]
168 [ label = "AccessPoint { name: \"JackRabbit_I\", id: \"57c26f68-3f22-4d0a-89ca-1f9cd91a2411\", site_name: \"WestRedd Tower\", download_mbps: 3249, upload_mbps: 3249 }" ]
169 [ label = "AccessPoint { name: \"JR_AP_RR_A\", id: \"04fbd5f8-e2f3-4a04-a5b3-ae53c7e84ff4\", site_name: \"Appaloosa PoP\", download_mbps: 100, upload_mbps: 100 }" ]
170 [ label = "AccessPoint { name: \"Switch-ValleyAcres\", id: \"32494fb8-e267-4a08-9e3f-43ec9477f6ba\", site_name: \"Valley Acres\", download_mbps: 1000, upload_mbps: 1000 }" ]
171 [ label = "AccessPoint { name: \"EdgePoint-LaDobe\", id: \"1a1faa7f-b991-45c2-b298-661b408371c4\", site_name: \"LaDobe\", download_mbps: 5000, upload_mbps: 5000 }" ]
172 [ label = "AccessPoint { name: \"JR_AP_MRE_A\", id: \"c6618db7-f463-43ce-a46a-41de152c4abf\", site_name: \"MRE\", download_mbps: 219, upload_mbps: 68 }" ]
173 [ label = "AccessPoint { name: \"EPMPF400C-LaDobeToCanutillo\", id: \"993d2708-0d42-4470-aea6-436483274e69\", site_name: \"LaDobe\", download_mbps: 1000, upload_mbps: 1000 }" ]
174 [ label = "AccessPoint { name: \"LCO-2832Girlscout\", id: \"e3ba0f3a-cddc-477e-92a1-902bb1a6f67b\", site_name: \"2832 Girlscout Lane PoP\", download_mbps: 198, upload_mbps: 220 }" ]
175 [ label = "AccessPoint { name: \"GigaBeam_Medano_Apt3_To_Apt5\", id: \"1b058361-bf18-42d3-8a2d-0ad34e6bbd26\", site_name: \"Medano Heights Apt 3\", download_mbps: 5000, upload_mbps: 5000 }" ]
176 [ label = "AccessPoint { name: \"Loco_1395Koogle_To_RV\", id: \"5d6b6101-8347-4e0c-ba92-4ee94d101242\", site_name: \"1395 Koogle PoP\", download_mbps: 83, upload_mbps: 109 }" ]
177 [ label = "AccessPoint { name: \"PowerBoxPro-LaDobe\", id: \"5eccb6e9-0d3d-42b2-8348-f406e36b3367\", site_name: \"190 LaDobe PoP\", download_mbps: 1000, upload_mbps: 1000 }" ]
178 [ label = "AccessPoint { name: \"GigaBeam_Medano_Apt9_To_Apt7\", id: \"56e5c8bc-be36-4ab4-8fc5-9a184a0fda15\", site_name: \"Medano Heights Apt 9\", download_mbps: 1409, upload_mbps: 1617 }" ]
179 [ label = "AccessPoint { name: \"JR_AP_TC_A\", id: \"d10d7456-c3df-4b50-a4d9-5596dc7619c1\", site_name: \"TrailerCity\", download_mbps: 5000, upload_mbps: 5000 }" ]
180 [ label = "AccessPoint { name: \"JackRabbit_S\", id: \"d39127a6-0cfe-43d3-bc47-441faa98e9f2\", site_name: \"7232 Rochester\", download_mbps: 303, upload_mbps: 60 }" ]
181 [ label = "AccessPoint { name: \"JR_AP_MRE_B\", id: \"906eadcb-45fd-4e1e-8cb9-bb4efab1f79f\", site_name: \"MRE\", download_mbps: 291, upload_mbps: 73 }" ]
182 [ label = "AccessPoint { name: \"JR_AP_TR_G\", id: \"95a1b763-d7d2-4d79-ac97-7f77e83a8441\", site_name: \"Tuscany Ridge\", download_mbps: 227, upload_mbps: 57 }" ]
183 [ label = "AccessPoint { name: \"MedanoHeights_Apt6_EdgeSwitch18X\", id: \"f95af296-d004-4a0a-aa2d-f19dd125ecc7\", site_name: \"Medano Heights Apt 6\", download_mbps: 5000, upload_mbps: 5000 }" ]
184 [ label = "AccessPoint { name: \"LTU-7280WestsideRd\", id: \"4b9ee4ab-7d64-4ad3-8463-f58f280410c5\", site_name: \"7280 Westside Rd\", download_mbps: 406, upload_mbps: 47 }" ]
185 [ label = "AccessPoint { name: \"WavePro-TuscanyToBinational\", id: \"37192d82-1f9a-4e30-acbe-f881be66fc39\", site_name: \"Tuscany Ridge\", download_mbps: 1751, upload_mbps: 1617 }" ]
186 [ label = "AccessPoint { name: \"JR_AP_TC_B\", id: \"ca401111-a09a-439c-bda9-c6e864b53b5c\", site_name: \"TrailerCity\", download_mbps: 1000, upload_mbps: 1000 }" ]
187 [ label = "AccessPoint { name: \"UISP-S-Plus B76\", id: \"88e0c8a4-d089-427c-8f87-08e68ee8dae8\", site_name: \"TrailerCity\", download_mbps: 5000, upload_mbps: 5000 }" ]
188 [ label = "AccessPoint { name: \"ButterfieldSwitch\", id: \"59ef8c48-1162-48a8-90ba-d62969709ca1\", site_name: \"Butterfield\", download_mbps: 5000, upload_mbps: 5000 }" ]
189 [ label = "AccessPoint { name: \"MedanoHeights_Apt5_EdgeSwitch18X\", id: \"e17c4b16-5470-4541-b7f7-0de2f57e4744\", site_name: \"Medano Heights Apt 5\", download_mbps: 5000, upload_mbps: 5000 }" ]
190 [ label = "AccessPoint { name: \"MedanoHeights_Apt7_EdgeSwitch18X\", id: \"0d9543eb-3f11-4a94-b88a-ec0153b11c4e\", site_name: \"Medano Heights Apt 7\", download_mbps: 5000, upload_mbps: 5000 }" ]
191 [ label = "AccessPoint { name: \"GigaBeam_Medano_Apt3_To_Apt2\", id: \"a6297092-ce4a-4849-bffe-a1cdc3018285\", site_name: \"Medano Heights Apt 3\", download_mbps: 1617, upload_mbps: 1617 }" ]
192 [ label = "AccessPoint { name: \"GigaBeam_Medano_Apt2_To_Apt3\", id: \"329113bb-8fc0-4ba4-8c1f-72499945aca5\", site_name: \"Medano Heights Apt 2\", download_mbps: 1591, upload_mbps: 1617 }" ]
193 [ label = "GeneratedSite { name: \"Orphans\" }" ]
194 [ label = "AccessPoint { name: \"EdgeSwitch-MRE-2\", id: \"7b292e18-e535-49e3-b1b5-1555c83fb530\", site_name: \"MRE\", download_mbps: 5000, upload_mbps: 5000 }" ]
195 [ label = "AccessPoint { name: \"JR_AP_VA_A\", id: \"dbdce68f-7b16-47a3-98c2-844f7fba1b45\", site_name: \"Valley Acres\", download_mbps: 230, upload_mbps: 75 }" ]
196 [ label = "AccessPoint { name: \"EdgePoint-MonteDelSol\", id: \"65a70e28-92b0-4cf9-8fa6-414fba4aa418\", site_name: \"Monte Del Sol\", download_mbps: 5000, upload_mbps: 5000 }" ]
197 [ label = "AccessPoint { name: \"MedanoHeights_Apt3_EdgeSwitch18X\", id: \"117b3439-fb0a-475c-8495-ce995aed9686\", site_name: \"Medano Heights Apt 3\", download_mbps: 5000, upload_mbps: 5000 }" ]
198 [ label = "AccessPoint { name: \"MedanoHeights_Apt3_EdgeSwitch18X\", id: \"117b3439-fb0a-475c-8495-ce995aed9686\", site_name: \"Medano Heights Apt 3\", download_mbps: 5000, upload_mbps: 5000 }" ]
199 [ label = "AccessPoint { name: \"EPS16-2800AirportRd\", id: \"b71e77c3-0c41-4672-a55d-75c634461fb5\", site_name: \"2800 Airport Road\", download_mbps: 5000, upload_mbps: 5000 }" ]
200 [ label = "AccessPoint { name: \"GBE-8to7\", id: \"616d98d0-1e19-43b1-96d5-a17fb4cb4d29\", site_name: \"Medano Heights Apt 8\", download_mbps: 1413, upload_mbps: 1617 }" ]
201 [ label = "AccessPoint { name: \"LTU-1395Koogle\", id: \"1864ff29-23a5-46a1-9ac5-9954f096beae\", site_name: \"1395 Koogle PoP\", download_mbps: 196, upload_mbps: 55 }" ]
202 [ label = "AccessPoint { name: \"JR_AP_OO_A\", id: \"efad713b-6d77-43b9-b129-f77c5ed0fb28\", site_name: \"Oro Onions PoP\", download_mbps: 1000, upload_mbps: 1000 }" ]
203 [ label = "AccessPoint { name: \"JR_AP_TR_F\", id: \"342f8bc0-af9c-44c4-a669-bb7ae4fc00a4\", site_name: \"Tuscany Ridge\", download_mbps: 330, upload_mbps: 63 }" ]
204 [ label = "AccessPoint { name: \"JR_AP_MT_A\", id: \"0f81cf09-246e-4d06-8354-6a815b7cb202\", site_name: \"Monte Del Sol\", download_mbps: 360, upload_mbps: 83 }" ]
205 [ label = "AccessPoint { name: \"GigaBeam_Medano_Apt5_To_Apt3\", id: \"e4baac95-6cc7-4679-afbd-032d70080500\", site_name: \"Medano Heights Apt 5\", download_mbps: 1574, upload_mbps: 1617 }" ]
206 [ label = "AccessPoint { name: \"AF5XHD-2800AirportRd\", id: \"569b8f1d-53a9-464b-ab9e-ef245934b753\", site_name: \"2800 Airport Road\", download_mbps: 134, upload_mbps: 129 }" ]
207 [ label = "AccessPoint { name: \"JR_AP_MRE_60_NW\", id: \"7032424a-754c-4410-ab47-c43d864e2b94\", site_name: \"MRE\", download_mbps: 2156, upload_mbps: 1751 }" ]
208 [ label = "AccessPoint { name: \"JR_AP_MRE_60_SW\", id: \"c926a6f2-b92e-4491-92fd-a8004abcacb2\", site_name: \"MRE\", download_mbps: 1000, upload_mbps: 875 }" ]
209 [ label = "AccessPoint { name: \"LBE-GatoRdPoP\", id: \"0332304e-c62d-4ae2-9400-03da8d5ce80b\", site_name: \"6360 Gato Rd PoP\", download_mbps: 196, upload_mbps: 196 }" ]
210 [ label = "AccessPoint { name: \"MedanoHeights_Apt4_EdgeSwitch18X\", id: \"1a24ceca-0323-4abe-99ed-b989901f881e\", site_name: \"Medano Heights Apt 4\", download_mbps: 5000, upload_mbps: 5000 }" ]
211 [ label = "AccessPoint { name: \"LTU-6360GatoRd\", id: \"572aafc1-0acd-416c-b556-3e7a0686fd5f\", site_name: \"6360 Gato Rd PoP\", download_mbps: 289, upload_mbps: 87 }" ]
212 [ label = "AccessPoint { name: \"MedanoHeights_Apt2_EdgeSwitch18X\", id: \"a4442c18-8a6b-40c0-a6c5-f4b22a5b8274\", site_name: \"Medano Heights Apt 2\", download_mbps: 5000, upload_mbps: 5000 }" ]
213 [ label = "AccessPoint { name: \"LTU-1308DesiertoSeco\", id: \"21913296-5bf5-43f3-b4e1-921e742ccc5f\", site_name: \"1308 Desierto Seco PoP\", download_mbps: 406, upload_mbps: 94 }" ]
214 [ label = "AccessPoint { name: \"LiteAP-2801Girlscout\", id: \"f703c5a9-31ba-4ead-b73c-b5f6ffe0c95f\", site_name: \"2801 Girl Scout Lane\", download_mbps: 296, upload_mbps: 276 }" ]
215 [ label = "AccessPoint { name: \"JR_AP_GS_S\", id: \"cf52a6ef-86f0-4cb4-9d5c-bd27fd321bec\", site_name: \"2801 Girl Scout Lane\", download_mbps: 130, upload_mbps: 78 }" ]
216 [ label = "AccessPoint { name: \"LTU-Santiago\", id: \"1f8aa750-7960-4695-905c-fb580a8fa58b\", site_name: \"Santiago\", download_mbps: 244, upload_mbps: 47 }" ]
217 [ label = "AccessPoint { name: \"JackRabbit_R\", id: \"d96da0d5-c79b-4f69-a94b-3df1cf88167a\", site_name: \"7232 Rochester\", download_mbps: 280, upload_mbps: 80 }" ]
218 [ label = "AccessPoint { name: \"JackRabbit_J\", id: \"3d14b959-60f7-4281-80c0-b7f229cf763f\", site_name: \"WestRedd Tower\", download_mbps: 194, upload_mbps: 105 }" ]
41 -> 12 [ ]
12 -> 41 [ ]
42 -> 1 [ ]
1 -> 42 [ ]
71 -> 214 [ ]
214 -> 71 [ ]
44 -> 2 [ ]
2 -> 44 [ ]
45 -> 8 [ ]
8 -> 45 [ ]
46 -> 40 [ ]
40 -> 46 [ ]
47 -> 39 [ ]
39 -> 47 [ ]
48 -> 34 [ ]
34 -> 48 [ ]
49 -> 37 [ ]
37 -> 49 [ ]
50 -> 39 [ ]
39 -> 50 [ ]
51 -> 6 [ ]
6 -> 51 [ ]
52 -> 38 [ ]
38 -> 52 [ ]
53 -> 14 [ ]
14 -> 53 [ ]
54 -> 0 [ ]
0 -> 54 [ ]
55 -> 38 [ ]
38 -> 55 [ ]
56 -> 39 [ ]
39 -> 56 [ ]
57 -> 5 [ ]
5 -> 57 [ ]
58 -> 39 [ ]
39 -> 58 [ ]
59 -> 19 [ ]
19 -> 59 [ ]
60 -> 15 [ ]
15 -> 60 [ ]
61 -> 28 [ ]
28 -> 61 [ ]
62 -> 40 [ ]
40 -> 62 [ ]
63 -> 4 [ ]
4 -> 63 [ ]
64 -> 0 [ ]
0 -> 64 [ ]
65 -> 8 [ ]
8 -> 65 [ ]
66 -> 38 [ ]
38 -> 66 [ ]
67 -> 23 [ ]
23 -> 67 [ ]
68 -> 34 [ ]
34 -> 68 [ ]
69 -> 9 [ ]
9 -> 69 [ ]
70 -> 11 [ ]
11 -> 70 [ ]
71 -> 5 [ ]
5 -> 71 [ ]
149 -> 114 [ ]
114 -> 149 [ ]
73 -> 14 [ ]
14 -> 73 [ ]
74 -> 40 [ ]
40 -> 74 [ ]
206 -> 135 [ ]
139 -> 190 [ ]
76 -> 38 [ ]
38 -> 76 [ ]
77 -> 34 [ ]
34 -> 77 [ ]
78 -> 20 [ ]
20 -> 78 [ ]
79 -> 23 [ ]
23 -> 79 [ ]
80 -> 27 [ ]
27 -> 80 [ ]
81 -> 38 [ ]
38 -> 81 [ ]
82 -> 9 [ ]
9 -> 82 [ ]
83 -> 34 [ ]
34 -> 83 [ ]
84 -> 34 [ ]
34 -> 84 [ ]
85 -> 20 [ ]
20 -> 85 [ ]
86 -> 1 [ ]
1 -> 86 [ ]
87 -> 40 [ ]
40 -> 87 [ ]
76 -> 120 [ ]
153 -> 151 [ ]
89 -> 4 [ ]
4 -> 89 [ ]
90 -> 13 [ ]
13 -> 90 [ ]
91 -> 40 [ ]
40 -> 91 [ ]
92 -> 2 [ ]
2 -> 92 [ ]
93 -> 34 [ ]
34 -> 93 [ ]
162 -> 135 [ ]
184 -> 92 [ ]
95 -> 34 [ ]
34 -> 95 [ ]
96 -> 34 [ ]
34 -> 96 [ ]
97 -> 18 [ ]
18 -> 97 [ ]
98 -> 12 [ ]
12 -> 98 [ ]
99 -> 26 [ ]
26 -> 99 [ ]
100 -> 8 [ ]
8 -> 100 [ ]
101 -> 31 [ ]
31 -> 101 [ ]
102 -> 38 [ ]
38 -> 102 [ ]
103 -> 25 [ ]
25 -> 103 [ ]
73 -> 86 [ ]
163 -> 211 [ ]
105 -> 24 [ ]
24 -> 105 [ ]
106 -> 34 [ ]
34 -> 106 [ ]
107 -> 15 [ ]
15 -> 107 [ ]
108 -> 26 [ ]
26 -> 108 [ ]
109 -> 40 [ ]
40 -> 109 [ ]
87 -> 73 [ ]
73 -> 87 [ ]
111 -> 38 [ ]
38 -> 111 [ ]
112 -> 38 [ ]
38 -> 112 [ ]
113 -> 6 [ ]
6 -> 113 [ ]
114 -> 9 [ ]
9 -> 114 [ ]
2 -> 37 [ ]
9 -> 37 [ ]
116 -> 2 [ ]
2 -> 116 [ ]
117 -> 38 [ ]
38 -> 117 [ ]
118 -> 3 [ ]
3 -> 118 [ ]
119 -> 2 [ ]
2 -> 119 [ ]
120 -> 16 [ ]
16 -> 120 [ ]
121 -> 40 [ ]
40 -> 121 [ ]
122 -> 37 [ ]
37 -> 122 [ ]
123 -> 7 [ ]
7 -> 123 [ ]
124 -> 40 [ ]
40 -> 124 [ ]
125 -> 39 [ ]
39 -> 125 [ ]
126 -> 9 [ ]
9 -> 126 [ ]
127 -> 39 [ ]
39 -> 127 [ ]
128 -> 9 [ ]
9 -> 128 [ ]
3 -> 2 [ ]
8 -> 0 [ ]
130 -> 26 [ ]
26 -> 130 [ ]
131 -> 34 [ ]
34 -> 131 [ ]
132 -> 24 [ ]
24 -> 132 [ ]
133 -> 34 [ ]
34 -> 133 [ ]
134 -> 33 [ ]
33 -> 134 [ ]
135 -> 9 [ ]
9 -> 135 [ ]
136 -> 11 [ ]
11 -> 136 [ ]
137 -> 40 [ ]
40 -> 137 [ ]
138 -> 26 [ ]
26 -> 138 [ ]
139 -> 21 [ ]
21 -> 139 [ ]
140 -> 38 [ ]
38 -> 140 [ ]
141 -> 15 [ ]
15 -> 141 [ ]
142 -> 9 [ ]
9 -> 142 [ ]
143 -> 9 [ ]
9 -> 143 [ ]
144 -> 9 [ ]
9 -> 144 [ ]
145 -> 9 [ ]
9 -> 145 [ ]
146 -> 39 [ ]
39 -> 146 [ ]
147 -> 38 [ ]
38 -> 147 [ ]
148 -> 17 [ ]
17 -> 148 [ ]
149 -> 13 [ ]
13 -> 149 [ ]
150 -> 20 [ ]
20 -> 150 [ ]
151 -> 23 [ ]
23 -> 151 [ ]
152 -> 39 [ ]
39 -> 152 [ ]
151 -> 153 [ ]
120 -> 76 [ ]
1 -> 34 [ ]
9 -> 1 [ ]
155 -> 34 [ ]
34 -> 155 [ ]
211 -> 163 [ ]
107 -> 195 [ ]
157 -> 26 [ ]
26 -> 157 [ ]
158 -> 2 [ ]
2 -> 158 [ ]
159 -> 27 [ ]
27 -> 159 [ ]
160 -> 39 [ ]
39 -> 160 [ ]
20 -> 31 [ ]
38 -> 39 [ ]
110 -> 178 [ ]
195 -> 107 [ ]
163 -> 9 [ ]
9 -> 163 [ ]
164 -> 32 [ ]
32 -> 164 [ ]
165 -> 4 [ ]
4 -> 165 [ ]
166 -> 14 [ ]
14 -> 166 [ ]
178 -> 110 [ ]
191 -> 192 [ ]
168 -> 34 [ ]
34 -> 168 [ ]
169 -> 24 [ ]
24 -> 169 [ ]
170 -> 25 [ ]
25 -> 170 [ ]
171 -> 2 [ ]
2 -> 171 [ ]
172 -> 38 [ ]
38 -> 172 [ ]
173 -> 2 [ ]
2 -> 173 [ ]
174 -> 5 [ ]
5 -> 174 [ ]
175 -> 29 [ ]
29 -> 175 [ ]
176 -> 28 [ ]
28 -> 176 [ ]
177 -> 13 [ ]
13 -> 177 [ ]
193 -> 1 [ ]
103 -> 88 [ ]
70 -> 45 [ ]
45 -> 70 [ ]
180 -> 39 [ ]
39 -> 180 [ ]
135 -> 162 [ ]
92 -> 184 [ ]
201 -> 114 [ ]
114 -> 201 [ ]
190 -> 139 [ ]
135 -> 206 [ ]
184 -> 19 [ ]
19 -> 184 [ ]
185 -> 9 [ ]
9 -> 185 [ ]
186 -> 16 [ ]
16 -> 186 [ ]
187 -> 16 [ ]
16 -> 187 [ ]
188 -> 35 [ ]
35 -> 188 [ ]
189 -> 22 [ ]
22 -> 189 [ ]
190 -> 10 [ ]
10 -> 190 [ ]
164 -> 123 [ ]
123 -> 164 [ ]
192 -> 30 [ ]
30 -> 192 [ ]
213 -> 203 [ ]
203 -> 213 [ ]
194 -> 38 [ ]
38 -> 194 [ ]
182 -> 72 [ ]
88 -> 103 [ ]
196 -> 37 [ ]
37 -> 196 [ ]
197 -> 29 [ ]
29 -> 197 [ ]
198 -> 29 [ ]
29 -> 198 [ ]
199 -> 36 [ ]
36 -> 199 [ ]
200 -> 21 [ ]
21 -> 200 [ ]
201 -> 28 [ ]
28 -> 201 [ ]
1 -> 193 [ ]
72 -> 182 [ ]
203 -> 9 [ ]
9 -> 203 [ ]
193 -> 35 [ ]
35 -> 193 [ ]
29 -> 39 [ ]
29 -> 10 [ ]
206 -> 36 [ ]
36 -> 206 [ ]
207 -> 38 [ ]
38 -> 207 [ ]
208 -> 38 [ ]
38 -> 208 [ ]
7 -> 29 [ ]
29 -> 7 [ ]
39 -> 31 [ ]
39 -> 1 [ ]
211 -> 18 [ ]
18 -> 211 [ ]
31 -> 20 [ ]
39 -> 38 [ ]
213 -> 6 [ ]
6 -> 213 [ ]
214 -> 12 [ ]
12 -> 214 [ ]
215 -> 12 [ ]
12 -> 215 [ ]
216 -> 27 [ ]
27 -> 216 [ ]
217 -> 39 [ ]
39 -> 217 [ ]
26 -> 2 [ ]
31 -> 9 [ ]
43 -> 39 [ ]
39 -> 43 [ ]
72 -> 24 [ ]
24 -> 72 [ ]
75 -> 38 [ ]
38 -> 75 [ ]
88 -> 9 [ ]
9 -> 88 [ ]
94 -> 33 [ ]
33 -> 94 [ ]
104 -> 33 [ ]
33 -> 104 [ ]
110 -> 10 [ ]
10 -> 110 [ ]
115 -> 39 [ ]
39 -> 115 [ ]
129 -> 16 [ ]
16 -> 129 [ ]
153 -> 26 [ ]
26 -> 153 [ ]
154 -> 3 [ ]
3 -> 154 [ ]
156 -> 38 [ ]
38 -> 156 [ ]
161 -> 2 [ ]
2 -> 161 [ ]
162 -> 4 [ ]
4 -> 162 [ ]
37 -> 9 [ ]
37 -> 2 [ ]
178 -> 17 [ ]
17 -> 178 [ ]
179 -> 16 [ ]
16 -> 179 [ ]
181 -> 38 [ ]
38 -> 181 [ ]
182 -> 9 [ ]
9 -> 182 [ ]
1 -> 9 [ ]
34 -> 1 [ ]
191 -> 29 [ ]
29 -> 191 [ ]
2 -> 0 [ ]
16 -> 38 [ ]
195 -> 25 [ ]
25 -> 195 [ ]
202 -> 20 [ ]
20 -> 202 [ ]
204 -> 37 [ ]
37 -> 204 [ ]
205 -> 22 [ ]
22 -> 205 [ ]
209 -> 18 [ ]
18 -> 209 [ ]
210 -> 7 [ ]
7 -> 210 [ ]
212 -> 30 [ ]
30 -> 212 [ ]
218 -> 34 [ ]
34 -> 218 [ ]
167 -> 3 [ ]
3 -> 167 [ ]
183 -> 32 [ ]
32 -> 183 [ ]
0 -> 8 [ ]
2 -> 3 [ ]
0 -> 2 [ ]
38 -> 16 [ ]
175 -> 205 [ ]
205 -> 175 [ ]
92 -> 216 [ ]
216 -> 92 [ ]
217 -> 98 [ ]
98 -> 217 [ ]
1 -> 39 [ ]
31 -> 39 [ ]
192 -> 191 [ ]
86 -> 73 [ ]
2 -> 26 [ ]
9 -> 31 [ ]
217 -> 104 [ ]
104 -> 217 [ ]
10 -> 29 [ ]
39 -> 29 [ ]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

@@ -471,10 +471,19 @@ mod tests {
);
assert!(shaped_devices.is_empty());
let tower_site = network_json.get("Tower Site").and_then(|v| v.as_object()).unwrap();
let site_children = tower_site.get("children").and_then(|v| v.as_object()).unwrap();
let tower_site = network_json
.get("Tower Site")
.and_then(|v| v.as_object())
.unwrap();
let site_children = tower_site
.get("children")
.and_then(|v| v.as_object())
.unwrap();
assert!(site_children.contains_key("AP 1"));
let ap = site_children.get("AP 1").and_then(|v| v.as_object()).unwrap();
let ap = site_children
.get("AP 1")
.and_then(|v| v.as_object())
.unwrap();
let ap_children = ap.get("children").and_then(|v| v.as_object()).unwrap();
assert!(ap_children.is_empty());
}
@@ -36,7 +36,7 @@ pub fn walk_parents(
} => {
map.insert("type".into(), "Site".into());
map.insert("uisp_site".into(), id.clone().into());
map.insert("parent_site".into(), name.clone().into());
map.insert("parent_site".into(), node_info.parent_name.clone().into());
if let Some(latitude) = latitude
&& let Some(number) = serde_json::Number::from_f64(*latitude as f64)
{
@@ -54,11 +54,11 @@ pub fn walk_parents(
GraphMapping::AccessPoint {
name: _,
id,
site_name,
site_name: _,
..
} => {
map.insert("type".into(), "AP".into());
map.insert("parent_site".into(), site_name.clone().into());
map.insert("parent_site".into(), node_info.parent_name.clone().into());
map.insert("uisp_device".into(), id.clone().into());
}
}
@@ -80,3 +80,89 @@ pub fn walk_parents(
map
}
#[cfg(test)]
mod tests {
use super::{NetJsonParent, walk_parents};
use crate::strategies::full2::graph_mapping::GraphMapping;
use std::collections::{HashMap, HashSet};
#[test]
fn emits_graph_parent_site_for_sites_and_access_points() {
let root_mapping = GraphMapping::Root {
name: "WestRedd-SiteRouter".to_string(),
id: "site-root".to_string(),
latitude: None,
longitude: None,
};
let child_site_mapping = GraphMapping::Site {
name: "MDC El Paso".to_string(),
id: "site-mdc".to_string(),
latitude: None,
longitude: None,
};
let child_ap_mapping = GraphMapping::AccessPoint {
name: "Core-WestRedd".to_string(),
id: "device-core-westredd".to_string(),
site_name: "MDC El Paso".to_string(),
download_mbps: 5000,
upload_mbps: 5000,
};
let mut parents = HashMap::new();
parents.insert(
"MDC El Paso".to_string(),
NetJsonParent {
parent_name: "WestRedd-SiteRouter".to_string(),
mapping: &child_site_mapping,
download: 5000,
upload: 5000,
},
);
parents.insert(
"Core-WestRedd".to_string(),
NetJsonParent {
parent_name: "MDC El Paso".to_string(),
mapping: &child_ap_mapping,
download: 5000,
upload: 5000,
},
);
let root_name = "WestRedd-SiteRouter".to_string();
let root_node = NetJsonParent {
parent_name: "WestRedd".to_string(),
mapping: &root_mapping,
download: 5000,
upload: 5000,
};
let tree = walk_parents(&parents, &root_name, &root_node, &mut HashSet::new());
assert_eq!(
tree.get("parent_site").and_then(|value| value.as_str()),
Some("WestRedd")
);
let site = tree
.get("children")
.and_then(|value| value.as_object())
.and_then(|children| children.get("MDC El Paso"))
.and_then(|value| value.as_object())
.expect("site child should be present");
assert_eq!(
site.get("parent_site").and_then(|value| value.as_str()),
Some("WestRedd-SiteRouter")
);
let ap = site
.get("children")
.and_then(|value| value.as_object())
.and_then(|children| children.get("Core-WestRedd"))
.and_then(|value| value.as_object())
.expect("ap child should be present");
assert_eq!(
ap.get("parent_site").and_then(|value| value.as_str()),
Some("MDC El Paso")
);
}
}