From 3104d7ea6300bed7e9b9a21df331b66c02106ec1 Mon Sep 17 00:00:00 2001 From: Damien Date: Fri, 12 Jun 2026 11:36:12 +0200 Subject: [PATCH 01/28] Add HomeLab v1 infrastructure diagram --- diagrams/HomeLab_v1.svg | 149 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 diagrams/HomeLab_v1.svg diff --git a/diagrams/HomeLab_v1.svg b/diagrams/HomeLab_v1.svg new file mode 100644 index 0000000..0ebf28a --- /dev/null +++ b/diagrams/HomeLab_v1.svg @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 553c713d172a18be35293a1b94b681b4d896457d Mon Sep 17 00:00:00 2001 From: Damien Date: Sun, 21 Jun 2026 16:14:56 +0200 Subject: [PATCH 02/28] Remove HomeLab v1 diagram --- diagrams/Core.svg | 1 + diagrams/HomeLab_v1.svg | 149 ---------------------------------------- 2 files changed, 1 insertion(+), 149 deletions(-) create mode 100644 diagrams/Core.svg delete mode 100644 diagrams/HomeLab_v1.svg diff --git a/diagrams/Core.svg b/diagrams/Core.svg new file mode 100644 index 0000000..9146bc5 --- /dev/null +++ b/diagrams/Core.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/diagrams/HomeLab_v1.svg b/diagrams/HomeLab_v1.svg deleted file mode 100644 index 0ebf28a..0000000 --- a/diagrams/HomeLab_v1.svg +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From d3b59a02e9f5268db289ac71d0953a2106c5ca41 Mon Sep 17 00:00:00 2001 From: Damien Date: Wed, 1 Jul 2026 17:22:39 +0200 Subject: [PATCH 03/28] Remove old Core.svg diagram --- diagrams/Core.svg | 1 - diagrams/core_reworked.svg | 339 +++++++++++++++++++++++++++++++++++++ 2 files changed, 339 insertions(+), 1 deletion(-) delete mode 100644 diagrams/Core.svg create mode 100644 diagrams/core_reworked.svg diff --git a/diagrams/Core.svg b/diagrams/Core.svg deleted file mode 100644 index 9146bc5..0000000 --- a/diagrams/Core.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/diagrams/core_reworked.svg b/diagrams/core_reworked.svg new file mode 100644 index 0000000..707edc1 --- /dev/null +++ b/diagrams/core_reworked.svg @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From d12e057bc82856822869e9cd66bfeab9f8343023 Mon Sep 17 00:00:00 2001 From: Damien Date: Thu, 9 Jul 2026 11:01:36 +0200 Subject: [PATCH 04/28] Remove outdated core reworked diagram --- diagrams/core_reworked.svg | 339 ------------------------------------- 1 file changed, 339 deletions(-) delete mode 100644 diagrams/core_reworked.svg diff --git a/diagrams/core_reworked.svg b/diagrams/core_reworked.svg deleted file mode 100644 index 707edc1..0000000 --- a/diagrams/core_reworked.svg +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 71cc8de7d5dbbc9b49c2e909a8fa1c570ffc9551 Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Thu, 9 Jul 2026 13:33:21 +0000 Subject: [PATCH 05/28] Integrate gnmic for gNMI telemetry collection Add gnmic container node subscribing to interface, BGP, system, and VXLAN gNMI paths across all Arista cEOS nodes, exposed via a Prometheus exporter. gNMI runs in plaintext (no SSL profile on management api gnmi), so insecure:true is used instead of TLS. Refs #43, Refs #44 --- README.md | 283 ++++++++++++++++++--------------- configs/gnmic/gnmic-config.yml | 135 ++++++++++++++++ evpn-lab.clab.yml | 12 ++ 3 files changed, 305 insertions(+), 125 deletions(-) create mode 100644 configs/gnmic/gnmic-config.yml diff --git a/README.md b/README.md index 2e0239b..66e10fe 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@ An extended Arista BGP EVPN-VXLAN multi-fabric lab using ContainerLab and cEOS. ## 🎯 Overview -| Zone | Devices | -| ------ | --------------------------------------------------------------------------------------- | -| DC | 2 spines, 8 leafs (4 MLAG VTEPs), 2 border leafs (MLAG), 4 access switches, 4 hosts | -| Core | 2 core routers (iBGP AS 65500, OSPF underlay with BLs, eBGP to DC & Campus BLs) | -| Campus | 2 spines, 4 leafs (2 MLAG VTEPs), 2 border leafs (MLAG), 2 access switches, 2 hosts | +| Zone | Devices | +| ------ | ----------------------------------------------------------------------------------- | +| DC | 2 spines, 8 leafs (4 MLAG VTEPs), 2 border leafs (MLAG), 4 access switches, 4 hosts | +| Core | 2 core routers (iBGP AS 65500, OSPF underlay with BLs, eBGP to DC & Campus BLs) | +| Campus | 2 spines, 4 leafs (2 MLAG VTEPs), 2 border leafs (MLAG), 2 access switches, 2 hosts | Key design choices: @@ -16,12 +16,12 @@ Key design choices: - **OSPF area 0 + eBGP multi-hop** between each Border Leaf pair and both Core routers (over dot1q subinterfaces: `.100` = default VRF underlay, `.200` = VRF `gold`). - **MLAG** everywhere there is dual-homing at the fabric layers (leaf pairs, border-leaf pairs, access → leafs, and DC host → access). - **Host attachment pattern**: - - **DC hosts** (servers) are **dual-homed via LACP** to an access switch — typical DC - server redundancy. - - **Campus hosts** (user endpoints: PC, phone, printer) are **single-attached** to a - Campus access switch via one plain Ethernet link. Redundancy lives at the access-switch - layer (the access switch itself is dual-homed via LACP to its leaf MLAG pair), not at - the host. + - **DC hosts** (servers) are **dual-homed via LACP** to an access switch — typical DC + server redundancy. + - **Campus hosts** (user endpoints: PC, phone, printer) are **single-attached** to a + Campus access switch via one plain Ethernet link. Redundancy lives at the access-switch + layer (the access switch itself is dual-homed via LACP to its leaf MLAG pair), not at + the host. - **VRF `gold`** is stretched end-to-end: DC leafs (VLAN 34 / 78) ↔ DC-BL ↔ Core ↔ Campus-BL ↔ Campus leafs (VLAN 60 / 70), all sharing L3 VNI `100001`. - **VLAN 50** remains defined as a campus-local L2 VXLAN stretched between the two Campus VTEPs (infrastructure-only, not wired to any host in the current topology). - **Convention**: L2 VNI = `110000 + vlan_id`, L3 VNI = `100001` for VRF `gold`, RT `1:100001` in both fabrics. @@ -64,50 +64,50 @@ docker exec -it clab-arista-evpn-fabric-dc-border-leaf1 Cli ### Node Inventory -| Zone | Role | Nodes | AS | -| ------ | ----------------------- | ------------------------------------------------------ | ------ | -| DC | Spine | `dc-spine1`, `dc-spine2` | 65000 | -| DC | Leaf VTEP1 (MLAG) | `dc-leaf1`, `dc-leaf2` | 65001 | -| DC | Leaf VTEP2 (MLAG) | `dc-leaf3`, `dc-leaf4` | 65002 | -| DC | Leaf VTEP3 (MLAG) | `dc-leaf5`, `dc-leaf6` | 65003 | -| DC | Leaf VTEP4 (MLAG) | `dc-leaf7`, `dc-leaf8` | 65004 | -| DC | Border Leaf (MLAG) | `dc-border-leaf1`, `dc-border-leaf2` | 65005 | -| DC | Access (L2-only) | `dc-access1`-`dc-access4` | — | -| DC | Host | `dc-server1`-`dc-server4` | — | -| Core | Core router | `core1`, `core2` | 65500 | -| Campus | Spine | `campus-spine1`, `campus-spine2` | 66000 | -| Campus | Leaf VTEP1 (MLAG) | `campus-leaf1`, `campus-leaf2` | 66001 | -| Campus | Leaf VTEP2 (MLAG) | `campus-leaf3`, `campus-leaf4` | 66002 | -| Campus | Border Leaf (MLAG) | `campus-border-leaf1`, `campus-border-leaf2` | 66005 | -| Campus | Access (L2-only) | `campus-access1`, `campus-access2` | — | -| Campus | Host | `campus-host1`, `campus-host2` | — | +| Zone | Role | Nodes | AS | +| ------ | ------------------ | -------------------------------------------- | ----- | +| DC | Spine | `dc-spine1`, `dc-spine2` | 65000 | +| DC | Leaf VTEP1 (MLAG) | `dc-leaf1`, `dc-leaf2` | 65001 | +| DC | Leaf VTEP2 (MLAG) | `dc-leaf3`, `dc-leaf4` | 65002 | +| DC | Leaf VTEP3 (MLAG) | `dc-leaf5`, `dc-leaf6` | 65003 | +| DC | Leaf VTEP4 (MLAG) | `dc-leaf7`, `dc-leaf8` | 65004 | +| DC | Border Leaf (MLAG) | `dc-border-leaf1`, `dc-border-leaf2` | 65005 | +| DC | Access (L2-only) | `dc-access1`-`dc-access4` | — | +| DC | Host | `dc-server1`-`dc-server4` | — | +| Core | Core router | `core1`, `core2` | 65500 | +| Campus | Spine | `campus-spine1`, `campus-spine2` | 66000 | +| Campus | Leaf VTEP1 (MLAG) | `campus-leaf1`, `campus-leaf2` | 66001 | +| Campus | Leaf VTEP2 (MLAG) | `campus-leaf3`, `campus-leaf4` | 66002 | +| Campus | Border Leaf (MLAG) | `campus-border-leaf1`, `campus-border-leaf2` | 66005 | +| Campus | Access (L2-only) | `campus-access1`, `campus-access2` | — | +| Campus | Host | `campus-host1`, `campus-host2` | — | ### AS Numbering -| AS | Role | -| ----- | ---------------------------------- | -| 65000 | DC Spine | -| 65001 | DC VTEP1 (dc-leaf1/2) | -| 65002 | DC VTEP2 (dc-leaf3/4) | -| 65003 | DC VTEP3 (dc-leaf5/6) | -| 65004 | DC VTEP4 (dc-leaf7/8) | -| 65005 | DC Border Leaf pair | -| 65500 | Core (iBGP between core1 & core2) | -| 66000 | Campus Spine | -| 66001 | Campus VTEP1 (campus-leaf1/2) | -| 66002 | Campus VTEP2 (campus-leaf3/4) | -| 66005 | Campus Border Leaf pair | +| AS | Role | +| ----- | --------------------------------- | +| 65000 | DC Spine | +| 65001 | DC VTEP1 (dc-leaf1/2) | +| 65002 | DC VTEP2 (dc-leaf3/4) | +| 65003 | DC VTEP3 (dc-leaf5/6) | +| 65004 | DC VTEP4 (dc-leaf7/8) | +| 65005 | DC Border Leaf pair | +| 65500 | Core (iBGP between core1 & core2) | +| 66000 | Campus Spine | +| 66001 | Campus VTEP1 (campus-leaf1/2) | +| 66002 | Campus VTEP2 (campus-leaf3/4) | +| 66005 | Campus Border Leaf pair | ### Access Switches -| Access Switch | Uplink Pair | VLANs | Host | Host attachment | -| --------------- | ------------------------ | -------- | -------------- | ------------------------- | -| dc-access1 | dc-leaf1/2 (VTEP1) | 40 | dc-server1 | LACP Po1 (dual-homed) | -| dc-access2 | dc-leaf3/4 (VTEP2) | 34 | dc-server2 | LACP Po1 (dual-homed) | -| dc-access3 | dc-leaf5/6 (VTEP3) | 40 | dc-server3 | LACP Po1 (dual-homed) | -| dc-access4 | dc-leaf7/8 (VTEP4) | 78 | dc-server4 | LACP Po1 (dual-homed) | -| campus-access1 | campus-leaf1/2 (VTEP1) | 60 | campus-host1 | access port (single link) | -| campus-access2 | campus-leaf3/4 (VTEP2) | 70 | campus-host2 | access port (single link) | +| Access Switch | Uplink Pair | VLANs | Host | Host attachment | +| -------------- | ---------------------- | ----- | ------------ | ------------------------- | +| dc-access1 | dc-leaf1/2 (VTEP1) | 40 | dc-server1 | LACP Po1 (dual-homed) | +| dc-access2 | dc-leaf3/4 (VTEP2) | 34 | dc-server2 | LACP Po1 (dual-homed) | +| dc-access3 | dc-leaf5/6 (VTEP3) | 40 | dc-server3 | LACP Po1 (dual-homed) | +| dc-access4 | dc-leaf7/8 (VTEP4) | 78 | dc-server4 | LACP Po1 (dual-homed) | +| campus-access1 | campus-leaf1/2 (VTEP1) | 60 | campus-host1 | access port (single link) | +| campus-access2 | campus-leaf3/4 (VTEP2) | 70 | campus-host2 | access port (single link) | All access switches are L2-only, LACP-bonded to their leaf MLAG pair via `Port-Channel10`. MSTP + edge-port BPDU guard. @@ -122,71 +122,72 @@ Host-facing ports: ### Management (`172.16.0.0/24`) -| Node | IP | Node | IP | -| ------------------------- | --------------- | ------------------------- | --------------- | -| dc-spine1 | 172.16.0.1 | campus-spine1 | 172.16.0.20 | -| dc-spine2 | 172.16.0.2 | campus-spine2 | 172.16.0.21 | -| dc-border-leaf1 | 172.16.0.3 | campus-border-leaf1 | 172.16.0.22 | -| dc-border-leaf2 | 172.16.0.4 | campus-border-leaf2 | 172.16.0.23 | -| core1 | 172.16.0.10 | campus-leaf1-4 | 172.16.0.51-54 | -| core2 | 172.16.0.11 | campus-access1 | 172.16.0.61 | -| dc-leaf1 | 172.16.0.25 | campus-access2 | 172.16.0.62 | -| dc-leaf2 | 172.16.0.50 | dc-server1-4 | 172.16.0.101-104| -| dc-leaf3-8 | 172.16.0.27-32 | campus-host1 | 172.16.0.105 | -| dc-access1-4 | 172.16.0.41-44 | campus-host2 | 172.16.0.106 | +| Node | IP | Node | IP | +| --------------- | -------------- | ------------------- | ---------------- | +| dc-spine1 | 172.16.0.1 | campus-spine1 | 172.16.0.20 | +| dc-spine2 | 172.16.0.2 | campus-spine2 | 172.16.0.21 | +| dc-border-leaf1 | 172.16.0.3 | campus-border-leaf1 | 172.16.0.22 | +| dc-border-leaf2 | 172.16.0.4 | campus-border-leaf2 | 172.16.0.23 | +| core1 | 172.16.0.10 | campus-leaf1-4 | 172.16.0.51-54 | +| core2 | 172.16.0.11 | campus-access1 | 172.16.0.61 | +| dc-leaf1 | 172.16.0.25 | campus-access2 | 172.16.0.62 | +| dc-leaf2 | 172.16.0.50 | dc-server1-4 | 172.16.0.101-104 | +| dc-leaf3-8 | 172.16.0.27-32 | campus-host1 | 172.16.0.105 | +| dc-access1-4 | 172.16.0.41-44 | campus-host2 | 172.16.0.106 | +| | | gnmic | 172.16.0.70 | Gateway: `172.16.0.254`. ### Router-ID Loopback0 (`Lo0`) -| Zone | Range | Nodes | -| ------ | ------------------- | --------------------------------------------------------------------- | -| DC | `10.0.250.0/24` | dc-spine1 .1, dc-spine2 .2, dc-leaf1-8 .11-.18, BL-dc1 .21, BL-dc2 .22 | -| Core | `10.0.200.0/24` | core1 `10.0.200.1`, core2 `10.0.200.2` | -| Campus | `10.1.250.0/24` | campus-spine1 .1, campus-spine2 .2, campus-leaf1-4 .11-.14, BL-campus1 .21, BL-campus2 .22 | +| Zone | Range | Nodes | +| ------ | --------------- | ------------------------------------------------------------------------------------------ | +| DC | `10.0.250.0/24` | dc-spine1 .1, dc-spine2 .2, dc-leaf1-8 .11-.18, BL-dc1 .21, BL-dc2 .22 | +| Core | `10.0.200.0/24` | core1 `10.0.200.1`, core2 `10.0.200.2` | +| Campus | `10.1.250.0/24` | campus-spine1 .1, campus-spine2 .2, campus-leaf1-4 .11-.14, BL-campus1 .21, BL-campus2 .22 | ### VTEP Loopback1 (`Lo1`) — shared per MLAG pair -| Fabric | VTEP | Address | Leafs | -| ------ | ------ | --------------- | ---------------------- | -| DC | VTEP1 | `10.0.255.11` | dc-leaf1, dc-leaf2 | -| DC | VTEP2 | `10.0.255.12` | dc-leaf3, dc-leaf4 | -| DC | VTEP3 | `10.0.255.13` | dc-leaf5, dc-leaf6 | -| DC | VTEP4 | `10.0.255.14` | dc-leaf7, dc-leaf8 | -| DC | BL | `10.0.255.15` | dc-border-leaf1/2 | -| Campus | VTEP1 | `10.1.255.11` | campus-leaf1/2 | -| Campus | VTEP2 | `10.1.255.12` | campus-leaf3/4 | -| Campus | BL | `10.1.255.21` | campus-border-leaf1/2 | +| Fabric | VTEP | Address | Leafs | +| ------ | ----- | ------------- | --------------------- | +| DC | VTEP1 | `10.0.255.11` | dc-leaf1, dc-leaf2 | +| DC | VTEP2 | `10.0.255.12` | dc-leaf3, dc-leaf4 | +| DC | VTEP3 | `10.0.255.13` | dc-leaf5, dc-leaf6 | +| DC | VTEP4 | `10.0.255.14` | dc-leaf7, dc-leaf8 | +| DC | BL | `10.0.255.15` | dc-border-leaf1/2 | +| Campus | VTEP1 | `10.1.255.11` | campus-leaf1/2 | +| Campus | VTEP2 | `10.1.255.12` | campus-leaf3/4 | +| Campus | BL | `10.1.255.21` | campus-border-leaf1/2 | ### Underlay P2P (`/31`) -| Segment | Subnets | -| -------------------------------- | --------------------------------------- | -| DC dc-spine1 ↔ leaf/BL | `10.0.1.0/31` … `10.0.1.18/31` | -| DC dc-spine2 ↔ leaf/BL | `10.0.2.0/31` … `10.0.2.18/31` | -| DC MLAG iBGP SVIs (per pair) | `10.0.3.0/31`, `.2/31`, `.4/31`, `.6/31`, `.8/31` (BL) | -| DC MLAG peer-link SVIs | `10.0.199.240/31` … `10.0.199.246/31` | -| DC-BL ↔ Core (default, `.100`) | `10.0.4.0/31` .. `10.0.4.6/31` | -| DC-BL ↔ Core (VRF gold, `.200`) | `10.0.14.0/31` .. `10.0.14.6/31` | -| Campus-BL ↔ Core (default) | `10.0.5.0/31` .. `10.0.5.6/31` | -| Campus-BL ↔ Core (VRF gold) | `10.0.15.0/31` .. `10.0.15.6/31` | -| Core1 ↔ Core2 (default) | `10.0.200.128/31` | -| Core1 ↔ Core2 (VRF gold) | `10.0.200.130/31` | -| Campus dc-spine1 ↔ leaf/BL | `10.1.1.0/31` … `10.1.1.10/31` | -| Campus dc-spine2 ↔ leaf/BL | `10.1.2.0/31` … `10.1.2.10/31` | -| Campus MLAG iBGP SVIs | `10.1.3.0/31`, `.2/31`, `.4/31` | -| Campus MLAG peer-link SVIs | `10.1.199.250/31` … `10.1.199.254/31` | +| Segment | Subnets | +| ------------------------------- | ------------------------------------------------------ | +| DC dc-spine1 ↔ leaf/BL | `10.0.1.0/31` … `10.0.1.18/31` | +| DC dc-spine2 ↔ leaf/BL | `10.0.2.0/31` … `10.0.2.18/31` | +| DC MLAG iBGP SVIs (per pair) | `10.0.3.0/31`, `.2/31`, `.4/31`, `.6/31`, `.8/31` (BL) | +| DC MLAG peer-link SVIs | `10.0.199.240/31` … `10.0.199.246/31` | +| DC-BL ↔ Core (default, `.100`) | `10.0.4.0/31` .. `10.0.4.6/31` | +| DC-BL ↔ Core (VRF gold, `.200`) | `10.0.14.0/31` .. `10.0.14.6/31` | +| Campus-BL ↔ Core (default) | `10.0.5.0/31` .. `10.0.5.6/31` | +| Campus-BL ↔ Core (VRF gold) | `10.0.15.0/31` .. `10.0.15.6/31` | +| Core1 ↔ Core2 (default) | `10.0.200.128/31` | +| Core1 ↔ Core2 (VRF gold) | `10.0.200.130/31` | +| Campus dc-spine1 ↔ leaf/BL | `10.1.1.0/31` … `10.1.1.10/31` | +| Campus dc-spine2 ↔ leaf/BL | `10.1.2.0/31` … `10.1.2.10/31` | +| Campus MLAG iBGP SVIs | `10.1.3.0/31`, `.2/31`, `.4/31` | +| Campus MLAG peer-link SVIs | `10.1.199.250/31` … `10.1.199.254/31` | ### Host Addressing -| Host | VLAN | VRF | IP / Mask | Gateway | Purpose | -| ------------- | ---- | -------- | ----------------- | ------------ | ------------------------------ | -| dc-server1 | 40 | default | 10.40.40.101/24 | — | DC L2 stretched (VTEP1↔VTEP3) | -| dc-server2 | 34 | gold | 10.34.34.102/24 | 10.34.34.1 | DC L3 VRF gold | -| dc-server3 | 40 | default | 10.40.40.103/24 | — | DC L2 stretched | -| dc-server4 | 78 | gold | 10.78.78.104/24 | 10.78.78.1 | DC L3 VRF gold | -| campus-host1 | 60 | gold | 10.60.60.101/24 | 10.60.60.1 | Campus L3 VRF gold | -| campus-host2 | 70 | gold | 10.60.70.102/24 | 10.60.70.1 | Campus L3 VRF gold | +| Host | VLAN | VRF | IP / Mask | Gateway | Purpose | +| ------------ | ---- | ------- | --------------- | ---------- | ----------------------------- | +| dc-server1 | 40 | default | 10.40.40.101/24 | — | DC L2 stretched (VTEP1↔VTEP3) | +| dc-server2 | 34 | gold | 10.34.34.102/24 | 10.34.34.1 | DC L3 VRF gold | +| dc-server3 | 40 | default | 10.40.40.103/24 | — | DC L2 stretched | +| dc-server4 | 78 | gold | 10.78.78.104/24 | 10.78.78.1 | DC L3 VRF gold | +| campus-host1 | 60 | gold | 10.60.60.101/24 | 10.60.60.1 | Campus L3 VRF gold | +| campus-host2 | 70 | gold | 10.60.70.102/24 | 10.60.70.1 | Campus L3 VRF gold | > DC hosts are dual-homed in LACP over `bond0` with tagged VLAN sub-interfaces. > Campus hosts are single-attached with one untagged `eth1` in a single access VLAN. @@ -195,20 +196,20 @@ Gateway: `172.16.0.254`. ### L2 VNI Mapping -| VLAN | Description | VNI | Scope | RT | -| ---- | ------------------------------ | ------ | ------------------------------------------------------ | ---------- | -| 40 | DC L2 VXLAN (stretched) | 110040 | DC VTEP1 (dc-leaf1/2) + VTEP3 (dc-leaf5/6) | 40:110040 | -| 50 | Campus L2 VXLAN (stretched) | 110050 | Campus VTEP1 (campus-leaf1/2) + VTEP2 (campus-leaf3/4) | 50:110050 | -| 34 | DC VRF gold subnet (local) | 110034 | DC VTEP2 only (anycast GW 10.34.34.1) | 34:110034 | -| 78 | DC VRF gold subnet (local) | 110078 | DC VTEP4 only (anycast GW 10.78.78.1) | 78:110078 | -| 60 | Campus VRF gold subnet (local) | 110060 | Campus VTEP1 only (anycast GW 10.60.60.1) | 60:110060 | -| 70 | Campus VRF gold subnet (local) | 110070 | Campus VTEP2 only (anycast GW 10.60.70.1) | 70:110070 | +| VLAN | Description | VNI | Scope | RT | +| ---- | ------------------------------ | ------ | ------------------------------------------------------ | --------- | +| 40 | DC L2 VXLAN (stretched) | 110040 | DC VTEP1 (dc-leaf1/2) + VTEP3 (dc-leaf5/6) | 40:110040 | +| 50 | Campus L2 VXLAN (stretched) | 110050 | Campus VTEP1 (campus-leaf1/2) + VTEP2 (campus-leaf3/4) | 50:110050 | +| 34 | DC VRF gold subnet (local) | 110034 | DC VTEP2 only (anycast GW 10.34.34.1) | 34:110034 | +| 78 | DC VRF gold subnet (local) | 110078 | DC VTEP4 only (anycast GW 10.78.78.1) | 78:110078 | +| 60 | Campus VRF gold subnet (local) | 110060 | Campus VTEP1 only (anycast GW 10.60.60.1) | 60:110060 | +| 70 | Campus VRF gold subnet (local) | 110070 | Campus VTEP2 only (anycast GW 10.60.70.1) | 70:110070 | ### L3 VNI Mapping (end-to-end) -| VRF | L3 VNI | RT | Scope | -| ---- | ------- | ---------- | ----------------------------------------------------- | -| gold | 100001 | 1:100001 | DC VTEP2/VTEP4/DC-BL + Campus VTEP1/VTEP2/Campus-BL | +| VRF | L3 VNI | RT | Scope | +| ---- | ------ | -------- | --------------------------------------------------- | +| gold | 100001 | 1:100001 | DC VTEP2/VTEP4/DC-BL + Campus VTEP1/VTEP2/Campus-BL | VRF `gold` is announced over EVPN Type-5 (IP prefix) inside each fabric, and **stitched by the Core** via eBGP IPv4 unicast in VRF gold (over the `.200` dot1q subinterfaces). L3 VNI `100001` is re-used end-to-end for symmetry; RT `1:100001` is consistent across both fabrics. @@ -219,19 +220,19 @@ VRF `gold` is announced over EVPN Type-5 (IP prefix) inside each fabric, and **s ## 🔀 Control Plane Summary -| Segment | Protocol | Notes | -| ----------------------------------- | ------------------------------------ | ------------------------------------- | -| DC spine ↔ leaf/BL underlay | eBGP IPv4 (AS 65000 ↔ 650xx) | `maximum-paths 4 ecmp 64` | -| DC spine ↔ leaf/BL overlay | eBGP EVPN via Loopback0, multi-hop 3 | Spines reflect via `ebgp peer-group` | -| DC MLAG pair iBGP | iBGP over VLAN 4091 SVI | `next-hop-self` | -| DC-BL ↔ Core (default) | OSPF area 0 + eBGP AS 65005 ↔ 65500 | on `.100` dot1q subinterface | -| DC-BL ↔ Core (VRF gold) | eBGP AS 65005 ↔ 65500 | on `.200` dot1q subinterface | -| Core1 ↔ Core2 (default) | OSPF area 0 + iBGP AS 65500 | via Loopback0 | -| Core1 ↔ Core2 (VRF gold) | iBGP AS 65500 | VRF-aware over `.200` subinterface | -| Campus-BL ↔ Core (default / gold) | OSPF + eBGP AS 66005 ↔ 65500 | same pattern as DC-BL | -| Campus spine ↔ leaf/BL underlay | eBGP IPv4 (AS 66000 ↔ 660xx) | | -| Campus spine ↔ leaf/BL overlay | eBGP EVPN via Loopback0, multi-hop 3 | | -| Campus MLAG pair iBGP | iBGP over VLAN 4091 SVI | | +| Segment | Protocol | Notes | +| --------------------------------- | ------------------------------------ | ------------------------------------ | +| DC spine ↔ leaf/BL underlay | eBGP IPv4 (AS 65000 ↔ 650xx) | `maximum-paths 4 ecmp 64` | +| DC spine ↔ leaf/BL overlay | eBGP EVPN via Loopback0, multi-hop 3 | Spines reflect via `ebgp peer-group` | +| DC MLAG pair iBGP | iBGP over VLAN 4091 SVI | `next-hop-self` | +| DC-BL ↔ Core (default) | OSPF area 0 + eBGP AS 65005 ↔ 65500 | on `.100` dot1q subinterface | +| DC-BL ↔ Core (VRF gold) | eBGP AS 65005 ↔ 65500 | on `.200` dot1q subinterface | +| Core1 ↔ Core2 (default) | OSPF area 0 + iBGP AS 65500 | via Loopback0 | +| Core1 ↔ Core2 (VRF gold) | iBGP AS 65500 | VRF-aware over `.200` subinterface | +| Campus-BL ↔ Core (default / gold) | OSPF + eBGP AS 66005 ↔ 65500 | same pattern as DC-BL | +| Campus spine ↔ leaf/BL underlay | eBGP IPv4 (AS 66000 ↔ 660xx) | | +| Campus spine ↔ leaf/BL overlay | eBGP EVPN via Loopback0, multi-hop 3 | | +| Campus MLAG pair iBGP | iBGP over VLAN 4091 SVI | | ## 🧪 Testing & Validation @@ -323,6 +324,36 @@ ssh admin@clab-arista-evpn-fabric-dc-border-leaf1 "show bgp evpn route-type ip-p ssh admin@clab-arista-evpn-fabric-campus-border-leaf1 "show bgp evpn route-type ip-prefix ipv4" ``` +## 📡 Telemetry + +A [`gnmic`](https://gnmic.openconfig.net/) container node subscribes to gNMI (port `6030`, +`eos-native` provider) on every Arista `cEOS` node in the fabric, and exposes the +collected metrics on a Prometheus exporter endpoint. + +Subscriptions (see issue #44 for the path-selection rationale): + +| Subscription | Nodes | Paths | +| -------------- | -------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `eos-interfaces` | all | `interfaces/interface/state/{oper-status,counters}` | +| `eos-bgp` | all | `.../bgp/neighbors/neighbor/state/session-state`, `.../afi-safis/afi-safi/state/prefixes` (IPv4/IPv6 unicast + L2VPN EVPN) | +| `eos-system` | all | `/system/cpus/cpu/state`, `/system/memory/state` | +| `eos-vxlan` | VTEP nodes only (leafs + border-leafs, both fabrics) | VLAN-to-VNI mapping + MAC table entries — joined in Prometheus to get MAC count per VNI | + +- Config: `configs/gnmic/gnmic-config.yml` +- TLS: `insecure: true` — cEOS gNMI runs in plaintext here (no SSL profile configured on + `management api gnmi`), not TLS; `skip-verify` would fail the handshake +- `oper-status` and BGP `session-state` are string enums; gnmic's Prometheus output drops + non-numeric leaves, so the `state-to-int` event-processor maps them to `1`/`0` +- Prometheus exporter: `http://clab-arista-evpn-fabric-gnmic:9273/metrics` + +```bash +# Validate gnmic is subscribed and streaming from all targets +docker logs clab-arista-evpn-fabric-gnmic + +# Scrape the Prometheus exporter directly +docker exec clab-arista-evpn-fabric-gnmic wget -qO- http://localhost:9273/metrics | head +``` + ## 📁 Repository Structure ``` @@ -343,7 +374,9 @@ arista-evpn-vxlan-clab/ │ ├── campus-spine1.cfg, campus-spine2.cfg │ ├── campus-leaf1.cfg … campus-leaf4.cfg │ ├── campus-border-leaf1.cfg, campus-border-leaf2.cfg -│ └── campus-access1.cfg, campus-access2.cfg +│ ├── campus-access1.cfg, campus-access2.cfg +│ └── gnmic/ +│ └── gnmic-config.yml └── hosts/ ├── README.md ├── dc-server1_interfaces … dc-server4_interfaces diff --git a/configs/gnmic/gnmic-config.yml b/configs/gnmic/gnmic-config.yml new file mode 100644 index 0000000..1fe6e5e --- /dev/null +++ b/configs/gnmic/gnmic-config.yml @@ -0,0 +1,135 @@ +username: admin +password: admin +port: 6030 +timeout: 10s + +common_eos_subscriptions: &common_eos_subs + insecure: true + subscriptions: + - eos-interfaces + - eos-bgp + - eos-system + +vtep_eos_subscriptions: &vtep_eos_subs + insecure: true + subscriptions: + - eos-interfaces + - eos-bgp + - eos-system + - eos-vxlan + +targets: + # DC fabric + dc-spine1: *common_eos_subs + dc-spine2: *common_eos_subs + dc-leaf1: *vtep_eos_subs + dc-leaf2: *vtep_eos_subs + dc-leaf3: *vtep_eos_subs + dc-leaf4: *vtep_eos_subs + dc-leaf5: *vtep_eos_subs + dc-leaf6: *vtep_eos_subs + dc-leaf7: *vtep_eos_subs + dc-leaf8: *vtep_eos_subs + dc-border-leaf1: *vtep_eos_subs + dc-border-leaf2: *vtep_eos_subs + dc-access1: *common_eos_subs + dc-access2: *common_eos_subs + dc-access3: *common_eos_subs + dc-access4: *common_eos_subs + + # Core + core1: *common_eos_subs + core2: *common_eos_subs + + # Campus fabric + campus-spine1: *common_eos_subs + campus-spine2: *common_eos_subs + campus-border-leaf1: *vtep_eos_subs + campus-border-leaf2: *vtep_eos_subs + campus-leaf1: *vtep_eos_subs + campus-leaf2: *vtep_eos_subs + campus-leaf3: *vtep_eos_subs + campus-leaf4: *vtep_eos_subs + campus-access1: *common_eos_subs + campus-access2: *common_eos_subs + +subscriptions: + eos-interfaces: + mode: stream + stream-mode: sample + sample-interval: 10s + paths: + - /interfaces/interface/state/oper-status + - /interfaces/interface/state/counters + eos-bgp: + mode: stream + stream-mode: sample + sample-interval: 10s + paths: + - /network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/state/session-state + - /network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/afi-safis/afi-safi/state/prefixes + eos-system: + mode: stream + stream-mode: sample + sample-interval: 10s + paths: + - /system/cpus/cpu/state + - /system/memory/state + eos-vxlan: + mode: stream + stream-mode: sample + sample-interval: 10s + paths: + # VLAN-to-VNI mapping (join key for MAC-count-per-VNI in Prometheus) + - /interfaces/interface[name=Vxlan1]/arista-exp-eos-vxlan:arista-vxlan/vlan-to-vnis/vlan-to-vni + # MAC table entries, tagged by VLAN — joined with the mapping above to get per-VNI counts + - /network-instances/network-instance/fdb/mac-table/entries/entry + +outputs: + prom-output: + type: prometheus + listen: :9273 + event-processors: + - state-to-int + +# oper-status and BGP session-state are string enums; the Prometheus output +# silently drops non-numeric values, so they're mapped to 1 (up/established) / 0 (anything else) +processors: + state-to-int: + event-strings: + value-names: + - ".*oper-status$" + - ".*session-state$" + transforms: + - replace: + apply-on: "value" + old: "UP" + new: "1" + - replace: + apply-on: "value" + old: "ESTABLISHED" + new: "1" + - replace: + apply-on: "value" + old: "DOWN" + new: "0" + - replace: + apply-on: "value" + old: "IDLE" + new: "0" + - replace: + apply-on: "value" + old: "CONNECT" + new: "0" + - replace: + apply-on: "value" + old: "ACTIVE" + new: "0" + - replace: + apply-on: "value" + old: "OPENSENT" + new: "0" + - replace: + apply-on: "value" + old: "OPENCONFIRM" + new: "0" diff --git a/evpn-lab.clab.yml b/evpn-lab.clab.yml index 07c656d..46a6d40 100644 --- a/evpn-lab.clab.yml +++ b/evpn-lab.clab.yml @@ -290,6 +290,18 @@ topology: exec: - ifup eth1 + # ===================================================== + # TELEMETRY + # ===================================================== + + gnmic: + kind: linux + mgmt-ipv4: 172.16.0.70 + image: ghcr.io/openconfig/gnmic:0.46.0 + binds: + - configs/gnmic/gnmic-config.yml:/gnmic-config.yml:ro + cmd: --config /gnmic-config.yml --log subscribe + links: # ===================================================== # DATACENTER FABRIC LINKS From b6a49bfeac0f070ea47d0cb4bed62e566ad2c25b Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Thu, 9 Jul 2026 13:33:58 +0000 Subject: [PATCH 06/28] Add CLAUDE.md with project conventions and guidelines --- CLAUDE.md | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..b83ce21 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,78 @@ +# CLAUDE.md + +## Project context + +Arista **EVPN/VXLAN** network lab built on Containerlab + cEOS, simulating three +interconnected zones: + +- **DC** (Data Center): 2 spines, 8 leafs (4 MLAG/VTEP pairs), 2 MLAG border leafs, 4 access switches, 4 hosts +- **Core**: 2 L3 transit routers (iBGP AS 65500, OSPF underlay) +- **Campus**: 2 spines, 4 leafs (2 MLAG/VTEP pairs), 2 MLAG border leafs, 2 access switches, 2 hosts + +A `gold` VRF is stretched end-to-end between DC and Campus through the Core (EVPN +Type-5, stitched over eBGP IPv4 on the Core). + +Source of truth repo: `https://gitea.arnodo.fr/Damien/arista-evpn-vxlan-clab` + +## Naming convention + +- Hostname format: `-` where `area` ∈ `{dc, campus, core}` +- Examples: `dc-leaf1`, `campus-border-leaf2`, `core1` +- This convention is used as-is for IPFabric site separation + (regex: `^(dc|campus|core)-?.*$`) + +## Repository structure + +- `README.md` — overview, IP addressing, VNI mapping, control plane, quickstart +- `TROUBLESHOOTING.md` — diagnostic procedures +- `END_TO_END_TESTING.md` — end-to-end test scenarios +- `evpn-lab.clab.yml` — Containerlab topology definition +- `configs/` — Arista EOS configs per node (`.cfg`) +- `hosts/` — network configuration for simulated Linux hosts +- `assets/` — diagrams (drawio/svg) + +## Tech stack + +- **Containerlab** for topology orchestration +- **cEOS** (containerized Arista EOS) as the network OS +- **IPFabric** for network assurance and site separation +- **Gitea** (self-hosted, `gitea.arnodo.fr`) as the source of truth + +## GitOps workflow — mandatory rule + +**Every action on this project must be tracked by a Gitea issue.** + +- Before starting any work (config change, topology addition, documentation, etc.), + confirm an **issue exists** and reference it in commits (`Refs #` or `Closes #`). +- If no issue covers the identified need: **create the issue first**, describe the + problem/requirement, and only then act on it. +- No TODO should ever be left "floating" in code, commits, or discussions: it's + either already an issue, or it must become one immediately. +- This `CLAUDE.md` file stays **general**: it must never contain one-off tasks. + Action details live exclusively in issues. + +## Style guidelines + +- Be concise and direct — no filler, no unnecessary preamble +- Issues: short title, straight to the point description (context, expected outcome, no fluff) +- Commit messages: short, factual, imperative mood +- Documentation (README, TROUBLESHOOTING, etc.): technical and dense — tables over + prose, no marketing tone, no redundant explanations +- Avoid restating what's already documented elsewhere — link/reference instead of duplicating + +## Contribution conventions + +- Atomic commits, clear message, reference to the associated issue +- Any Arista config change must stay consistent with the IP addressing / VNI / RD + tables documented in `README.md` +- Any topology change (`evpn-lab.clab.yml`) must be reflected in `assets/` (diagram) + and in the `README.md` tables +- New validation procedures go in `END_TO_END_TESTING.md`; known issues go in + `TROUBLESHOOTING.md` + +## Default behavior for Claude + +1. Before any action, identify the corresponding Gitea issue (or create one first) +2. Stay within the scope of the issue being worked on — don't drift to other topics +3. Strictly follow the `-` naming convention +4. Never introduce hardcoded TODO/FIXME in repo files — always go through an issue From 1f8a3ef6d6ab27eafc460e1914516dd41d2e599f Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Thu, 9 Jul 2026 14:42:53 +0000 Subject: [PATCH 07/28] Deploy containerized Prometheus for gnmic telemetry Add prometheus node to the Containerlab topology, scraping the gnmic exporter (172.16.0.70:9273) at 5s interval with relabeling to clean device/interface/neighbor_address/vlan/mac_address/afi_safi labels. Validated against BGP and system metrics confirmed in #44. Existing external Prometheus instance stays untouched in parallel. Refs #45 --- README.md | 34 ++++++++++++- configs/prometheus/prometheus.yml | 82 +++++++++++++++++++++++++++++++ evpn-lab.clab.yml | 7 +++ 3 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 configs/prometheus/prometheus.yml diff --git a/README.md b/README.md index 66e10fe..33b84fa 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,7 @@ Host-facing ports: | dc-leaf3-8 | 172.16.0.27-32 | campus-host1 | 172.16.0.105 | | dc-access1-4 | 172.16.0.41-44 | campus-host2 | 172.16.0.106 | | | | gnmic | 172.16.0.70 | +| | | prometheus | 172.16.0.71 | Gateway: `172.16.0.254`. @@ -346,12 +347,39 @@ Subscriptions (see issue #44 for the path-selection rationale): non-numeric leaves, so the `state-to-int` event-processor maps them to `1`/`0` - Prometheus exporter: `http://clab-arista-evpn-fabric-gnmic:9273/metrics` +A `prometheus` container node (`prom/prometheus`, `172.16.0.71:9090`) scrapes the +gnmic exporter every `5s` and is deployed inside the topology (`clab deploy`/`clab +destroy`, self-contained — see issue #45). Metric names are kept as-is; raw +OpenConfig-flattened labels are relabeled to clean, joinable names: + +| Raw label | Clean label | +| -------------------------------- | ------------------ | +| `source` | `device` | +| `interface_name` | `interface` | +| `neighbor_neighbor_address` | `neighbor_address` | +| `vlan_to_vni_vlan` / `entry_vlan` | `vlan` | +| `entry_mac_address` | `mac_address` | +| `afi_safi_afi_safi_name` | `afi_safi` | + +`vni` is **not** available as a native label on any gnmic-exported metric — it +only appears as the sample *value* of +`interfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni`, keyed by +`(device, interface, vlan)`. Per-VNI MAC counts require a PromQL join on `vlan` +rather than a native `vni` label. + +- Config: `configs/prometheus/prometheus.yml` +- This is separate from, and does not replace, the existing external Prometheus + instance — no cutover yet, both run in parallel pending validation + ```bash # Validate gnmic is subscribed and streaming from all targets docker logs clab-arista-evpn-fabric-gnmic # Scrape the Prometheus exporter directly docker exec clab-arista-evpn-fabric-gnmic wget -qO- http://localhost:9273/metrics | head + +# Query the in-topology Prometheus instance +curl -s 'http://172.16.0.71:9090/api/v1/query?query=system_memory_state_used' | jq ``` ## 📁 Repository Structure @@ -375,8 +403,10 @@ arista-evpn-vxlan-clab/ │ ├── campus-leaf1.cfg … campus-leaf4.cfg │ ├── campus-border-leaf1.cfg, campus-border-leaf2.cfg │ ├── campus-access1.cfg, campus-access2.cfg -│ └── gnmic/ -│ └── gnmic-config.yml +│ ├── gnmic/ +│ │ └── gnmic-config.yml +│ └── prometheus/ +│ └── prometheus.yml └── hosts/ ├── README.md ├── dc-server1_interfaces … dc-server4_interfaces diff --git a/configs/prometheus/prometheus.yml b/configs/prometheus/prometheus.yml new file mode 100644 index 0000000..9adf8e0 --- /dev/null +++ b/configs/prometheus/prometheus.yml @@ -0,0 +1,82 @@ +global: + scrape_interval: 5s + evaluation_interval: 5s + +scrape_configs: + - job_name: gnmic + static_configs: + - targets: ["172.16.0.70:9273"] + metric_relabel_configs: + # device: raw label is "source" (gnmic subscription target) + - source_labels: [source] + target_label: device + regex: (.+) + replacement: $1 + action: replace + - action: labeldrop + regex: source + + # interface: raw label is already "interface_name" (OpenConfig key on the + # "interface" path element) — normalize to "interface" for consistency + - source_labels: [interface_name] + target_label: interface + regex: (.+) + replacement: $1 + action: replace + - action: labeldrop + regex: interface_name + + # BGP neighbor address: raw label is double-prefixed "neighbor_neighbor_address" + # (OpenConfig path flattening — key name matches the path element name), + # see issue #44 + - source_labels: [neighbor_neighbor_address] + target_label: neighbor_address + regex: (.+) + replacement: $1 + action: replace + - action: labeldrop + regex: neighbor_neighbor_address + + # VLAN id: normalize the two raw spellings ("vlan_to_vni_vlan" on the + # VLAN-to-VNI mapping, "entry_vlan" on FDB entries) to a single "vlan" label + - source_labels: [vlan_to_vni_vlan] + target_label: vlan + regex: (.+) + replacement: $1 + action: replace + - action: labeldrop + regex: vlan_to_vni_vlan + - source_labels: [entry_vlan] + target_label: vlan + regex: (.+) + replacement: $1 + action: replace + - action: labeldrop + regex: entry_vlan + + # NOTE: "vni" is NOT available as a label from any gnmic-exported metric. + # The VNI only appears as the sample *value* of + # interfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni, + # keyed by (device, interface, vlan). Relabeling can only rename existing + # labels, not promote a value to a label. Per-VNI MAC counts therefore + # require a PromQL join (vlan_to_vni_state_vni joined with the FDB + # entry count, grouped by vlan) rather than a native "vni" label — see + # issue #45 for the documented gap. + + # MAC address on FDB entries: drop the "entry_" prefix for consistency + - source_labels: [entry_mac_address] + target_label: mac_address + regex: (.+) + replacement: $1 + action: replace + - action: labeldrop + regex: entry_mac_address + + # AFI/SAFI on BGP prefix counters: drop the flattened prefix + - source_labels: [afi_safi_afi_safi_name] + target_label: afi_safi + regex: (.+) + replacement: $1 + action: replace + - action: labeldrop + regex: afi_safi_afi_safi_name diff --git a/evpn-lab.clab.yml b/evpn-lab.clab.yml index 46a6d40..510acde 100644 --- a/evpn-lab.clab.yml +++ b/evpn-lab.clab.yml @@ -302,6 +302,13 @@ topology: - configs/gnmic/gnmic-config.yml:/gnmic-config.yml:ro cmd: --config /gnmic-config.yml --log subscribe + prometheus: + kind: linux + mgmt-ipv4: 172.16.0.71 + image: prom/prometheus:v2.55.1 + binds: + - configs/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro + links: # ===================================================== # DATACENTER FABRIC LINKS From f71121037947a1b9c0c95171f2b769922519e00f Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Thu, 9 Jul 2026 16:48:40 +0000 Subject: [PATCH 08/28] Generate weathermap-ng panel config from IPFabric topology Adds scripts/generate_weathermap.py: fetches device inventory and connectivity-matrix from IPFabric, cross-checks IPFabric's abbreviated interface names against the live gnmic exporter, and emits a Grafana dashboard-as-code JSON (configs/grafana/weathermap-dashboard.json) with the weathermap-ng panel wired to explicit legendFormat-resolved queries for BGP status, interface tx/rx, and VXLAN MAC-per-VNI. Refs #48 --- README.md | 47 +- configs/grafana/weathermap-dashboard.json | 3301 +++++++++++++++++++++ scripts/generate_weathermap.py | 457 +++ 3 files changed, 3803 insertions(+), 2 deletions(-) create mode 100644 configs/grafana/weathermap-dashboard.json create mode 100644 scripts/generate_weathermap.py diff --git a/README.md b/README.md index 33b84fa..84c0f48 100644 --- a/README.md +++ b/README.md @@ -382,6 +382,45 @@ docker exec clab-arista-evpn-fabric-gnmic wget -qO- http://localhost:9273/metric curl -s 'http://172.16.0.71:9090/api/v1/query?query=system_memory_state_used' | jq ``` +### Weathermap panel generation (dashboard-as-code) + +`scripts/generate_weathermap.py` generates a [weathermap-ng](https://github.com/allamiro/grafana-network-weathermap-ng) +panel from live IPFabric topology + gnmic/Prometheus metrics, and writes a full +Grafana dashboard-as-code JSON to `configs/grafana/weathermap-dashboard.json` +(committed to Gitea as the source of truth, same pattern as the retired Flow +Panel YAML). See issue #48 for the schema research this is built against. + +```bash +export IPFABRIC_URL=https:// +export IPFABRIC_TOKEN= +python3 scripts/generate_weathermap.py # writes the JSON only + +export GRAFANA_URL=https:// +export GRAFANA_TOKEN= +export GRAFANA_DATASOURCE_UID= +python3 scripts/generate_weathermap.py --provision # also provisions via the Grafana API +``` + +- Re-run after any topology change (`evpn-lab.clab.yml`) to regenerate and re-provision. +- Node/link topology comes from IPFabric (`/tables/inventory/devices`, + `/tables/interfaces/connectivity-matrix`); node positions are computed as a + simple site-grouped grid (dc/core/campus bands) since IPFabric has no + layout data. +- IPFabric reports abbreviated interface names (`Et11`) while gnmic exposes + full OpenConfig names (`Ethernet11`); the script aliases known prefixes + (`Et`→`Ethernet`, `Po`→`Port-Channel`, `Lo`→`Loopback`, `Vl`→`Vlan`, + `Ma`→`Management`) and cross-checks the result against the live exporter, + logging (not silently dropping) any link whose aliased name has no matching + series — the actual fix for a real mismatch belongs in gnmic interface + aliasing (#43), not in this script. +- `.100`/`.200` subinterface rows in the connectivity-matrix (802.1Q tags used + for the gold VRF stitching on Core) are excluded — they ride the same + physical port as their parent interface and gnmic only exports physical + interface counters. +- The Grafana panel plugin id (`GRAFANA_WEATHERMAP_PLUGIN_ID`, default + `allamiro-weathermap-panel`) is a placeholder — confirm it against the + actually installed plugin before provisioning. + ## 📁 Repository Structure ``` @@ -405,8 +444,12 @@ arista-evpn-vxlan-clab/ │ ├── campus-access1.cfg, campus-access2.cfg │ ├── gnmic/ │ │ └── gnmic-config.yml -│ └── prometheus/ -│ └── prometheus.yml +│ ├── prometheus/ +│ │ └── prometheus.yml +│ └── grafana/ +│ └── weathermap-dashboard.json +├── scripts/ +│ └── generate_weathermap.py └── hosts/ ├── README.md ├── dc-server1_interfaces … dc-server4_interfaces diff --git a/configs/grafana/weathermap-dashboard.json b/configs/grafana/weathermap-dashboard.json new file mode 100644 index 0000000..8d0019b --- /dev/null +++ b/configs/grafana/weathermap-dashboard.json @@ -0,0 +1,3301 @@ +{ + "dashboard": { + "uid": "evpn-vxlan-fabric-weathermap", + "title": "EVPN/VXLAN Fabric Weathermap", + "tags": [ + "evpn", + "vxlan", + "weathermap", + "auto-generated" + ], + "timezone": "browser", + "schemaVersion": 39, + "version": 0, + "panels": [ + { + "id": 1, + "type": "tamirsuliman-weathermap-panel", + "title": "Fabric Weathermap", + "gridPos": { + "h": 24, + "w": 24, + "x": 0, + "y": 0 + }, + "datasource": { + "type": "prometheus", + "uid": "aflu2t514uf40a" + }, + "targets": [ + { + "refId": "A", + "expr": "min by (device) (network_instances_network_instance_protocols_protocol_bgp_neighbors_neighbor_state_session_state{network_instance_name=\"default\", device=~\"campus\\-spine1|dc\\-spine1|dc\\-spine2|campus\\-spine2|campus\\-border\\-leaf1|dc\\-leaf1|campus\\-border\\-leaf2|dc\\-leaf4|dc\\-leaf3|dc\\-leaf5|dc\\-border\\-leaf1|dc\\-leaf6|dc\\-access1|dc\\-access2|dc\\-leaf8|dc\\-leaf7|dc\\-access4|dc\\-access3|dc\\-border\\-leaf2|dc\\-leaf2|campus\\-leaf1|campus\\-access1|campus\\-leaf2|campus\\-leaf3|campus\\-access2|campus\\-leaf4|core1|core2\"})", + "legendFormat": "BGP {{device}}", + "datasource": { + "type": "prometheus", + "uid": "aflu2t514uf40a" + } + }, + { + "refId": "B", + "expr": "rate(interfaces_interface_state_counters_out_octets{device=~\"campus\\-spine1|dc\\-spine1|dc\\-spine2|campus\\-spine2|campus\\-border\\-leaf1|dc\\-leaf1|campus\\-border\\-leaf2|dc\\-leaf4|dc\\-leaf3|dc\\-leaf5|dc\\-border\\-leaf1|dc\\-leaf6|dc\\-access1|dc\\-access2|dc\\-leaf8|dc\\-leaf7|dc\\-access4|dc\\-access3|dc\\-border\\-leaf2|dc\\-leaf2|campus\\-leaf1|campus\\-access1|campus\\-leaf2|campus\\-leaf3|campus\\-access2|campus\\-leaf4|core1|core2\", interface=~\"Ethernet1|Ethernet10|Ethernet11|Ethernet12|Ethernet13|Ethernet14|Ethernet2|Ethernet3|Ethernet4|Ethernet5|Ethernet6|Ethernet7|Ethernet8|Ethernet9\"}[5m]) * 8", + "legendFormat": "{{device}} {{interface}} tx", + "datasource": { + "type": "prometheus", + "uid": "aflu2t514uf40a" + } + }, + { + "refId": "C", + "expr": "rate(interfaces_interface_state_counters_in_octets{device=~\"campus\\-spine1|dc\\-spine1|dc\\-spine2|campus\\-spine2|campus\\-border\\-leaf1|dc\\-leaf1|campus\\-border\\-leaf2|dc\\-leaf4|dc\\-leaf3|dc\\-leaf5|dc\\-border\\-leaf1|dc\\-leaf6|dc\\-access1|dc\\-access2|dc\\-leaf8|dc\\-leaf7|dc\\-access4|dc\\-access3|dc\\-border\\-leaf2|dc\\-leaf2|campus\\-leaf1|campus\\-access1|campus\\-leaf2|campus\\-leaf3|campus\\-access2|campus\\-leaf4|core1|core2\", interface=~\"Ethernet1|Ethernet10|Ethernet11|Ethernet12|Ethernet13|Ethernet14|Ethernet2|Ethernet3|Ethernet4|Ethernet5|Ethernet6|Ethernet7|Ethernet8|Ethernet9\"}[5m]) * 8", + "legendFormat": "{{device}} {{interface}} rx", + "datasource": { + "type": "prometheus", + "uid": "aflu2t514uf40a" + } + }, + { + "refId": "D", + "expr": "count by (device, vlan) (network_instances_network_instance_fdb_mac_table_entries_entry_vlan{device=~\"campus\\-leaf1|campus\\-leaf2|campus\\-leaf3|campus\\-leaf4|dc\\-leaf1|dc\\-leaf2|dc\\-leaf5|dc\\-leaf6\"})\n* on(device, vlan) group_left(vlan_to_vni_state_vni)\ninterfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni{device=~\"campus\\-leaf1|campus\\-leaf2|campus\\-leaf3|campus\\-leaf4|dc\\-leaf1|dc\\-leaf2|dc\\-leaf5|dc\\-leaf6\"}", + "legendFormat": "VNI {{device}} {{vlan}}", + "datasource": { + "type": "prometheus", + "uid": "aflu2t514uf40a" + } + } + ], + "options": { + "weathermap": { + "version": 14, + "id": "evpn-vxlan-fabric-weathermap", + "nodes": [ + { + "id": "campus-spine1", + "label": "campus-spine1", + "position": [ + 460, + 900 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP campus-spine1", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "dc-spine1", + "label": "dc-spine1", + "position": [ + 460, + 300 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-spine1", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "dc-spine2", + "label": "dc-spine2", + "position": [ + 640, + 300 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-spine2", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "campus-spine2", + "label": "campus-spine2", + "position": [ + 640, + 900 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP campus-spine2", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "campus-border-leaf1", + "label": "campus-border-leaf1", + "position": [ + 460, + 750 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP campus-border-leaf1", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "dc-leaf1", + "label": "dc-leaf1", + "position": [ + 100, + 150 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-leaf1", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ], + "tooltipMetrics": [ + { + "label": "VNI dc-leaf1 40", + "query": "VNI dc-leaf1 40", + "units": "MACs" + } + ] + }, + { + "id": "campus-border-leaf2", + "label": "campus-border-leaf2", + "position": [ + 640, + 750 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP campus-border-leaf2", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "dc-leaf4", + "label": "dc-leaf4", + "position": [ + 640, + 150 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-leaf4", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "dc-leaf3", + "label": "dc-leaf3", + "position": [ + 460, + 150 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-leaf3", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "dc-leaf5", + "label": "dc-leaf5", + "position": [ + 820, + 150 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-leaf5", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ], + "tooltipMetrics": [ + { + "label": "VNI dc-leaf5 40", + "query": "VNI dc-leaf5 40", + "units": "MACs" + } + ] + }, + { + "id": "dc-border-leaf1", + "label": "dc-border-leaf1", + "position": [ + 820, + 0 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-border-leaf1", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "dc-leaf6", + "label": "dc-leaf6", + "position": [ + 1000, + 150 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-leaf6", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ], + "tooltipMetrics": [ + { + "label": "VNI dc-leaf6 40", + "query": "VNI dc-leaf6 40", + "units": "MACs" + } + ] + }, + { + "id": "dc-access1", + "label": "dc-access1", + "position": [ + 100, + 0 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-access1", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "dc-access2", + "label": "dc-access2", + "position": [ + 280, + 0 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-access2", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "dc-leaf8", + "label": "dc-leaf8", + "position": [ + 280, + 300 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-leaf8", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "dc-leaf7", + "label": "dc-leaf7", + "position": [ + 100, + 300 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-leaf7", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "dc-access4", + "label": "dc-access4", + "position": [ + 640, + 0 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-access4", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "dc-access3", + "label": "dc-access3", + "position": [ + 460, + 0 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-access3", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "dc-border-leaf2", + "label": "dc-border-leaf2", + "position": [ + 1000, + 0 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-border-leaf2", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "dc-leaf2", + "label": "dc-leaf2", + "position": [ + 280, + 150 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP dc-leaf2", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ], + "tooltipMetrics": [ + { + "label": "VNI dc-leaf2 40", + "query": "VNI dc-leaf2 40", + "units": "MACs" + } + ] + }, + { + "id": "campus-leaf1", + "label": "campus-leaf1", + "position": [ + 820, + 750 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP campus-leaf1", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ], + "tooltipMetrics": [ + { + "label": "VNI campus-leaf1 50", + "query": "VNI campus-leaf1 50", + "units": "MACs" + } + ] + }, + { + "id": "campus-access1", + "label": "campus-access1", + "position": [ + 100, + 750 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP campus-access1", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "campus-leaf2", + "label": "campus-leaf2", + "position": [ + 1000, + 750 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP campus-leaf2", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ], + "tooltipMetrics": [ + { + "label": "VNI campus-leaf2 50", + "query": "VNI campus-leaf2 50", + "units": "MACs" + } + ] + }, + { + "id": "campus-leaf3", + "label": "campus-leaf3", + "position": [ + 100, + 900 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP campus-leaf3", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ], + "tooltipMetrics": [ + { + "label": "VNI campus-leaf3 50", + "query": "VNI campus-leaf3 50", + "units": "MACs" + } + ] + }, + { + "id": "campus-access2", + "label": "campus-access2", + "position": [ + 280, + 750 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP campus-access2", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "campus-leaf4", + "label": "campus-leaf4", + "position": [ + 280, + 900 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP campus-leaf4", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ], + "tooltipMetrics": [ + { + "label": "VNI campus-leaf4 50", + "query": "VNI campus-leaf4 50", + "units": "MACs" + } + ] + }, + { + "id": "core1", + "label": "core1", + "position": [ + 100, + 450 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP core1", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + }, + { + "id": "core2", + "label": "core2", + "position": [ + 280, + 450 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": false, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "BGP core2", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ] + } + ], + "links": [ + { + "id": "campus-border-leaf2-Ethernet11--campus-spine1-Ethernet6", + "nodes": [ + { + "id": "campus-border-leaf2" + }, + { + "id": "campus-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-border-leaf2 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine1 Ethernet6 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf1-Ethernet11--campus-spine1-Ethernet1", + "nodes": [ + { + "id": "campus-leaf1" + }, + { + "id": "campus-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf1 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine1 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf2-Ethernet11--campus-spine1-Ethernet2", + "nodes": [ + { + "id": "campus-leaf2" + }, + { + "id": "campus-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf2 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine1 Ethernet2 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf3-Ethernet11--campus-spine1-Ethernet3", + "nodes": [ + { + "id": "campus-leaf3" + }, + { + "id": "campus-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf3 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine1 Ethernet3 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf4-Ethernet11--campus-spine1-Ethernet4", + "nodes": [ + { + "id": "campus-leaf4" + }, + { + "id": "campus-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf4 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine1 Ethernet4 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf1-Ethernet11--dc-spine1-Ethernet1", + "nodes": [ + { + "id": "dc-leaf1" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf1 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf4-Ethernet11--dc-spine1-Ethernet4", + "nodes": [ + { + "id": "dc-leaf4" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf4 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet4 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf3-Ethernet11--dc-spine1-Ethernet3", + "nodes": [ + { + "id": "dc-leaf3" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf3 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet3 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf5-Ethernet11--dc-spine1-Ethernet5", + "nodes": [ + { + "id": "dc-leaf5" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf5 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet5 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-border-leaf1-Ethernet11--dc-spine1-Ethernet9", + "nodes": [ + { + "id": "dc-border-leaf1" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-border-leaf1 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet9 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf6-Ethernet11--dc-spine1-Ethernet6", + "nodes": [ + { + "id": "dc-leaf6" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf6 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet6 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf7-Ethernet11--dc-spine1-Ethernet7", + "nodes": [ + { + "id": "dc-leaf7" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf7 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet7 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-border-leaf2-Ethernet11--dc-spine1-Ethernet10", + "nodes": [ + { + "id": "dc-border-leaf2" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-border-leaf2 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet10 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf2-Ethernet11--dc-spine1-Ethernet2", + "nodes": [ + { + "id": "dc-leaf2" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf2 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet2 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf1-Ethernet12--campus-spine2-Ethernet1", + "nodes": [ + { + "id": "campus-leaf1" + }, + { + "id": "campus-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf1 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine2 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf2-Ethernet12--campus-spine2-Ethernet2", + "nodes": [ + { + "id": "campus-leaf2" + }, + { + "id": "campus-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf2 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine2 Ethernet2 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-border-leaf1-Ethernet11--campus-spine1-Ethernet5", + "nodes": [ + { + "id": "campus-border-leaf1" + }, + { + "id": "campus-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-border-leaf1 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine1 Ethernet5 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-border-leaf1-Ethernet12--campus-spine2-Ethernet5", + "nodes": [ + { + "id": "campus-border-leaf1" + }, + { + "id": "campus-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-border-leaf1 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine2 Ethernet5 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-border-leaf1-Ethernet10--campus-border-leaf2-Ethernet10", + "nodes": [ + { + "id": "campus-border-leaf1" + }, + { + "id": "campus-border-leaf2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-border-leaf1 Ethernet10 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-border-leaf2 Ethernet10 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-border-leaf1-Ethernet13--core1-Ethernet3", + "nodes": [ + { + "id": "campus-border-leaf1" + }, + { + "id": "core1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-border-leaf1 Ethernet13 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "core1 Ethernet3 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-border-leaf1-Ethernet14--core2-Ethernet3", + "nodes": [ + { + "id": "campus-border-leaf1" + }, + { + "id": "core2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-border-leaf1 Ethernet14 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "core2 Ethernet3 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf1-Ethernet12--dc-spine2-Ethernet1", + "nodes": [ + { + "id": "dc-leaf1" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf1 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access1-Ethernet1--dc-leaf1-Ethernet1", + "nodes": [ + { + "id": "dc-access1" + }, + { + "id": "dc-leaf1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access1 Ethernet1 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf1 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf1-Ethernet10--dc-leaf2-Ethernet10", + "nodes": [ + { + "id": "dc-leaf1" + }, + { + "id": "dc-leaf2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf1 Ethernet10 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf2 Ethernet10 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-border-leaf2-Ethernet12--campus-spine2-Ethernet6", + "nodes": [ + { + "id": "campus-border-leaf2" + }, + { + "id": "campus-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-border-leaf2 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine2 Ethernet6 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-border-leaf2-Ethernet13--core1-Ethernet4", + "nodes": [ + { + "id": "campus-border-leaf2" + }, + { + "id": "core1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-border-leaf2 Ethernet13 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "core1 Ethernet4 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-border-leaf2-Ethernet14--core2-Ethernet4", + "nodes": [ + { + "id": "campus-border-leaf2" + }, + { + "id": "core2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-border-leaf2 Ethernet14 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "core2 Ethernet4 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf4-Ethernet12--dc-spine2-Ethernet4", + "nodes": [ + { + "id": "dc-leaf4" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf4 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet4 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf3-Ethernet10--dc-leaf4-Ethernet10", + "nodes": [ + { + "id": "dc-leaf3" + }, + { + "id": "dc-leaf4" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf3 Ethernet10 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf4 Ethernet10 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf3-Ethernet12--dc-spine2-Ethernet3", + "nodes": [ + { + "id": "dc-leaf3" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf3 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet3 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf5-Ethernet12--dc-spine2-Ethernet5", + "nodes": [ + { + "id": "dc-leaf5" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf5 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet5 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf5-Ethernet10--dc-leaf6-Ethernet10", + "nodes": [ + { + "id": "dc-leaf5" + }, + { + "id": "dc-leaf6" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf5 Ethernet10 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf6 Ethernet10 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access3-Ethernet1--dc-leaf5-Ethernet1", + "nodes": [ + { + "id": "dc-access3" + }, + { + "id": "dc-leaf5" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access3 Ethernet1 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf5 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-border-leaf1-Ethernet12--dc-spine2-Ethernet9", + "nodes": [ + { + "id": "dc-border-leaf1" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-border-leaf1 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet9 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "core1-Ethernet1--dc-border-leaf1-Ethernet13", + "nodes": [ + { + "id": "core1" + }, + { + "id": "dc-border-leaf1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "core1 Ethernet1 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-border-leaf1 Ethernet13 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf6-Ethernet12--dc-spine2-Ethernet6", + "nodes": [ + { + "id": "dc-leaf6" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf6 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet6 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access1-Ethernet2--dc-leaf2-Ethernet1", + "nodes": [ + { + "id": "dc-access1" + }, + { + "id": "dc-leaf2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access1 Ethernet2 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf2 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access2-Ethernet2--dc-leaf4-Ethernet1", + "nodes": [ + { + "id": "dc-access2" + }, + { + "id": "dc-leaf4" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access2 Ethernet2 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf4 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access2-Ethernet1--dc-leaf3-Ethernet1", + "nodes": [ + { + "id": "dc-access2" + }, + { + "id": "dc-leaf3" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access2 Ethernet1 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf3 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf8-Ethernet11--dc-spine1-Ethernet8", + "nodes": [ + { + "id": "dc-leaf8" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf8 Ethernet11 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet8 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf8-Ethernet12--dc-spine2-Ethernet8", + "nodes": [ + { + "id": "dc-leaf8" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf8 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet8 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf7-Ethernet10--dc-leaf8-Ethernet10", + "nodes": [ + { + "id": "dc-leaf7" + }, + { + "id": "dc-leaf8" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf7 Ethernet10 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf8 Ethernet10 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access4-Ethernet2--dc-leaf8-Ethernet1", + "nodes": [ + { + "id": "dc-access4" + }, + { + "id": "dc-leaf8" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access4 Ethernet2 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf8 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf7-Ethernet12--dc-spine2-Ethernet7", + "nodes": [ + { + "id": "dc-leaf7" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf7 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet7 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access4-Ethernet1--dc-leaf7-Ethernet1", + "nodes": [ + { + "id": "dc-access4" + }, + { + "id": "dc-leaf7" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access4 Ethernet1 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf7 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access3-Ethernet2--dc-leaf6-Ethernet1", + "nodes": [ + { + "id": "dc-access3" + }, + { + "id": "dc-leaf6" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access3 Ethernet2 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf6 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-border-leaf2-Ethernet12--dc-spine2-Ethernet10", + "nodes": [ + { + "id": "dc-border-leaf2" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-border-leaf2 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet10 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-border-leaf1-Ethernet10--dc-border-leaf2-Ethernet10", + "nodes": [ + { + "id": "dc-border-leaf1" + }, + { + "id": "dc-border-leaf2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-border-leaf1 Ethernet10 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-border-leaf2 Ethernet10 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "core1-Ethernet2--dc-border-leaf2-Ethernet13", + "nodes": [ + { + "id": "core1" + }, + { + "id": "dc-border-leaf2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "core1 Ethernet2 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-border-leaf2 Ethernet13 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "core2-Ethernet2--dc-border-leaf2-Ethernet14", + "nodes": [ + { + "id": "core2" + }, + { + "id": "dc-border-leaf2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "core2 Ethernet2 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-border-leaf2 Ethernet14 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf2-Ethernet12--dc-spine2-Ethernet2", + "nodes": [ + { + "id": "dc-leaf2" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf2 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet2 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-access1-Ethernet1--campus-leaf1-Ethernet1", + "nodes": [ + { + "id": "campus-access1" + }, + { + "id": "campus-leaf1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-access1 Ethernet1 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-leaf1 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-access1-Ethernet2--campus-leaf2-Ethernet1", + "nodes": [ + { + "id": "campus-access1" + }, + { + "id": "campus-leaf2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-access1 Ethernet2 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-leaf2 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf1-Ethernet10--campus-leaf2-Ethernet10", + "nodes": [ + { + "id": "campus-leaf1" + }, + { + "id": "campus-leaf2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf1 Ethernet10 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-leaf2 Ethernet10 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf3-Ethernet12--campus-spine2-Ethernet3", + "nodes": [ + { + "id": "campus-leaf3" + }, + { + "id": "campus-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf3 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine2 Ethernet3 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-access2-Ethernet1--campus-leaf3-Ethernet1", + "nodes": [ + { + "id": "campus-access2" + }, + { + "id": "campus-leaf3" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-access2 Ethernet1 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-leaf3 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf4-Ethernet12--campus-spine2-Ethernet4", + "nodes": [ + { + "id": "campus-leaf4" + }, + { + "id": "campus-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf4 Ethernet12 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine2 Ethernet4 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf3-Ethernet10--campus-leaf4-Ethernet10", + "nodes": [ + { + "id": "campus-leaf3" + }, + { + "id": "campus-leaf4" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf3 Ethernet10 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-leaf4 Ethernet10 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-access2-Ethernet2--campus-leaf4-Ethernet1", + "nodes": [ + { + "id": "campus-access2" + }, + { + "id": "campus-leaf4" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-access2 Ethernet2 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-leaf4 Ethernet1 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "core2-Ethernet1--dc-border-leaf1-Ethernet14", + "nodes": [ + { + "id": "core2" + }, + { + "id": "dc-border-leaf1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "core2 Ethernet1 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-border-leaf1 Ethernet14 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "core1-Ethernet5--core2-Ethernet5", + "nodes": [ + { + "id": "core1" + }, + { + "id": "core2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "core1 Ethernet5 tx", + "labelOffset": 55, + "anchor": "Right", + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "core2 Ethernet5 rx", + "labelOffset": 55, + "anchor": "Left", + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + } + ], + "scale": [ + { + "percent": 0, + "color": "#5794F2" + }, + { + "percent": 70, + "color": "#FA6400" + }, + { + "percent": 90, + "color": "#C4162A" + } + ], + "settings": { + "panel": { + "backgroundColor": "#212124", + "panelSize": { + "width": 1600, + "height": 1000 + }, + "zoomScale": 0, + "offset": { + "x": 0, + "y": 0 + }, + "showTimestamp": true, + "grid": { + "enabled": false, + "size": 10, + "guidesEnabled": false + } + }, + "link": { + "spacing": { + "horizontal": 10, + "vertical": 5 + }, + "stroke": { + "color": "#CCCCDC" + }, + "label": { + "background": "#FFFFFF", + "border": "#000000", + "font": "#000000" + }, + "showAllWithPercentage": false, + "defaultUnits": "bps" + }, + "tooltip": { + "fontSize": 10, + "textColor": "#CCCCDC", + "backgroundColor": "#1A1B1F", + "inboundColor": "#73BF69", + "outboundColor": "#5794F2", + "scaleToBandwidth": false + }, + "fontSizing": { + "node": 12, + "link": 10 + }, + "scale": { + "position": { + "x": 0, + "y": 0 + }, + "size": { + "width": 150, + "height": 100 + }, + "title": "Utilization", + "fontSizing": { + "title": 10, + "threshold": 9 + } + } + } + } + } + } + ] + }, + "overwrite": true +} diff --git a/scripts/generate_weathermap.py b/scripts/generate_weathermap.py new file mode 100644 index 0000000..b208163 --- /dev/null +++ b/scripts/generate_weathermap.py @@ -0,0 +1,457 @@ +#!/usr/bin/env python3 +"""Generate a weathermap-ng panel config from IPFabric topology + gnmic/Prometheus +metrics, and optionally provision it into a Grafana dashboard. + +Data sources (see gitea issues #44, #47, #48): + - IPFabric REST API: device inventory + connectivity-matrix (topology) + - Prometheus (gnmic exporter, configs/prometheus/prometheus.yml): live label + values, used both to validate the IPFabric->gnmic interface-name mapping + and to resolve which VTEPs/VLANs actually have VXLAN data. + +Usage: + python3 scripts/generate_weathermap.py [--output PATH] [--provision] + +Environment: + IPFABRIC_URL e.g. https://ipfabric.example.com + IPFABRIC_TOKEN API token (Inventory/Snapshots read access) + IPFABRIC_SNAPSHOT snapshot id, default "$last" + PROMETHEUS_URL default http://172.16.0.71:9090 (in-topology instance) + GRAFANA_URL required with --provision + GRAFANA_TOKEN required with --provision + GRAFANA_DATASOURCE_UID Prometheus datasource UID in Grafana, required with --provision + GRAFANA_DASHBOARD_UID default "evpn-vxlan-fabric-weathermap" + GRAFANA_WEATHERMAP_PLUGIN_ID default "allamiro-weathermap-panel" -- confirm + against the actually installed plugin id before provisioning. +""" +import argparse +import json +import os +import re +import sys +import urllib.request +import urllib.error +import urllib.parse + +WEATHERMAP_SCHEMA_VERSION = 14 + +# IPFabric abbreviated interface prefixes -> gnmic/OpenConfig full names. +# Longest-prefix-first so e.g. "Ma" doesn't shadow a hypothetical multi-letter clash. +INTERFACE_PREFIX_ALIASES = { + "Et": "Ethernet", + "Po": "Port-Channel", + "Lo": "Loopback", + "Vl": "Vlan", + "Ma": "Management", +} + +SITE_ORDER = ["dc", "core", "campus"] +GRID_COLUMNS = 6 +GRID_SPACING_X = 180 +GRID_SPACING_Y = 150 +SITE_BAND_Y = {"dc": 0, "core": 450, "campus": 750} + +NODE_COLORS = {"font": "#ffffff", "background": "#22252b", "border": "#5794F2", "statusDown": "#F2495C"} +STATUS_VALUE_MAPPINGS = [{"value": 0, "color": "#F2495C"}, {"value": 1, "color": "#73BF69"}] +DEFAULT_LINK_BANDWIDTH_BPS = 10_000_000_000 # 10G fallback when IPFabric speed is missing + + +def env(name, default=None, required=False): + val = os.environ.get(name, default) + if required and not val: + sys.exit(f"Missing required environment variable: {name}") + return val + + +# -------------------------------------------------------------------------- +# IPFabric +# -------------------------------------------------------------------------- + +def ipfabric_request(base_url, token, path, body): + req = urllib.request.Request( + f"{base_url.rstrip('/')}/api{path}", + data=json.dumps(body).encode(), + headers={"X-API-Token": token, "Content-Type": "application/json"}, + method="POST", + ) + with urllib.request.urlopen(req, timeout=30) as resp: + return json.load(resp)["data"] + + +def fetch_devices(base_url, token, snapshot): + return ipfabric_request( + base_url, token, "/tables/inventory/devices", + {"columns": ["hostname", "siteName", "vendor", "model", "sn"], "snapshot": snapshot, + "pagination": {"limit": 1000, "start": 0}}, + ) + + +def fetch_connectivity_matrix(base_url, token, snapshot): + return ipfabric_request( + base_url, token, "/tables/interfaces/connectivity-matrix", + {"columns": ["localHost", "localInt", "remoteHost", "remoteInt", "protocol"], "snapshot": snapshot, + "pagination": {"limit": 5000, "start": 0}}, + ) + + +def fetch_interface_speeds(base_url, token, snapshot): + rows = ipfabric_request( + base_url, token, "/tables/inventory/interfaces", + {"columns": ["hostname", "intName", "speed"], "snapshot": snapshot, + "pagination": {"limit": 5000, "start": 0}}, + ) + speeds = {} + for row in rows: + speed = row.get("speed") + if speed: + speeds[(row["hostname"], row["intName"])] = int(speed) + return speeds + + +# -------------------------------------------------------------------------- +# Prometheus (validation + VXLAN discovery) +# -------------------------------------------------------------------------- + +def prom_query(prometheus_url, promql): + url = f"{prometheus_url.rstrip('/')}/api/v1/query?query=" + urllib.parse.quote(promql) + with urllib.request.urlopen(url, timeout=15) as resp: + payload = json.load(resp) + if payload["status"] != "success": + sys.exit(f"Prometheus query failed: {promql}") + return payload["data"]["result"] + + +def known_interface_pairs(prometheus_url): + """(device, interface) pairs that actually exist in the gnmic exporter, + used to validate the IPFabric->gnmic interface alias before trusting it.""" + results = prom_query(prometheus_url, "interfaces_interface_state_oper_status") + return {(m["metric"]["device"], m["metric"]["interface"]) for m in results} + + +def known_vtep_vlan_pairs(prometheus_url): + """(device, vlan) pairs with a live VLAN-to-VNI mapping -- these are the + VTEP nodes eligible for a VXLAN MAC-count tooltip metric.""" + results = prom_query(prometheus_url, "interfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni") + return {(m["metric"]["device"], m["metric"]["vlan"]) for m in results} + + +# -------------------------------------------------------------------------- +# Interface aliasing (IPFabric abbreviated name -> gnmic full name) +# -------------------------------------------------------------------------- + +def alias_interface(ipf_name): + match = re.match(r"^([A-Za-z]+)(\d.*)$", ipf_name) + if not match: + return ipf_name + prefix, rest = match.groups() + full = INTERFACE_PREFIX_ALIASES.get(prefix) + if full is None: + return ipf_name + return f"{full}{rest}" + + +# -------------------------------------------------------------------------- +# Topology processing +# -------------------------------------------------------------------------- + +def build_layout(devices): + by_site = {} + for dev in devices: + by_site.setdefault(dev["siteName"], []).append(dev["hostname"]) + + positions = {} + for site in SITE_ORDER: + band_y = SITE_BAND_Y.get(site, 0) + for idx, host in enumerate(sorted(by_site.get(site, []))): + col, row = idx % GRID_COLUMNS, idx // GRID_COLUMNS + positions[host] = [100 + col * GRID_SPACING_X, band_y + row * GRID_SPACING_Y] + + # Any site not in SITE_ORDER (shouldn't happen given the naming convention, + # but don't silently drop nodes if it does) gets stacked below everything else. + extra_band_y = max(SITE_BAND_Y.values()) + 300 + for site, hosts in by_site.items(): + if site in SITE_ORDER: + continue + for idx, host in enumerate(sorted(hosts)): + col, row = idx % GRID_COLUMNS, idx // GRID_COLUMNS + positions[host] = [100 + col * GRID_SPACING_X, extra_band_y + row * GRID_SPACING_Y] + return positions + + +def dedupe_links(connectivity_matrix): + """connectivity-matrix reports each physical link twice (once from each + side), plus management-plane (Management0) neighbor entries, plus one row + per 802.1Q subinterface on trunked ports (e.g. Et13.100/Et13.200, used for + the gold VRF stitching on Core -- see README). Subinterfaces ride the same + physical port as their parent interface, so they'd otherwise show up as + bogus duplicate parallel links with permanently-unresolvable queries + (gnmic only subscribes to physical interface counters). Keep only + physical Ethernet-to-Ethernet links, one entry per unordered + (host,int)-(host,int) pair.""" + seen = set() + links = [] + for row in connectivity_matrix: + local_int, remote_int = row["localInt"], row["remoteInt"] + if "." in local_int or "." in remote_int: + continue + if not (local_int.startswith("Et") and remote_int.startswith("Et")): + continue + side_a = (row["localHost"], local_int) + side_z = (row["remoteHost"], remote_int) + key = tuple(sorted([side_a, side_z])) + if key in seen: + continue + seen.add(key) + links.append({"a_host": key[0][0], "a_int": key[0][1], "z_host": key[1][0], "z_int": key[1][1]}) + return links + + +# -------------------------------------------------------------------------- +# Weathermap assembly +# -------------------------------------------------------------------------- + +def build_weathermap(devices, links, interface_speeds, positions, prometheus_url, mismatches): + hostnames = [d["hostname"] for d in devices] + host_regex = "|".join(re.escape(h) for h in hostnames) + + known_pairs = known_interface_pairs(prometheus_url) + vtep_vlan_pairs = known_vtep_vlan_pairs(prometheus_url) + vtep_hosts = sorted({dev for dev, _ in vtep_vlan_pairs}) + + def resolve_and_check(host, ipf_int, side_label): + gnmic_int = alias_interface(ipf_int) + if (host, gnmic_int) not in known_pairs: + mismatches.append( + f"{host} {ipf_int} -> {gnmic_int} ({side_label}): no matching series in " + f"interfaces_interface_state_oper_status -- link will reference a query that " + f"resolves to no data until the gnmic/IPFabric interface names are aligned " + f"(see #47/#48 interface aliasing fallback)" + ) + return gnmic_int + + # -- nodes -- + nodes = [] + for dev in devices: + host = dev["hostname"] + node = { + "id": host, + "label": host, + "position": positions[host], + "isConnection": False, + "useConstantSpacing": False, + "compactVerticalLinks": False, + "padding": {"horizontal": 12, "vertical": 6}, + "colors": dict(NODE_COLORS), + "nodeIcon": None, + "statusQuery": f"BGP {host}", + "nodeStatusColorTarget": "border", + "statusValueMappings": [dict(m) for m in STATUS_VALUE_MAPPINGS], + } + if host in vtep_hosts: + node["tooltipMetrics"] = [ + {"label": f"VNI {host} {vlan}", "query": f"VNI {host} {vlan}", "units": "MACs"} + for _, vlan in sorted(v for v in vtep_vlan_pairs if v[0] == host) + ] + nodes.append(node) + + # -- links -- + link_defs = [] + interface_regex_parts = set() + for link in links: + a_gnmic_int = resolve_and_check(link["a_host"], link["a_int"], "side A") + z_gnmic_int = resolve_and_check(link["z_host"], link["z_int"], "side Z") + interface_regex_parts.add(re.escape(a_gnmic_int)) + interface_regex_parts.add(re.escape(z_gnmic_int)) + + a_bw = interface_speeds.get((link["a_host"], link["a_int"]), DEFAULT_LINK_BANDWIDTH_BPS) + z_bw = interface_speeds.get((link["z_host"], link["z_int"]), DEFAULT_LINK_BANDWIDTH_BPS) + if (link["a_host"], link["a_int"]) not in interface_speeds: + mismatches.append(f"{link['a_host']} {link['a_int']}: no IPFabric speed, defaulting bandwidth to {DEFAULT_LINK_BANDWIDTH_BPS}") + if (link["z_host"], link["z_int"]) not in interface_speeds: + mismatches.append(f"{link['z_host']} {link['z_int']}: no IPFabric speed, defaulting bandwidth to {DEFAULT_LINK_BANDWIDTH_BPS}") + + link_defs.append({ + "id": f"{link['a_host']}-{a_gnmic_int}--{link['z_host']}-{z_gnmic_int}", + "nodes": [{"id": link["a_host"]}, {"id": link["z_host"]}], + "sides": { + "A": { + "bandwidth": a_bw, + "query": f"{link['a_host']} {a_gnmic_int} tx", + "labelOffset": 55, "anchor": "Right", "dashboardLink": "", + }, + "Z": { + "bandwidth": z_bw, + "query": f"{link['z_host']} {z_gnmic_int} rx", + "labelOffset": 55, "anchor": "Left", "dashboardLink": "", + }, + }, + "units": "bps", + "arrows": {"width": 8, "height": 10, "offset": 2}, + "stroke": 5, + "showThroughputPercentage": False, + }) + + interface_regex = "|".join(sorted(interface_regex_parts)) + + # -- targets (one query per metric family, per task spec) -- + targets = [ + { + "refId": "A", + "expr": f'min by (device) (network_instances_network_instance_protocols_protocol_bgp_neighbors_neighbor_state_session_state{{network_instance_name="default", device=~"{host_regex}"}})', + "legendFormat": "BGP {{device}}", + }, + { + "refId": "B", + "expr": f'rate(interfaces_interface_state_counters_out_octets{{device=~"{host_regex}", interface=~"{interface_regex}"}}[5m]) * 8', + "legendFormat": "{{device}} {{interface}} tx", + }, + { + "refId": "C", + "expr": f'rate(interfaces_interface_state_counters_in_octets{{device=~"{host_regex}", interface=~"{interface_regex}"}}[5m]) * 8', + "legendFormat": "{{device}} {{interface}} rx", + }, + ] + if vtep_hosts: + vtep_regex = "|".join(re.escape(h) for h in vtep_hosts) + # Verbatim join from #44 "VXLAN (MAC count per VNI)", scoped to VTEP nodes. + targets.append({ + "refId": "D", + "expr": ( + f'count by (device, vlan) (network_instances_network_instance_fdb_mac_table_entries_entry_vlan{{device=~"{vtep_regex}"}})\n' + f'* on(device, vlan) group_left(vlan_to_vni_state_vni)\n' + f'interfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni{{device=~"{vtep_regex}"}}' + ), + "legendFormat": "VNI {{device}} {{vlan}}", + }) + + weathermap = { + "version": WEATHERMAP_SCHEMA_VERSION, + "id": "evpn-vxlan-fabric-weathermap", + "nodes": nodes, + "links": link_defs, + "scale": [ + {"percent": 0, "color": "#5794F2"}, + {"percent": 70, "color": "#FA6400"}, + {"percent": 90, "color": "#C4162A"}, + ], + "settings": { + "panel": {"backgroundColor": "#212124", "panelSize": {"width": 1600, "height": 1000}, + "zoomScale": 0, "offset": {"x": 0, "y": 0}, "showTimestamp": True, + "grid": {"enabled": False, "size": 10, "guidesEnabled": False}}, + "link": {"spacing": {"horizontal": 10, "vertical": 5}, "stroke": {"color": "#CCCCDC"}, + "label": {"background": "#FFFFFF", "border": "#000000", "font": "#000000"}, + "showAllWithPercentage": False, "defaultUnits": "bps"}, + "tooltip": {"fontSize": 10, "textColor": "#CCCCDC", "backgroundColor": "#1A1B1F", + "inboundColor": "#73BF69", "outboundColor": "#5794F2", "scaleToBandwidth": False}, + "fontSizing": {"node": 12, "link": 10}, + "scale": {"position": {"x": 0, "y": 0}, "size": {"width": 150, "height": 100}, + "title": "Utilization", "fontSizing": {"title": 10, "threshold": 9}}, + }, + } + return weathermap, targets + + +# -------------------------------------------------------------------------- +# Grafana provisioning +# -------------------------------------------------------------------------- + +def build_dashboard(weathermap, targets, dashboard_uid, datasource_uid, plugin_id): + return { + "dashboard": { + "uid": dashboard_uid, + "title": "EVPN/VXLAN Fabric Weathermap", + "tags": ["evpn", "vxlan", "weathermap", "auto-generated"], + "timezone": "browser", + "schemaVersion": 39, + "version": 0, + "panels": [ + { + "id": 1, + "type": plugin_id, + "title": "Fabric Weathermap", + "gridPos": {"h": 24, "w": 24, "x": 0, "y": 0}, + "datasource": {"type": "prometheus", "uid": datasource_uid}, + "targets": [dict(t, datasource={"type": "prometheus", "uid": datasource_uid}) for t in targets], + "options": {"weathermap": weathermap}, + } + ], + }, + "overwrite": True, + } + + +def provision_to_grafana(grafana_url, api_token, dashboard_payload): + req = urllib.request.Request( + f"{grafana_url.rstrip('/')}/api/dashboards/db", + data=json.dumps(dashboard_payload).encode(), + headers={"Authorization": f"Bearer {api_token}", "Content-Type": "application/json"}, + method="POST", + ) + try: + with urllib.request.urlopen(req, timeout=30) as resp: + return json.load(resp) + except urllib.error.HTTPError as e: + sys.exit(f"Grafana provisioning failed: HTTP {e.code} {e.read().decode()}") + + +# -------------------------------------------------------------------------- + +def main(): + parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument("--output", default="configs/grafana/weathermap-dashboard.json", + help="where to write the generated dashboard-as-code JSON") + parser.add_argument("--provision", action="store_true", + help="also POST the dashboard to the Grafana API (requires GRAFANA_* env vars)") + args = parser.parse_args() + + ipfabric_url = env("IPFABRIC_URL", required=True) + ipfabric_token = env("IPFABRIC_TOKEN", required=True) + snapshot = env("IPFABRIC_SNAPSHOT", "$last") + prometheus_url = env("PROMETHEUS_URL", "http://172.16.0.71:9090") + + print(f"Fetching devices from IPFabric ({ipfabric_url}, snapshot={snapshot})...") + devices = fetch_devices(ipfabric_url, ipfabric_token, snapshot) + print(f" {len(devices)} devices") + + print("Fetching connectivity-matrix...") + matrix = fetch_connectivity_matrix(ipfabric_url, ipfabric_token, snapshot) + links = dedupe_links(matrix) + print(f" {len(links)} fabric links after Management-plane filter + dedup ({len(matrix)} raw rows)") + + print("Fetching interface speeds...") + interface_speeds = fetch_interface_speeds(ipfabric_url, ipfabric_token, snapshot) + + positions = build_layout(devices) + + mismatches = [] + print(f"Cross-checking interface names against live exporter ({prometheus_url})...") + weathermap, targets = build_weathermap(devices, links, interface_speeds, positions, prometheus_url, mismatches) + + if mismatches: + print(f"\n{len(mismatches)} interface-name / bandwidth mismatch(es) found (link kept, not dropped):", file=sys.stderr) + for m in mismatches: + print(f" - {m}", file=sys.stderr) + print(file=sys.stderr) + + dashboard_uid = env("GRAFANA_DASHBOARD_UID", "evpn-vxlan-fabric-weathermap") + datasource_uid = env("GRAFANA_DATASOURCE_UID", "PROMETHEUS_DATASOURCE_UID_PLACEHOLDER") + plugin_id = env("GRAFANA_WEATHERMAP_PLUGIN_ID", "allamiro-weathermap-panel") + dashboard_payload = build_dashboard(weathermap, targets, dashboard_uid, datasource_uid, plugin_id) + + os.makedirs(os.path.dirname(args.output) or ".", exist_ok=True) + with open(args.output, "w") as f: + json.dump(dashboard_payload, f, indent=2) + f.write("\n") + print(f"Wrote {args.output} ({len(weathermap['nodes'])} nodes, {len(weathermap['links'])} links)") + + if args.provision: + grafana_url = env("GRAFANA_URL", required=True) + grafana_token = env("GRAFANA_TOKEN", required=True) + if datasource_uid == "PROMETHEUS_DATASOURCE_UID_PLACEHOLDER": + sys.exit("Refusing to provision: set GRAFANA_DATASOURCE_UID to the real Prometheus datasource UID first") + print(f"Provisioning dashboard '{dashboard_uid}' to {grafana_url}...") + result = provision_to_grafana(grafana_url, grafana_token, dashboard_payload) + print(f" {result.get('status')}: {result.get('url')}") + + +if __name__ == "__main__": + main() From 0aff25f50981a5c861c8c7b42f38246011f505d1 Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Thu, 9 Jul 2026 17:08:51 +0000 Subject: [PATCH 09/28] Fix PromQL regex escaping for hyphenated hostnames re.escape() escapes '-' as '\-', which Python's regex engine accepts but PromQL's RE2 engine rejects outright (every hostname in this lab is hyphenated, e.g. dc-leaf1). All 4 panel targets were failing with "unknown escape sequence U+002D" until now. Also swaps the dashboard to the newly-created NetLab datasource, which actually has gnmic data (the previously-wired external Prometheus datasource had none). Refs #48 --- configs/grafana/weathermap-dashboard.json | 18 +++++++++--------- scripts/generate_weathermap.py | 17 +++++++++++++---- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/configs/grafana/weathermap-dashboard.json b/configs/grafana/weathermap-dashboard.json index 8d0019b..ff51c79 100644 --- a/configs/grafana/weathermap-dashboard.json +++ b/configs/grafana/weathermap-dashboard.json @@ -24,43 +24,43 @@ }, "datasource": { "type": "prometheus", - "uid": "aflu2t514uf40a" + "uid": "cfrlusac89se8a" }, "targets": [ { "refId": "A", - "expr": "min by (device) (network_instances_network_instance_protocols_protocol_bgp_neighbors_neighbor_state_session_state{network_instance_name=\"default\", device=~\"campus\\-spine1|dc\\-spine1|dc\\-spine2|campus\\-spine2|campus\\-border\\-leaf1|dc\\-leaf1|campus\\-border\\-leaf2|dc\\-leaf4|dc\\-leaf3|dc\\-leaf5|dc\\-border\\-leaf1|dc\\-leaf6|dc\\-access1|dc\\-access2|dc\\-leaf8|dc\\-leaf7|dc\\-access4|dc\\-access3|dc\\-border\\-leaf2|dc\\-leaf2|campus\\-leaf1|campus\\-access1|campus\\-leaf2|campus\\-leaf3|campus\\-access2|campus\\-leaf4|core1|core2\"})", + "expr": "min by (device) (network_instances_network_instance_protocols_protocol_bgp_neighbors_neighbor_state_session_state{network_instance_name=\"default\", device=~\"campus-spine1|dc-spine1|dc-spine2|campus-spine2|campus-border-leaf1|dc-leaf1|campus-border-leaf2|dc-leaf4|dc-leaf3|dc-leaf5|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-leaf8|dc-leaf7|dc-access4|dc-access3|dc-border-leaf2|dc-leaf2|campus-leaf1|campus-access1|campus-leaf2|campus-leaf3|campus-access2|campus-leaf4|core1|core2\"})", "legendFormat": "BGP {{device}}", "datasource": { "type": "prometheus", - "uid": "aflu2t514uf40a" + "uid": "cfrlusac89se8a" } }, { "refId": "B", - "expr": "rate(interfaces_interface_state_counters_out_octets{device=~\"campus\\-spine1|dc\\-spine1|dc\\-spine2|campus\\-spine2|campus\\-border\\-leaf1|dc\\-leaf1|campus\\-border\\-leaf2|dc\\-leaf4|dc\\-leaf3|dc\\-leaf5|dc\\-border\\-leaf1|dc\\-leaf6|dc\\-access1|dc\\-access2|dc\\-leaf8|dc\\-leaf7|dc\\-access4|dc\\-access3|dc\\-border\\-leaf2|dc\\-leaf2|campus\\-leaf1|campus\\-access1|campus\\-leaf2|campus\\-leaf3|campus\\-access2|campus\\-leaf4|core1|core2\", interface=~\"Ethernet1|Ethernet10|Ethernet11|Ethernet12|Ethernet13|Ethernet14|Ethernet2|Ethernet3|Ethernet4|Ethernet5|Ethernet6|Ethernet7|Ethernet8|Ethernet9\"}[5m]) * 8", + "expr": "rate(interfaces_interface_state_counters_out_octets{device=~\"campus-spine1|dc-spine1|dc-spine2|campus-spine2|campus-border-leaf1|dc-leaf1|campus-border-leaf2|dc-leaf4|dc-leaf3|dc-leaf5|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-leaf8|dc-leaf7|dc-access4|dc-access3|dc-border-leaf2|dc-leaf2|campus-leaf1|campus-access1|campus-leaf2|campus-leaf3|campus-access2|campus-leaf4|core1|core2\", interface=~\"Ethernet1|Ethernet10|Ethernet11|Ethernet12|Ethernet13|Ethernet14|Ethernet2|Ethernet3|Ethernet4|Ethernet5|Ethernet6|Ethernet7|Ethernet8|Ethernet9\"}[5m]) * 8", "legendFormat": "{{device}} {{interface}} tx", "datasource": { "type": "prometheus", - "uid": "aflu2t514uf40a" + "uid": "cfrlusac89se8a" } }, { "refId": "C", - "expr": "rate(interfaces_interface_state_counters_in_octets{device=~\"campus\\-spine1|dc\\-spine1|dc\\-spine2|campus\\-spine2|campus\\-border\\-leaf1|dc\\-leaf1|campus\\-border\\-leaf2|dc\\-leaf4|dc\\-leaf3|dc\\-leaf5|dc\\-border\\-leaf1|dc\\-leaf6|dc\\-access1|dc\\-access2|dc\\-leaf8|dc\\-leaf7|dc\\-access4|dc\\-access3|dc\\-border\\-leaf2|dc\\-leaf2|campus\\-leaf1|campus\\-access1|campus\\-leaf2|campus\\-leaf3|campus\\-access2|campus\\-leaf4|core1|core2\", interface=~\"Ethernet1|Ethernet10|Ethernet11|Ethernet12|Ethernet13|Ethernet14|Ethernet2|Ethernet3|Ethernet4|Ethernet5|Ethernet6|Ethernet7|Ethernet8|Ethernet9\"}[5m]) * 8", + "expr": "rate(interfaces_interface_state_counters_in_octets{device=~\"campus-spine1|dc-spine1|dc-spine2|campus-spine2|campus-border-leaf1|dc-leaf1|campus-border-leaf2|dc-leaf4|dc-leaf3|dc-leaf5|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-leaf8|dc-leaf7|dc-access4|dc-access3|dc-border-leaf2|dc-leaf2|campus-leaf1|campus-access1|campus-leaf2|campus-leaf3|campus-access2|campus-leaf4|core1|core2\", interface=~\"Ethernet1|Ethernet10|Ethernet11|Ethernet12|Ethernet13|Ethernet14|Ethernet2|Ethernet3|Ethernet4|Ethernet5|Ethernet6|Ethernet7|Ethernet8|Ethernet9\"}[5m]) * 8", "legendFormat": "{{device}} {{interface}} rx", "datasource": { "type": "prometheus", - "uid": "aflu2t514uf40a" + "uid": "cfrlusac89se8a" } }, { "refId": "D", - "expr": "count by (device, vlan) (network_instances_network_instance_fdb_mac_table_entries_entry_vlan{device=~\"campus\\-leaf1|campus\\-leaf2|campus\\-leaf3|campus\\-leaf4|dc\\-leaf1|dc\\-leaf2|dc\\-leaf5|dc\\-leaf6\"})\n* on(device, vlan) group_left(vlan_to_vni_state_vni)\ninterfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni{device=~\"campus\\-leaf1|campus\\-leaf2|campus\\-leaf3|campus\\-leaf4|dc\\-leaf1|dc\\-leaf2|dc\\-leaf5|dc\\-leaf6\"}", + "expr": "count by (device, vlan) (network_instances_network_instance_fdb_mac_table_entries_entry_vlan{device=~\"campus-leaf1|campus-leaf2|campus-leaf3|campus-leaf4|dc-leaf1|dc-leaf2|dc-leaf5|dc-leaf6\"})\n* on(device, vlan) group_left(vlan_to_vni_state_vni)\ninterfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni{device=~\"campus-leaf1|campus-leaf2|campus-leaf3|campus-leaf4|dc-leaf1|dc-leaf2|dc-leaf5|dc-leaf6\"}", "legendFormat": "VNI {{device}} {{vlan}}", "datasource": { "type": "prometheus", - "uid": "aflu2t514uf40a" + "uid": "cfrlusac89se8a" } } ], diff --git a/scripts/generate_weathermap.py b/scripts/generate_weathermap.py index b208163..0172336 100644 --- a/scripts/generate_weathermap.py +++ b/scripts/generate_weathermap.py @@ -149,6 +149,15 @@ def alias_interface(ipf_name): return f"{full}{rest}" +def promql_escape(s): + """re.escape() escapes '-' as '\\-', which Python's own regex engine + accepts but PromQL's RE2-based engine rejects ("unknown escape sequence + U+002D '-'") -- and every hostname in this lab contains hyphens. '-' is + not a regex metacharacter outside a character class, so it's safe to + leave unescaped.""" + return re.escape(s).replace("\\-", "-") + + # -------------------------------------------------------------------------- # Topology processing # -------------------------------------------------------------------------- @@ -211,7 +220,7 @@ def dedupe_links(connectivity_matrix): def build_weathermap(devices, links, interface_speeds, positions, prometheus_url, mismatches): hostnames = [d["hostname"] for d in devices] - host_regex = "|".join(re.escape(h) for h in hostnames) + host_regex = "|".join(promql_escape(h) for h in hostnames) known_pairs = known_interface_pairs(prometheus_url) vtep_vlan_pairs = known_vtep_vlan_pairs(prometheus_url) @@ -259,8 +268,8 @@ def build_weathermap(devices, links, interface_speeds, positions, prometheus_url for link in links: a_gnmic_int = resolve_and_check(link["a_host"], link["a_int"], "side A") z_gnmic_int = resolve_and_check(link["z_host"], link["z_int"], "side Z") - interface_regex_parts.add(re.escape(a_gnmic_int)) - interface_regex_parts.add(re.escape(z_gnmic_int)) + interface_regex_parts.add(promql_escape(a_gnmic_int)) + interface_regex_parts.add(promql_escape(z_gnmic_int)) a_bw = interface_speeds.get((link["a_host"], link["a_int"]), DEFAULT_LINK_BANDWIDTH_BPS) z_bw = interface_speeds.get((link["z_host"], link["z_int"]), DEFAULT_LINK_BANDWIDTH_BPS) @@ -311,7 +320,7 @@ def build_weathermap(devices, links, interface_speeds, positions, prometheus_url }, ] if vtep_hosts: - vtep_regex = "|".join(re.escape(h) for h in vtep_hosts) + vtep_regex = "|".join(promql_escape(h) for h in vtep_hosts) # Verbatim join from #44 "VXLAN (MAC count per VNI)", scoped to VTEP nodes. targets.append({ "refId": "D", From 36c93d9ecdf9fc8ae280f2595a20efdb2afea79a Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Thu, 9 Jul 2026 17:13:27 +0000 Subject: [PATCH 10/28] Fix missing/wrong anchor fields crashing the weathermap panel tamirsuliman-weathermap-panel (the plugin actually installed, not the allamiro fork the schema research was done against) requires node.anchors -- a numLinks/numFilledLinks tally per anchor position -- and expects link.sides.*.anchor as the plugin's numeric TS enum value (Center=0, Top=1, Bottom=2, Left=3, Right=4), not an anchor name string. Omitting anchors entirely (per the "safe to omit, auto-defaulted" schema-research note, which turns out to be fork-specific) crashed the panel on load with "TypeError: undefined is not an object (evaluating 'i.anchors[0]')". Enum values reverse-engineered from the installed plugin's module.js. Refs #48 --- configs/grafana/weathermap-dashboard.json | 900 ++++++++++++++++++---- scripts/generate_weathermap.py | 19 +- 2 files changed, 775 insertions(+), 144 deletions(-) diff --git a/configs/grafana/weathermap-dashboard.json b/configs/grafana/weathermap-dashboard.json index ff51c79..9a848ee 100644 --- a/configs/grafana/weathermap-dashboard.json +++ b/configs/grafana/weathermap-dashboard.json @@ -101,7 +101,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 6, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 0, + "numFilledLinks": 0 + } + } }, { "id": "dc-spine1", @@ -135,7 +157,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 10, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 0, + "numFilledLinks": 0 + } + } }, { "id": "dc-spine2", @@ -169,7 +213,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 10, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 0, + "numFilledLinks": 0 + } + } }, { "id": "campus-spine2", @@ -203,7 +269,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 6, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 0, + "numFilledLinks": 0 + } + } }, { "id": "campus-border-leaf1", @@ -237,7 +325,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 5, + "numFilledLinks": 0 + } + } }, { "id": "dc-leaf1", @@ -272,6 +382,28 @@ "color": "#73BF69" } ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 1, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 3, + "numFilledLinks": 0 + } + }, "tooltipMetrics": [ { "label": "VNI dc-leaf1 40", @@ -312,7 +444,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 1, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 4, + "numFilledLinks": 0 + } + } }, { "id": "dc-leaf4", @@ -346,7 +500,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 2, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + } }, { "id": "dc-leaf3", @@ -380,7 +556,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 1, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 3, + "numFilledLinks": 0 + } + } }, { "id": "dc-leaf5", @@ -415,6 +613,28 @@ "color": "#73BF69" } ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 1, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 3, + "numFilledLinks": 0 + } + }, "tooltipMetrics": [ { "label": "VNI dc-leaf5 40", @@ -455,7 +675,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 2, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 3, + "numFilledLinks": 0 + } + } }, { "id": "dc-leaf6", @@ -490,6 +732,28 @@ "color": "#73BF69" } ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 2, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + }, "tooltipMetrics": [ { "label": "VNI dc-leaf6 40", @@ -530,7 +794,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + } }, { "id": "dc-access2", @@ -564,7 +850,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + } }, { "id": "dc-leaf8", @@ -598,7 +906,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 2, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + } }, { "id": "dc-leaf7", @@ -632,7 +962,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 1, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 3, + "numFilledLinks": 0 + } + } }, { "id": "dc-access4", @@ -666,7 +1018,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + } }, { "id": "dc-access3", @@ -700,7 +1074,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + } }, { "id": "dc-border-leaf2", @@ -734,7 +1130,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 3, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + } }, { "id": "dc-leaf2", @@ -769,6 +1187,28 @@ "color": "#73BF69" } ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 2, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + }, "tooltipMetrics": [ { "label": "VNI dc-leaf2 40", @@ -810,6 +1250,28 @@ "color": "#73BF69" } ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 1, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 3, + "numFilledLinks": 0 + } + }, "tooltipMetrics": [ { "label": "VNI campus-leaf1 50", @@ -850,7 +1312,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + } }, { "id": "campus-leaf2", @@ -885,6 +1369,28 @@ "color": "#73BF69" } ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 2, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + }, "tooltipMetrics": [ { "label": "VNI campus-leaf2 50", @@ -926,6 +1432,28 @@ "color": "#73BF69" } ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 1, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 3, + "numFilledLinks": 0 + } + }, "tooltipMetrics": [ { "label": "VNI campus-leaf3 50", @@ -966,7 +1494,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + } }, { "id": "campus-leaf4", @@ -1001,6 +1551,28 @@ "color": "#73BF69" } ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 2, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + }, "tooltipMetrics": [ { "label": "VNI campus-leaf4 50", @@ -1041,7 +1613,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 2, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 3, + "numFilledLinks": 0 + } + } }, { "id": "core2", @@ -1075,7 +1669,29 @@ "value": 1, "color": "#73BF69" } - ] + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 3, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + } } ], "links": [ @@ -1094,14 +1710,14 @@ "bandwidth": 1000000000, "query": "campus-border-leaf2 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-spine1 Ethernet6 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1129,14 +1745,14 @@ "bandwidth": 1000000000, "query": "campus-leaf1 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-spine1 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1164,14 +1780,14 @@ "bandwidth": 1000000000, "query": "campus-leaf2 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-spine1 Ethernet2 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1199,14 +1815,14 @@ "bandwidth": 1000000000, "query": "campus-leaf3 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-spine1 Ethernet3 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1234,14 +1850,14 @@ "bandwidth": 1000000000, "query": "campus-leaf4 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-spine1 Ethernet4 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1269,14 +1885,14 @@ "bandwidth": 1000000000, "query": "dc-leaf1 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine1 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1304,14 +1920,14 @@ "bandwidth": 1000000000, "query": "dc-leaf4 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine1 Ethernet4 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1339,14 +1955,14 @@ "bandwidth": 1000000000, "query": "dc-leaf3 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine1 Ethernet3 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1374,14 +1990,14 @@ "bandwidth": 1000000000, "query": "dc-leaf5 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine1 Ethernet5 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1409,14 +2025,14 @@ "bandwidth": 1000000000, "query": "dc-border-leaf1 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine1 Ethernet9 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1444,14 +2060,14 @@ "bandwidth": 1000000000, "query": "dc-leaf6 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine1 Ethernet6 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1479,14 +2095,14 @@ "bandwidth": 1000000000, "query": "dc-leaf7 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine1 Ethernet7 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1514,14 +2130,14 @@ "bandwidth": 1000000000, "query": "dc-border-leaf2 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine1 Ethernet10 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1549,14 +2165,14 @@ "bandwidth": 1000000000, "query": "dc-leaf2 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine1 Ethernet2 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1584,14 +2200,14 @@ "bandwidth": 1000000000, "query": "campus-leaf1 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-spine2 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1619,14 +2235,14 @@ "bandwidth": 1000000000, "query": "campus-leaf2 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-spine2 Ethernet2 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1654,14 +2270,14 @@ "bandwidth": 1000000000, "query": "campus-border-leaf1 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-spine1 Ethernet5 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1689,14 +2305,14 @@ "bandwidth": 1000000000, "query": "campus-border-leaf1 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-spine2 Ethernet5 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1724,14 +2340,14 @@ "bandwidth": 1000000000, "query": "campus-border-leaf1 Ethernet10 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-border-leaf2 Ethernet10 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1759,14 +2375,14 @@ "bandwidth": 1000000000, "query": "campus-border-leaf1 Ethernet13 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "core1 Ethernet3 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1794,14 +2410,14 @@ "bandwidth": 1000000000, "query": "campus-border-leaf1 Ethernet14 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "core2 Ethernet3 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1829,14 +2445,14 @@ "bandwidth": 1000000000, "query": "dc-leaf1 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine2 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1864,14 +2480,14 @@ "bandwidth": 1000000000, "query": "dc-access1 Ethernet1 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-leaf1 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1899,14 +2515,14 @@ "bandwidth": 1000000000, "query": "dc-leaf1 Ethernet10 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-leaf2 Ethernet10 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1934,14 +2550,14 @@ "bandwidth": 1000000000, "query": "campus-border-leaf2 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-spine2 Ethernet6 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -1969,14 +2585,14 @@ "bandwidth": 1000000000, "query": "campus-border-leaf2 Ethernet13 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "core1 Ethernet4 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2004,14 +2620,14 @@ "bandwidth": 1000000000, "query": "campus-border-leaf2 Ethernet14 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "core2 Ethernet4 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2039,14 +2655,14 @@ "bandwidth": 1000000000, "query": "dc-leaf4 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine2 Ethernet4 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2074,14 +2690,14 @@ "bandwidth": 1000000000, "query": "dc-leaf3 Ethernet10 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-leaf4 Ethernet10 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2109,14 +2725,14 @@ "bandwidth": 1000000000, "query": "dc-leaf3 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine2 Ethernet3 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2144,14 +2760,14 @@ "bandwidth": 1000000000, "query": "dc-leaf5 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine2 Ethernet5 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2179,14 +2795,14 @@ "bandwidth": 1000000000, "query": "dc-leaf5 Ethernet10 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-leaf6 Ethernet10 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2214,14 +2830,14 @@ "bandwidth": 1000000000, "query": "dc-access3 Ethernet1 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-leaf5 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2249,14 +2865,14 @@ "bandwidth": 1000000000, "query": "dc-border-leaf1 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine2 Ethernet9 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2284,14 +2900,14 @@ "bandwidth": 1000000000, "query": "core1 Ethernet1 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-border-leaf1 Ethernet13 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2319,14 +2935,14 @@ "bandwidth": 1000000000, "query": "dc-leaf6 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine2 Ethernet6 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2354,14 +2970,14 @@ "bandwidth": 1000000000, "query": "dc-access1 Ethernet2 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-leaf2 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2389,14 +3005,14 @@ "bandwidth": 1000000000, "query": "dc-access2 Ethernet2 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-leaf4 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2424,14 +3040,14 @@ "bandwidth": 1000000000, "query": "dc-access2 Ethernet1 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-leaf3 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2459,14 +3075,14 @@ "bandwidth": 1000000000, "query": "dc-leaf8 Ethernet11 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine1 Ethernet8 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2494,14 +3110,14 @@ "bandwidth": 1000000000, "query": "dc-leaf8 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine2 Ethernet8 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2529,14 +3145,14 @@ "bandwidth": 1000000000, "query": "dc-leaf7 Ethernet10 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-leaf8 Ethernet10 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2564,14 +3180,14 @@ "bandwidth": 1000000000, "query": "dc-access4 Ethernet2 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-leaf8 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2599,14 +3215,14 @@ "bandwidth": 1000000000, "query": "dc-leaf7 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine2 Ethernet7 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2634,14 +3250,14 @@ "bandwidth": 1000000000, "query": "dc-access4 Ethernet1 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-leaf7 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2669,14 +3285,14 @@ "bandwidth": 1000000000, "query": "dc-access3 Ethernet2 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-leaf6 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2704,14 +3320,14 @@ "bandwidth": 1000000000, "query": "dc-border-leaf2 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine2 Ethernet10 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2739,14 +3355,14 @@ "bandwidth": 1000000000, "query": "dc-border-leaf1 Ethernet10 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-border-leaf2 Ethernet10 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2774,14 +3390,14 @@ "bandwidth": 1000000000, "query": "core1 Ethernet2 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-border-leaf2 Ethernet13 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2809,14 +3425,14 @@ "bandwidth": 1000000000, "query": "core2 Ethernet2 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-border-leaf2 Ethernet14 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2844,14 +3460,14 @@ "bandwidth": 1000000000, "query": "dc-leaf2 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-spine2 Ethernet2 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2879,14 +3495,14 @@ "bandwidth": 1000000000, "query": "campus-access1 Ethernet1 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-leaf1 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2914,14 +3530,14 @@ "bandwidth": 1000000000, "query": "campus-access1 Ethernet2 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-leaf2 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2949,14 +3565,14 @@ "bandwidth": 1000000000, "query": "campus-leaf1 Ethernet10 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-leaf2 Ethernet10 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -2984,14 +3600,14 @@ "bandwidth": 1000000000, "query": "campus-leaf3 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-spine2 Ethernet3 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -3019,14 +3635,14 @@ "bandwidth": 1000000000, "query": "campus-access2 Ethernet1 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-leaf3 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -3054,14 +3670,14 @@ "bandwidth": 1000000000, "query": "campus-leaf4 Ethernet12 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-spine2 Ethernet4 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -3089,14 +3705,14 @@ "bandwidth": 1000000000, "query": "campus-leaf3 Ethernet10 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-leaf4 Ethernet10 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -3124,14 +3740,14 @@ "bandwidth": 1000000000, "query": "campus-access2 Ethernet2 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "campus-leaf4 Ethernet1 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -3159,14 +3775,14 @@ "bandwidth": 1000000000, "query": "core2 Ethernet1 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "dc-border-leaf1 Ethernet14 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, @@ -3194,14 +3810,14 @@ "bandwidth": 1000000000, "query": "core1 Ethernet5 tx", "labelOffset": 55, - "anchor": "Right", + "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, "query": "core2 Ethernet5 rx", "labelOffset": 55, - "anchor": "Left", + "anchor": 3, "dashboardLink": "" } }, diff --git a/scripts/generate_weathermap.py b/scripts/generate_weathermap.py index 0172336..8014c7c 100644 --- a/scripts/generate_weathermap.py +++ b/scripts/generate_weathermap.py @@ -50,6 +50,12 @@ GRID_SPACING_X = 180 GRID_SPACING_Y = 150 SITE_BAND_Y = {"dc": 0, "core": 450, "campus": 750} +# tamirsuliman-weathermap-panel's numeric anchor enum (Center=0, Top=1, +# Bottom=2, Left=3, Right=4) -- reverse-engineered from module.js, since +# link.sides.*.anchor and node.anchors{} both index by this numeric value, +# not by the anchor name string. +ANCHOR = {"Center": 0, "Top": 1, "Bottom": 2, "Left": 3, "Right": 4} + NODE_COLORS = {"font": "#ffffff", "background": "#22252b", "border": "#5794F2", "statusDown": "#F2495C"} STATUS_VALUE_MAPPINGS = [{"value": 0, "color": "#F2495C"}, {"value": 1, "color": "#73BF69"}] DEFAULT_LINK_BANDWIDTH_BPS = 10_000_000_000 # 10G fallback when IPFabric speed is missing @@ -238,6 +244,14 @@ def build_weathermap(devices, links, interface_speeds, positions, prometheus_url return gnmic_int # -- nodes -- + # anchors{} tallies how many link-sides attach to each anchor position on + # this node; every link below uses Right for its A side and Left for its + # Z side, so that's what gets counted per node here. + anchor_counts = {host: {a: 0 for a in ANCHOR.values()} for host in (d["hostname"] for d in devices)} + for link in links: + anchor_counts[link["a_host"]][ANCHOR["Right"]] += 1 + anchor_counts[link["z_host"]][ANCHOR["Left"]] += 1 + nodes = [] for dev in devices: host = dev["hostname"] @@ -254,6 +268,7 @@ def build_weathermap(devices, links, interface_speeds, positions, prometheus_url "statusQuery": f"BGP {host}", "nodeStatusColorTarget": "border", "statusValueMappings": [dict(m) for m in STATUS_VALUE_MAPPINGS], + "anchors": {a: {"numLinks": anchor_counts[host][a], "numFilledLinks": 0} for a in ANCHOR.values()}, } if host in vtep_hosts: node["tooltipMetrics"] = [ @@ -285,12 +300,12 @@ def build_weathermap(devices, links, interface_speeds, positions, prometheus_url "A": { "bandwidth": a_bw, "query": f"{link['a_host']} {a_gnmic_int} tx", - "labelOffset": 55, "anchor": "Right", "dashboardLink": "", + "labelOffset": 55, "anchor": ANCHOR["Right"], "dashboardLink": "", }, "Z": { "bandwidth": z_bw, "query": f"{link['z_host']} {z_gnmic_int} rx", - "labelOffset": 55, "anchor": "Left", "dashboardLink": "", + "labelOffset": 55, "anchor": ANCHOR["Left"], "dashboardLink": "", }, }, "units": "bps", From 3c680a2b17f52b28b87f35ea7f63e4f1a6ace599 Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Thu, 9 Jul 2026 17:18:40 +0000 Subject: [PATCH 11/28] Move weathermap generator docs to scripts/README.md Root README now just links to it. Also updates the default GRAFANA_WEATHERMAP_PLUGIN_ID to the fork actually installed (tamirsuliman-weathermap-panel), confirmed while validating #48. Refs #48 --- README.md | 40 ++--------------- scripts/README.md | 79 ++++++++++++++++++++++++++++++++++ scripts/generate_weathermap.py | 6 +-- 3 files changed, 86 insertions(+), 39 deletions(-) create mode 100644 scripts/README.md diff --git a/README.md b/README.md index 84c0f48..73b782b 100644 --- a/README.md +++ b/README.md @@ -384,42 +384,9 @@ curl -s 'http://172.16.0.71:9090/api/v1/query?query=system_memory_state_used' | ### Weathermap panel generation (dashboard-as-code) -`scripts/generate_weathermap.py` generates a [weathermap-ng](https://github.com/allamiro/grafana-network-weathermap-ng) -panel from live IPFabric topology + gnmic/Prometheus metrics, and writes a full -Grafana dashboard-as-code JSON to `configs/grafana/weathermap-dashboard.json` -(committed to Gitea as the source of truth, same pattern as the retired Flow -Panel YAML). See issue #48 for the schema research this is built against. - -```bash -export IPFABRIC_URL=https:// -export IPFABRIC_TOKEN= -python3 scripts/generate_weathermap.py # writes the JSON only - -export GRAFANA_URL=https:// -export GRAFANA_TOKEN= -export GRAFANA_DATASOURCE_UID= -python3 scripts/generate_weathermap.py --provision # also provisions via the Grafana API -``` - -- Re-run after any topology change (`evpn-lab.clab.yml`) to regenerate and re-provision. -- Node/link topology comes from IPFabric (`/tables/inventory/devices`, - `/tables/interfaces/connectivity-matrix`); node positions are computed as a - simple site-grouped grid (dc/core/campus bands) since IPFabric has no - layout data. -- IPFabric reports abbreviated interface names (`Et11`) while gnmic exposes - full OpenConfig names (`Ethernet11`); the script aliases known prefixes - (`Et`→`Ethernet`, `Po`→`Port-Channel`, `Lo`→`Loopback`, `Vl`→`Vlan`, - `Ma`→`Management`) and cross-checks the result against the live exporter, - logging (not silently dropping) any link whose aliased name has no matching - series — the actual fix for a real mismatch belongs in gnmic interface - aliasing (#43), not in this script. -- `.100`/`.200` subinterface rows in the connectivity-matrix (802.1Q tags used - for the gold VRF stitching on Core) are excluded — they ride the same - physical port as their parent interface and gnmic only exports physical - interface counters. -- The Grafana panel plugin id (`GRAFANA_WEATHERMAP_PLUGIN_ID`, default - `allamiro-weathermap-panel`) is a placeholder — confirm it against the - actually installed plugin before provisioning. +`scripts/generate_weathermap.py` generates a weathermap-ng Grafana panel from +live IPFabric topology + gnmic/Prometheus metrics. See +[`scripts/README.md`](scripts/README.md) for usage and details. ## 📁 Repository Structure @@ -449,6 +416,7 @@ arista-evpn-vxlan-clab/ │ └── grafana/ │ └── weathermap-dashboard.json ├── scripts/ +│ ├── README.md │ └── generate_weathermap.py └── hosts/ ├── README.md diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000..2d5e4ea --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,79 @@ +# scripts/generate_weathermap.py + +Generates a [weathermap-ng](https://github.com/allamiro/grafana-network-weathermap-ng) +panel from live IPFabric topology + gnmic/Prometheus metrics, and writes a full +Grafana dashboard-as-code JSON to `configs/grafana/weathermap-dashboard.json` +(committed to Gitea as the source of truth, same pattern as the retired Flow +Panel YAML). Optionally provisions it into Grafana via the HTTP API. + +See issue #48 for the panel schema research this is built against, and its +comment thread for the live-validation history (auth quirks, plugin id, a +PromQL escaping bug, a panel-crash fix — worth reading before touching the +anchor/regex-escaping logic). + +## Usage + +```bash +export IPFABRIC_URL=https:// +export IPFABRIC_TOKEN= +python3 scripts/generate_weathermap.py # writes the JSON only + +export GRAFANA_URL=https:// +export GRAFANA_TOKEN= +export GRAFANA_DATASOURCE_UID= +python3 scripts/generate_weathermap.py --provision # also provisions via the Grafana API +``` + +Re-run after any topology change (`evpn-lab.clab.yml`) to regenerate and +re-provision. + +## Environment variables + +| Variable | Required | Default | Notes | +|---|---|---|---| +| `IPFABRIC_URL` | yes | — | e.g. `https://ipfabric.example.com` | +| `IPFABRIC_TOKEN` | yes | — | Inventory/Snapshots read access. Sent as `X-API-Token`, not `Authorization: Bearer` — IPFabric's REST API does not use bearer auth. | +| `IPFABRIC_SNAPSHOT` | no | `$last` | | +| `PROMETHEUS_URL` | no | `http://172.16.0.71:9090` | The **in-topology** Prometheus (see #45), used at generation time to validate the IPFabric→gnmic interface alias and to discover live VTEP/VLAN pairs. This does not have to be the same instance Grafana queries at render time — see below. | +| `GRAFANA_URL` | with `--provision` | — | | +| `GRAFANA_TOKEN` | with `--provision` | — | Grafana Service Account token, sent as `Authorization: Bearer`. | +| `GRAFANA_DATASOURCE_UID` | with `--provision` | — | UID of the Prometheus datasource in Grafana that will actually back the panel. **This must be a datasource that can see the gnmic metrics** — an unrelated/external Prometheus instance with no gnmic data will make the panel render with no values (this happened once, see #48). | +| `GRAFANA_DASHBOARD_UID` | no | `evpn-vxlan-fabric-weathermap` | | +| `GRAFANA_WEATHERMAP_PLUGIN_ID` | no | `tamirsuliman-weathermap-panel` | The installed weathermap-ng plugin id. Override if a different fork is installed — plugin ids don't always match the upstream repo name (the schema research in #48 was done against the `allamiro` fork's source; what's actually installed here is a different fork with a stricter/different runtime schema — see the `ANCHOR` handling in the script). | + +## What the script does + +1. Fetches device inventory + connectivity-matrix from IPFabric. +2. Filters the connectivity-matrix to physical Ethernet-to-Ethernet links + only: drops Management-plane neighbor entries and `.100`/`.200` + subinterface rows (802.1Q tags used for the gold VRF stitching on Core — + they ride the same physical port as their parent interface and gnmic only + exports physical interface counters), and dedupes the two directions + IPFabric reports for each physical link into one. +3. Computes node positions as a simple site-grouped grid (dc/core/campus + bands) — IPFabric has no layout data. +4. Builds the panel's `targets`: one PromQL query per metric family (BGP + status, interface tx, interface rx, VXLAN MAC/VNI), each with an explicit + `legendFormat` so the resolved display name is predictable. +5. Builds `nodes[]` and `links[]` referencing those resolved legend strings, + including the plugin's `anchors` tally (per-node count of link + attachments per side) and numeric anchor enum on each link side — + omitting these crashes the panel on load in the installed plugin fork, + despite the (fork-specific) schema research saying it's safe to skip. +6. Cross-checks every IPFabric interface name, aliased to gnmic's naming + (`Et`→`Ethernet`, `Po`→`Port-Channel`, `Lo`→`Loopback`, `Vl`→`Vlan`, + `Ma`→`Management`), against the live exporter. Any link whose aliased + name has no matching series is logged, not silently dropped — the actual + fix for a real mismatch belongs in gnmic interface aliasing (#43), not in + this script. +7. Writes the dashboard JSON, and provisions it via `POST + /api/dashboards/db` if `--provision` is passed. + +## Known gaps + +- **VXLAN MAC-per-VNI target**: the `vlan` join key used to correlate + VLAN→VNI mapping with FDB entries (query verbatim from #44) doesn't + actually match on live data for any VTEP node — likely an Arista + internal-VLAN-vs-front-panel-VLAN translation the OpenConfig paths don't + reconcile. Only affects the decorative per-VTEP tooltip metric, not + node/link status or traffic coloring. Tracked in #44, not fixed here. diff --git a/scripts/generate_weathermap.py b/scripts/generate_weathermap.py index 8014c7c..5540da1 100644 --- a/scripts/generate_weathermap.py +++ b/scripts/generate_weathermap.py @@ -20,8 +20,8 @@ Environment: GRAFANA_TOKEN required with --provision GRAFANA_DATASOURCE_UID Prometheus datasource UID in Grafana, required with --provision GRAFANA_DASHBOARD_UID default "evpn-vxlan-fabric-weathermap" - GRAFANA_WEATHERMAP_PLUGIN_ID default "allamiro-weathermap-panel" -- confirm - against the actually installed plugin id before provisioning. + GRAFANA_WEATHERMAP_PLUGIN_ID default "tamirsuliman-weathermap-panel" -- override + if a different weathermap-ng fork/plugin id is installed. """ import argparse import json @@ -458,7 +458,7 @@ def main(): dashboard_uid = env("GRAFANA_DASHBOARD_UID", "evpn-vxlan-fabric-weathermap") datasource_uid = env("GRAFANA_DATASOURCE_UID", "PROMETHEUS_DATASOURCE_UID_PLACEHOLDER") - plugin_id = env("GRAFANA_WEATHERMAP_PLUGIN_ID", "allamiro-weathermap-panel") + plugin_id = env("GRAFANA_WEATHERMAP_PLUGIN_ID", "tamirsuliman-weathermap-panel") dashboard_payload = build_dashboard(weathermap, targets, dashboard_uid, datasource_uid, plugin_id) os.makedirs(os.path.dirname(args.output) or ".", exist_ok=True) From b03464d0df1e5cdb332fafe7ab11661c0ae13f15 Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Fri, 10 Jul 2026 09:45:40 +0000 Subject: [PATCH 12/28] Extend weathermap dashboard with BGP/ports tables, per-site throughput, fix node status query Fix node.statusQuery colliding legends: multi-neighbor devices previously sourced from raw per-neighbor BGP session-state series that collide under one legend, so an arbitrary neighbor won. Replace with a combined device-up * worst-BGP-session query per device, with an explicit fallback so zero-BGP devices (access switches) read as neutral/OK. Add site label via Prometheus relabel (derived from device naming convention) instead of per-query label_replace(). Add site/device template variables, BGP sessions table, ports/interfaces table (Grafana merge transform, not PromQL join), and per-site throughput graphs. Refs #49 --- README.md | 5 + configs/grafana/weathermap-dashboard.json | 385 ++++++++++++++++++++-- configs/prometheus/prometheus.yml | 10 + scripts/generate_weathermap.py | 230 ++++++++++++- 4 files changed, 588 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 73b782b..c9ae1ad 100644 --- a/README.md +++ b/README.md @@ -367,6 +367,11 @@ only appears as the sample *value* of `(device, interface, vlan)`. Per-VNI MAC counts require a PromQL join on `vlan` rather than a native `vni` label. +`site` (`dc`/`campus`/`core`) is also not gnmic-exported. It's added as a +Prometheus `metric_relabel_configs` rule deriving it from `device` via the +`-` naming convention regex (see #49), rather than repeating +`label_replace()` in every dashboard query. + - Config: `configs/prometheus/prometheus.yml` - This is separate from, and does not replace, the existing external Prometheus instance — no cutover yet, both run in parallel pending validation diff --git a/configs/grafana/weathermap-dashboard.json b/configs/grafana/weathermap-dashboard.json index 9a848ee..61e3f76 100644 --- a/configs/grafana/weathermap-dashboard.json +++ b/configs/grafana/weathermap-dashboard.json @@ -11,6 +11,50 @@ "timezone": "browser", "schemaVersion": 39, "version": 0, + "templating": { + "list": [ + { + "name": "site", + "type": "query", + "datasource": { + "type": "prometheus", + "uid": "cfrlusac89se8a" + }, + "query": { + "query": "label_values(interfaces_interface_state_oper_status, site)", + "refId": "site" + }, + "refresh": 2, + "sort": 1, + "multi": true, + "includeAll": true, + "current": { + "text": "All", + "value": "$__all" + } + }, + { + "name": "device", + "type": "query", + "datasource": { + "type": "prometheus", + "uid": "cfrlusac89se8a" + }, + "query": { + "query": "label_values(interfaces_interface_state_oper_status{site=~\"$site\"}, device)", + "refId": "device" + }, + "refresh": 2, + "sort": 1, + "multi": true, + "includeAll": true, + "current": { + "text": "All", + "value": "$__all" + } + } + ] + }, "panels": [ { "id": 1, @@ -29,8 +73,8 @@ "targets": [ { "refId": "A", - "expr": "min by (device) (network_instances_network_instance_protocols_protocol_bgp_neighbors_neighbor_state_session_state{network_instance_name=\"default\", device=~\"campus-spine1|dc-spine1|dc-spine2|campus-spine2|campus-border-leaf1|dc-leaf1|campus-border-leaf2|dc-leaf4|dc-leaf3|dc-leaf5|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-leaf8|dc-leaf7|dc-access4|dc-access3|dc-border-leaf2|dc-leaf2|campus-leaf1|campus-access1|campus-leaf2|campus-leaf3|campus-access2|campus-leaf4|core1|core2\"})", - "legendFormat": "BGP {{device}}", + "expr": "min by (device) (interfaces_interface_state_oper_status{device=~\"campus-spine1|dc-spine1|dc-spine2|campus-spine2|campus-border-leaf1|dc-leaf1|campus-border-leaf2|dc-leaf4|dc-leaf3|dc-leaf5|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-leaf8|dc-leaf7|dc-access4|dc-access3|dc-border-leaf2|dc-leaf2|campus-leaf1|campus-access1|campus-leaf2|campus-leaf3|campus-access2|campus-leaf4|core1|core2\"}) * (min by (device) (network_instances_network_instance_protocols_protocol_bgp_neighbors_neighbor_state_session_state{network_instance_name=\"default\", device=~\"campus-spine1|dc-spine1|dc-spine2|campus-spine2|campus-border-leaf1|dc-leaf1|campus-border-leaf2|dc-leaf4|dc-leaf3|dc-leaf5|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-leaf8|dc-leaf7|dc-access4|dc-access3|dc-border-leaf2|dc-leaf2|campus-leaf1|campus-access1|campus-leaf2|campus-leaf3|campus-access2|campus-leaf4|core1|core2\"}) or (min by (device) (interfaces_interface_state_oper_status{device=~\"campus-spine1|dc-spine1|dc-spine2|campus-spine2|campus-border-leaf1|dc-leaf1|campus-border-leaf2|dc-leaf4|dc-leaf3|dc-leaf5|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-leaf8|dc-leaf7|dc-access4|dc-access3|dc-border-leaf2|dc-leaf2|campus-leaf1|campus-access1|campus-leaf2|campus-leaf3|campus-access2|campus-leaf4|core1|core2\"}) * 0 + 1))", + "legendFormat": "STATUS {{device}}", "datasource": { "type": "prometheus", "uid": "cfrlusac89se8a" @@ -90,7 +134,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP campus-spine1", + "statusQuery": "STATUS campus-spine1", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -146,7 +190,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-spine1", + "statusQuery": "STATUS dc-spine1", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -202,7 +246,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-spine2", + "statusQuery": "STATUS dc-spine2", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -258,7 +302,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP campus-spine2", + "statusQuery": "STATUS campus-spine2", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -314,7 +358,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP campus-border-leaf1", + "statusQuery": "STATUS campus-border-leaf1", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -370,7 +414,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-leaf1", + "statusQuery": "STATUS dc-leaf1", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -433,7 +477,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP campus-border-leaf2", + "statusQuery": "STATUS campus-border-leaf2", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -489,7 +533,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-leaf4", + "statusQuery": "STATUS dc-leaf4", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -545,7 +589,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-leaf3", + "statusQuery": "STATUS dc-leaf3", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -601,7 +645,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-leaf5", + "statusQuery": "STATUS dc-leaf5", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -664,7 +708,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-border-leaf1", + "statusQuery": "STATUS dc-border-leaf1", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -720,7 +764,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-leaf6", + "statusQuery": "STATUS dc-leaf6", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -783,7 +827,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-access1", + "statusQuery": "STATUS dc-access1", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -839,7 +883,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-access2", + "statusQuery": "STATUS dc-access2", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -895,7 +939,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-leaf8", + "statusQuery": "STATUS dc-leaf8", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -951,7 +995,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-leaf7", + "statusQuery": "STATUS dc-leaf7", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -1007,7 +1051,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-access4", + "statusQuery": "STATUS dc-access4", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -1063,7 +1107,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-access3", + "statusQuery": "STATUS dc-access3", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -1119,7 +1163,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-border-leaf2", + "statusQuery": "STATUS dc-border-leaf2", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -1175,7 +1219,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP dc-leaf2", + "statusQuery": "STATUS dc-leaf2", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -1238,7 +1282,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP campus-leaf1", + "statusQuery": "STATUS campus-leaf1", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -1301,7 +1345,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP campus-access1", + "statusQuery": "STATUS campus-access1", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -1357,7 +1401,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP campus-leaf2", + "statusQuery": "STATUS campus-leaf2", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -1420,7 +1464,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP campus-leaf3", + "statusQuery": "STATUS campus-leaf3", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -1483,7 +1527,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP campus-access2", + "statusQuery": "STATUS campus-access2", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -1539,7 +1583,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP campus-leaf4", + "statusQuery": "STATUS campus-leaf4", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -1602,7 +1646,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP core1", + "statusQuery": "STATUS core1", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -1658,7 +1702,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "BGP core2", + "statusQuery": "STATUS core2", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -3910,6 +3954,287 @@ } } } + }, + { + "id": 2, + "type": "table", + "title": "BGP Sessions", + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 24 + }, + "datasource": { + "type": "prometheus", + "uid": "cfrlusac89se8a" + }, + "targets": [ + { + "refId": "A", + "datasource": { + "type": "prometheus", + "uid": "cfrlusac89se8a" + }, + "instant": true, + "format": "table", + "expr": "network_instances_network_instance_protocols_protocol_bgp_neighbors_neighbor_state_session_state{device=~\"$device\"}" + } + ], + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "__name__": true, + "instance": true, + "job": true, + "protocol_identifier": true, + "protocol_name": true, + "subscription_name": true + }, + "renameByName": { + "device": "Device", + "neighbor_address": "Neighbor Address", + "network_instance_name": "VRF", + "Value": "State" + } + } + } + ], + "fieldConfig": { + "defaults": { + "mappings": [ + { + "type": "value", + "options": { + "0": { + "text": "Down", + "color": "red" + }, + "1": { + "text": "Up", + "color": "green" + } + } + } + ], + "custom": { + "cellOptions": { + "type": "color-background" + } + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "State" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "color-background" + } + }, + { + "id": "mappings", + "value": [ + { + "type": "value", + "options": { + "0": { + "text": "Down", + "color": "red" + }, + "1": { + "text": "Up", + "color": "green" + } + } + } + ] + } + ] + } + ] + } + }, + { + "id": 3, + "type": "table", + "title": "Ports / Interfaces", + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 24 + }, + "datasource": { + "type": "prometheus", + "uid": "cfrlusac89se8a" + }, + "targets": [ + { + "refId": "A", + "datasource": { + "type": "prometheus", + "uid": "cfrlusac89se8a" + }, + "instant": true, + "format": "table", + "expr": "interfaces_interface_state_oper_status{device=~\"$device\"}" + }, + { + "refId": "B", + "datasource": { + "type": "prometheus", + "uid": "cfrlusac89se8a" + }, + "instant": true, + "format": "table", + "expr": "rate(interfaces_interface_state_counters_in_octets{device=~\"$device\"}[5m]) * 8" + }, + { + "refId": "C", + "datasource": { + "type": "prometheus", + "uid": "cfrlusac89se8a" + }, + "instant": true, + "format": "table", + "expr": "rate(interfaces_interface_state_counters_out_octets{device=~\"$device\"}[5m]) * 8" + } + ], + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "__name__": true, + "instance": true, + "job": true, + "subscription_name": true + }, + "renameByName": { + "device": "Device", + "interface": "Interface", + "Value #A": "Status", + "Value #B": "In (bps)", + "Value #C": "Out (bps)" + } + } + } + ], + "fieldConfig": { + "defaults": {}, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Status" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "color-background" + } + }, + { + "id": "mappings", + "value": [ + { + "type": "value", + "options": { + "0": { + "text": "Down", + "color": "red" + }, + "1": { + "text": "Up", + "color": "green" + } + } + } + ] + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "In (bps)" + }, + "properties": [ + { + "id": "unit", + "value": "bps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Out (bps)" + }, + "properties": [ + { + "id": "unit", + "value": "bps" + } + ] + } + ] + } + }, + { + "id": 4, + "type": "timeseries", + "title": "Throughput per Site", + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 34 + }, + "datasource": { + "type": "prometheus", + "uid": "cfrlusac89se8a" + }, + "fieldConfig": { + "defaults": { + "unit": "bps" + }, + "overrides": [] + }, + "targets": [ + { + "refId": "A", + "datasource": { + "type": "prometheus", + "uid": "cfrlusac89se8a" + }, + "expr": "sum by (site) (rate(interfaces_interface_state_counters_in_octets{site=~\"$site\"}[5m]) * 8)", + "legendFormat": "{{site}} in" + }, + { + "refId": "B", + "datasource": { + "type": "prometheus", + "uid": "cfrlusac89se8a" + }, + "expr": "-sum by (site) (rate(interfaces_interface_state_counters_out_octets{site=~\"$site\"}[5m]) * 8)", + "legendFormat": "{{site}} out" + } + ] } ] }, diff --git a/configs/prometheus/prometheus.yml b/configs/prometheus/prometheus.yml index 9adf8e0..837ef16 100644 --- a/configs/prometheus/prometheus.yml +++ b/configs/prometheus/prometheus.yml @@ -16,6 +16,16 @@ scrape_configs: - action: labeldrop regex: source + # site: not exported by gnmic -- derived from the hostname naming + # convention (see CLAUDE.md: dc-*/campus-*/core* regex used for + # IPFabric site separation) here instead of repeating label_replace() + # in every dashboard query, see issue #49 + - source_labels: [device] + target_label: site + regex: (campus|core|dc)-?.* + replacement: $1 + action: replace + # interface: raw label is already "interface_name" (OpenConfig key on the # "interface" path element) — normalize to "interface" for consistency - source_labels: [interface_name] diff --git a/scripts/generate_weathermap.py b/scripts/generate_weathermap.py index 5540da1..994c3a6 100644 --- a/scripts/generate_weathermap.py +++ b/scripts/generate_weathermap.py @@ -265,7 +265,7 @@ def build_weathermap(devices, links, interface_speeds, positions, prometheus_url "padding": {"horizontal": 12, "vertical": 6}, "colors": dict(NODE_COLORS), "nodeIcon": None, - "statusQuery": f"BGP {host}", + "statusQuery": f"STATUS {host}", "nodeStatusColorTarget": "border", "statusValueMappings": [dict(m) for m in STATUS_VALUE_MAPPINGS], "anchors": {a: {"numLinks": anchor_counts[host][a], "numFilledLinks": 0} for a in ANCHOR.values()}, @@ -317,11 +317,26 @@ def build_weathermap(devices, links, interface_speeds, positions, prometheus_url interface_regex = "|".join(sorted(interface_regex_parts)) # -- targets (one query per metric family, per task spec) -- + # + # Node status (refId A): a device is "up" only if at least one interface + # is up AND every BGP session is up, if it has any -- see #49. The old + # "BGP {{device}}" query sourced raw per-neighbor session-state series, + # so a device with multiple neighbors collided on one legend string and + # only one arbitrarily won. `min by (device)` picks the *worst* session + # (0 beats 1), and devices with zero BGP sessions (access switches) are + # not penalized: the `or` fallback substitutes a constant 1 for any + # device present in device-up but absent from the BGP series entirely. + device_up = f'min by (device) (interfaces_interface_state_oper_status{{device=~"{host_regex}"}})' + bgp_worst = ( + f'min by (device) (network_instances_network_instance_protocols_protocol_bgp_neighbors_neighbor_state_session_state' + f'{{network_instance_name="default", device=~"{host_regex}"}})' + ) + bgp_ok_or_not_applicable = f'({bgp_worst} or ({device_up} * 0 + 1))' targets = [ { "refId": "A", - "expr": f'min by (device) (network_instances_network_instance_protocols_protocol_bgp_neighbors_neighbor_state_session_state{{network_instance_name="default", device=~"{host_regex}"}})', - "legendFormat": "BGP {{device}}", + "expr": f'{device_up} * {bgp_ok_or_not_applicable}', + "legendFormat": "STATUS {{device}}", }, { "refId": "B", @@ -378,7 +393,202 @@ def build_weathermap(devices, links, interface_speeds, positions, prometheus_url # Grafana provisioning # -------------------------------------------------------------------------- +def build_templating(datasource_uid): + ds = {"type": "prometheus", "uid": datasource_uid} + return { + "list": [ + { + "name": "site", + "type": "query", + "datasource": ds, + "query": {"query": "label_values(interfaces_interface_state_oper_status, site)", "refId": "site"}, + "refresh": 2, + "sort": 1, + "multi": True, + "includeAll": True, + "current": {"text": "All", "value": "$__all"}, + }, + { + "name": "device", + "type": "query", + "datasource": ds, + # chained: only devices belonging to the selected site(s) + "query": { + "query": 'label_values(interfaces_interface_state_oper_status{site=~"$site"}, device)', + "refId": "device", + }, + "refresh": 2, + "sort": 1, + "multi": True, + "includeAll": True, + "current": {"text": "All", "value": "$__all"}, + }, + ] + } + + +def build_bgp_table_panel(panel_id, datasource_uid, grid_y): + ds = {"type": "prometheus", "uid": datasource_uid} + return { + "id": panel_id, + "type": "table", + "title": "BGP Sessions", + "gridPos": {"h": 10, "w": 12, "x": 0, "y": grid_y}, + "datasource": ds, + "targets": [ + { + "refId": "A", + "datasource": ds, + "instant": True, + "format": "table", + "expr": ( + 'network_instances_network_instance_protocols_protocol_bgp_neighbors_neighbor_state_session_state' + '{device=~"$device"}' + ), + } + ], + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": True, "__name__": True, "instance": True, "job": True, + "protocol_identifier": True, "protocol_name": True, "subscription_name": True, + }, + "renameByName": { + "device": "Device", + "neighbor_address": "Neighbor Address", + "network_instance_name": "VRF", + "Value": "State", + }, + }, + } + ], + "fieldConfig": { + "defaults": { + "mappings": [ + {"type": "value", "options": {"0": {"text": "Down", "color": "red"}, "1": {"text": "Up", "color": "green"}}} + ], + "custom": {"cellOptions": {"type": "color-background"}}, + }, + "overrides": [ + {"matcher": {"id": "byName", "options": "State"}, "properties": [ + {"id": "custom.cellOptions", "value": {"type": "color-background"}}, + {"id": "mappings", "value": [ + {"type": "value", "options": {"0": {"text": "Down", "color": "red"}, "1": {"text": "Up", "color": "green"}}} + ]}, + ]} + ], + }, + } + + +def build_ports_table_panel(panel_id, datasource_uid, grid_y): + ds = {"type": "prometheus", "uid": datasource_uid} + return { + "id": panel_id, + "type": "table", + "title": "Ports / Interfaces", + "gridPos": {"h": 10, "w": 12, "x": 12, "y": grid_y}, + "datasource": ds, + "targets": [ + { + "refId": "A", + "datasource": ds, + "instant": True, + "format": "table", + "expr": 'interfaces_interface_state_oper_status{device=~"$device"}', + }, + { + "refId": "B", + "datasource": ds, + "instant": True, + "format": "table", + "expr": 'rate(interfaces_interface_state_counters_in_octets{device=~"$device"}[5m]) * 8', + }, + { + "refId": "C", + "datasource": ds, + "instant": True, + "format": "table", + "expr": 'rate(interfaces_interface_state_counters_out_octets{device=~"$device"}[5m]) * 8', + }, + ], + # Grafana-side merge (not a PromQL join) -- see #44/#48 VXLAN join + # failure; joining on (device, interface) in PromQL across these + # three metric families is fragile, merging the three table results + # in Grafana on shared field values is not. + "transformations": [ + {"id": "merge", "options": {}}, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": True, "__name__": True, "instance": True, "job": True, "subscription_name": True, + }, + "renameByName": { + "device": "Device", + "interface": "Interface", + "Value #A": "Status", + "Value #B": "In (bps)", + "Value #C": "Out (bps)", + }, + }, + }, + ], + "fieldConfig": { + "defaults": {}, + "overrides": [ + {"matcher": {"id": "byName", "options": "Status"}, "properties": [ + {"id": "custom.cellOptions", "value": {"type": "color-background"}}, + {"id": "mappings", "value": [ + {"type": "value", "options": {"0": {"text": "Down", "color": "red"}, "1": {"text": "Up", "color": "green"}}} + ]}, + ]}, + {"matcher": {"id": "byName", "options": "In (bps)"}, "properties": [{"id": "unit", "value": "bps"}]}, + {"matcher": {"id": "byName", "options": "Out (bps)"}, "properties": [{"id": "unit", "value": "bps"}]}, + ], + }, + } + + +def build_throughput_panel(panel_id, datasource_uid, grid_y): + ds = {"type": "prometheus", "uid": datasource_uid} + return { + "id": panel_id, + "type": "timeseries", + "title": "Throughput per Site", + "gridPos": {"h": 10, "w": 24, "x": 0, "y": grid_y}, + "datasource": ds, + "fieldConfig": {"defaults": {"unit": "bps"}, "overrides": []}, + "targets": [ + { + "refId": "A", + "datasource": ds, + "expr": 'sum by (site) (rate(interfaces_interface_state_counters_in_octets{site=~"$site"}[5m]) * 8)', + "legendFormat": "{{site}} in", + }, + { + "refId": "B", + "datasource": ds, + # negated so in/out render as a signed graph (in above zero, out below) + "expr": '-sum by (site) (rate(interfaces_interface_state_counters_out_octets{site=~"$site"}[5m]) * 8)', + "legendFormat": "{{site}} out", + }, + ], + } + + def build_dashboard(weathermap, targets, dashboard_uid, datasource_uid, plugin_id): + weathermap_panel = { + "id": 1, + "type": plugin_id, + "title": "Fabric Weathermap", + "gridPos": {"h": 24, "w": 24, "x": 0, "y": 0}, + "datasource": {"type": "prometheus", "uid": datasource_uid}, + "targets": [dict(t, datasource={"type": "prometheus", "uid": datasource_uid}) for t in targets], + "options": {"weathermap": weathermap}, + } return { "dashboard": { "uid": dashboard_uid, @@ -387,16 +597,12 @@ def build_dashboard(weathermap, targets, dashboard_uid, datasource_uid, plugin_i "timezone": "browser", "schemaVersion": 39, "version": 0, + "templating": build_templating(datasource_uid), "panels": [ - { - "id": 1, - "type": plugin_id, - "title": "Fabric Weathermap", - "gridPos": {"h": 24, "w": 24, "x": 0, "y": 0}, - "datasource": {"type": "prometheus", "uid": datasource_uid}, - "targets": [dict(t, datasource={"type": "prometheus", "uid": datasource_uid}) for t in targets], - "options": {"weathermap": weathermap}, - } + weathermap_panel, + build_bgp_table_panel(2, datasource_uid, 24), + build_ports_table_panel(3, datasource_uid, 24), + build_throughput_panel(4, datasource_uid, 34), ], }, "overwrite": True, From b726848da0d80bfc2d389afd2c62232811b5e64e Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Fri, 10 Jul 2026 09:51:48 +0000 Subject: [PATCH 13/28] Guard VNI tooltip join against transient duplicate series Wrap the group_left RHS in max by (device, vlan) so a Prometheus restart or relabel change (old/new label-set series briefly coexisting in the staleness window) can't trip PromQL's many-to-many matching error. Closes #50 --- configs/grafana/weathermap-dashboard.json | 2 +- scripts/generate_weathermap.py | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/configs/grafana/weathermap-dashboard.json b/configs/grafana/weathermap-dashboard.json index 61e3f76..a154780 100644 --- a/configs/grafana/weathermap-dashboard.json +++ b/configs/grafana/weathermap-dashboard.json @@ -100,7 +100,7 @@ }, { "refId": "D", - "expr": "count by (device, vlan) (network_instances_network_instance_fdb_mac_table_entries_entry_vlan{device=~\"campus-leaf1|campus-leaf2|campus-leaf3|campus-leaf4|dc-leaf1|dc-leaf2|dc-leaf5|dc-leaf6\"})\n* on(device, vlan) group_left(vlan_to_vni_state_vni)\ninterfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni{device=~\"campus-leaf1|campus-leaf2|campus-leaf3|campus-leaf4|dc-leaf1|dc-leaf2|dc-leaf5|dc-leaf6\"}", + "expr": "count by (device, vlan) (network_instances_network_instance_fdb_mac_table_entries_entry_vlan{device=~\"campus-leaf1|campus-leaf2|campus-leaf3|campus-leaf4|dc-leaf1|dc-leaf2|dc-leaf5|dc-leaf6\"})\n* on(device, vlan) group_left(vlan_to_vni_state_vni)\nmax by (device, vlan) (interfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni{device=~\"campus-leaf1|campus-leaf2|campus-leaf3|campus-leaf4|dc-leaf1|dc-leaf2|dc-leaf5|dc-leaf6\"})", "legendFormat": "VNI {{device}} {{vlan}}", "datasource": { "type": "prometheus", diff --git a/scripts/generate_weathermap.py b/scripts/generate_weathermap.py index 994c3a6..e470730 100644 --- a/scripts/generate_weathermap.py +++ b/scripts/generate_weathermap.py @@ -352,12 +352,18 @@ def build_weathermap(devices, links, interface_speeds, positions, prometheus_url if vtep_hosts: vtep_regex = "|".join(promql_escape(h) for h in vtep_hosts) # Verbatim join from #44 "VXLAN (MAC count per VNI)", scoped to VTEP nodes. + # RHS is wrapped in max by (device, vlan) so the join key is always + # unique -- a Prometheus restart or relabel change otherwise leaves + # the pre-restart (frozen) and post-restart series briefly coexisting + # within the 5m staleness window, both matching the same (device, + # vlan) group, which trips PromQL's "many-to-many matching not + # allowed" error. See #50. targets.append({ "refId": "D", "expr": ( f'count by (device, vlan) (network_instances_network_instance_fdb_mac_table_entries_entry_vlan{{device=~"{vtep_regex}"}})\n' f'* on(device, vlan) group_left(vlan_to_vni_state_vni)\n' - f'interfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni{{device=~"{vtep_regex}"}}' + f'max by (device, vlan) (interfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni{{device=~"{vtep_regex}"}})' ), "legendFormat": "VNI {{device}} {{vlan}}", }) From dba06c160705fa3cb56fd857e5d4d104406c12d0 Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Fri, 10 Jul 2026 09:56:07 +0000 Subject: [PATCH 14/28] Exclude Management0 from per-site throughput panel gNMI telemetry traffic on the OOB management port swamped fabric traffic in the site-aggregate sums, producing a misleading ~10x in/out asymmetry that read as a real traffic anomaly. Closes #51 --- configs/grafana/weathermap-dashboard.json | 4 ++-- scripts/generate_weathermap.py | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/configs/grafana/weathermap-dashboard.json b/configs/grafana/weathermap-dashboard.json index a154780..b57fa99 100644 --- a/configs/grafana/weathermap-dashboard.json +++ b/configs/grafana/weathermap-dashboard.json @@ -4222,7 +4222,7 @@ "type": "prometheus", "uid": "cfrlusac89se8a" }, - "expr": "sum by (site) (rate(interfaces_interface_state_counters_in_octets{site=~\"$site\"}[5m]) * 8)", + "expr": "sum by (site) (rate(interfaces_interface_state_counters_in_octets{site=~\"$site\", interface!~\"Management.*\"}[5m]) * 8)", "legendFormat": "{{site}} in" }, { @@ -4231,7 +4231,7 @@ "type": "prometheus", "uid": "cfrlusac89se8a" }, - "expr": "-sum by (site) (rate(interfaces_interface_state_counters_out_octets{site=~\"$site\"}[5m]) * 8)", + "expr": "-sum by (site) (rate(interfaces_interface_state_counters_out_octets{site=~\"$site\", interface!~\"Management.*\"}[5m]) * 8)", "legendFormat": "{{site}} out" } ] diff --git a/scripts/generate_weathermap.py b/scripts/generate_weathermap.py index e470730..5fa6ed3 100644 --- a/scripts/generate_weathermap.py +++ b/scripts/generate_weathermap.py @@ -571,14 +571,17 @@ def build_throughput_panel(panel_id, datasource_uid, grid_y): { "refId": "A", "datasource": ds, - "expr": 'sum by (site) (rate(interfaces_interface_state_counters_in_octets{site=~"$site"}[5m]) * 8)', + # Management0 excluded -- gNMI telemetry traffic on the OOB + # port otherwise swamps fabric traffic and skews in/out + # wildly asymmetric, see #51. + "expr": 'sum by (site) (rate(interfaces_interface_state_counters_in_octets{site=~"$site", interface!~"Management.*"}[5m]) * 8)', "legendFormat": "{{site}} in", }, { "refId": "B", "datasource": ds, # negated so in/out render as a signed graph (in above zero, out below) - "expr": '-sum by (site) (rate(interfaces_interface_state_counters_out_octets{site=~"$site"}[5m]) * 8)', + "expr": '-sum by (site) (rate(interfaces_interface_state_counters_out_octets{site=~"$site", interface!~"Management.*"}[5m]) * 8)', "legendFormat": "{{site}} out", }, ], From 632d14636883501bbf545fac9774af71d7022735 Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Fri, 10 Jul 2026 10:12:07 +0000 Subject: [PATCH 15/28] Split weathermap generation from dashboard composition generate_weathermap.py now emits only the weathermap panel (targets + options.weathermap) and merges it into a manually-authored dashboard base (configs/grafana/dashboard-base.json) at a reserved slot panel, keeping the base's gridPos so layout stays manual. The BGP sessions table, ports/interfaces table, throughput graphs, and template variables move out of the script entirely into that base file. Verified zero regression: merged output is identical to the prior generator-only output except for JSON key ordering, and all panel queries re-validated via /api/ds/query. Refs #52 --- configs/grafana/dashboard-base.json | 197 ++++++++++++++ configs/grafana/weathermap-dashboard.json | 2 +- scripts/README.md | 50 +++- scripts/generate_weathermap.py | 300 ++++++---------------- 4 files changed, 320 insertions(+), 229 deletions(-) create mode 100644 configs/grafana/dashboard-base.json diff --git a/configs/grafana/dashboard-base.json b/configs/grafana/dashboard-base.json new file mode 100644 index 0000000..356875c --- /dev/null +++ b/configs/grafana/dashboard-base.json @@ -0,0 +1,197 @@ +{ + "uid": "evpn-vxlan-fabric-weathermap", + "title": "EVPN/VXLAN Fabric Weathermap", + "tags": ["evpn", "vxlan", "weathermap", "auto-generated"], + "timezone": "browser", + "schemaVersion": 39, + "version": 0, + "templating": { + "list": [ + { + "name": "site", + "type": "query", + "datasource": { "type": "prometheus", "uid": "__DATASOURCE_UID__" }, + "query": { "query": "label_values(interfaces_interface_state_oper_status, site)", "refId": "site" }, + "refresh": 2, + "sort": 1, + "multi": true, + "includeAll": true, + "current": { "text": "All", "value": "$__all" } + }, + { + "name": "device", + "type": "query", + "datasource": { "type": "prometheus", "uid": "__DATASOURCE_UID__" }, + "query": { + "query": "label_values(interfaces_interface_state_oper_status{site=~\"$site\"}, device)", + "refId": "device" + }, + "refresh": 2, + "sort": 1, + "multi": true, + "includeAll": true, + "current": { "text": "All", "value": "$__all" } + } + ] + }, + "panels": [ + { + "id": 1, + "title": "__WEATHERMAP_SLOT__", + "gridPos": { "h": 24, "w": 24, "x": 0, "y": 0 } + }, + { + "id": 2, + "type": "table", + "title": "BGP Sessions", + "gridPos": { "h": 10, "w": 12, "x": 0, "y": 24 }, + "datasource": { "type": "prometheus", "uid": "__DATASOURCE_UID__" }, + "targets": [ + { + "refId": "A", + "datasource": { "type": "prometheus", "uid": "__DATASOURCE_UID__" }, + "instant": true, + "format": "table", + "expr": "network_instances_network_instance_protocols_protocol_bgp_neighbors_neighbor_state_session_state{device=~\"$device\"}" + } + ], + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "__name__": true, + "instance": true, + "job": true, + "protocol_identifier": true, + "protocol_name": true, + "subscription_name": true + }, + "renameByName": { + "device": "Device", + "neighbor_address": "Neighbor Address", + "network_instance_name": "VRF", + "Value": "State" + } + } + } + ], + "fieldConfig": { + "defaults": { + "mappings": [ + { "type": "value", "options": { "0": { "text": "Down", "color": "red" }, "1": { "text": "Up", "color": "green" } } } + ], + "custom": { "cellOptions": { "type": "color-background" } } + }, + "overrides": [ + { + "matcher": { "id": "byName", "options": "State" }, + "properties": [ + { "id": "custom.cellOptions", "value": { "type": "color-background" } }, + { + "id": "mappings", + "value": [ + { "type": "value", "options": { "0": { "text": "Down", "color": "red" }, "1": { "text": "Up", "color": "green" } } } + ] + } + ] + } + ] + } + }, + { + "id": 3, + "type": "table", + "title": "Ports / Interfaces", + "gridPos": { "h": 10, "w": 12, "x": 12, "y": 24 }, + "datasource": { "type": "prometheus", "uid": "__DATASOURCE_UID__" }, + "targets": [ + { + "refId": "A", + "datasource": { "type": "prometheus", "uid": "__DATASOURCE_UID__" }, + "instant": true, + "format": "table", + "expr": "interfaces_interface_state_oper_status{device=~\"$device\"}" + }, + { + "refId": "B", + "datasource": { "type": "prometheus", "uid": "__DATASOURCE_UID__" }, + "instant": true, + "format": "table", + "expr": "rate(interfaces_interface_state_counters_in_octets{device=~\"$device\"}[5m]) * 8" + }, + { + "refId": "C", + "datasource": { "type": "prometheus", "uid": "__DATASOURCE_UID__" }, + "instant": true, + "format": "table", + "expr": "rate(interfaces_interface_state_counters_out_octets{device=~\"$device\"}[5m]) * 8" + } + ], + "transformations": [ + { "id": "merge", "options": {} }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "__name__": true, + "instance": true, + "job": true, + "subscription_name": true + }, + "renameByName": { + "device": "Device", + "interface": "Interface", + "Value #A": "Status", + "Value #B": "In (bps)", + "Value #C": "Out (bps)" + } + } + } + ], + "fieldConfig": { + "defaults": {}, + "overrides": [ + { + "matcher": { "id": "byName", "options": "Status" }, + "properties": [ + { "id": "custom.cellOptions", "value": { "type": "color-background" } }, + { + "id": "mappings", + "value": [ + { "type": "value", "options": { "0": { "text": "Down", "color": "red" }, "1": { "text": "Up", "color": "green" } } } + ] + } + ] + }, + { "matcher": { "id": "byName", "options": "In (bps)" }, "properties": [{ "id": "unit", "value": "bps" }] }, + { "matcher": { "id": "byName", "options": "Out (bps)" }, "properties": [{ "id": "unit", "value": "bps" }] } + ] + } + }, + { + "id": 4, + "type": "timeseries", + "title": "Throughput per Site", + "gridPos": { "h": 10, "w": 24, "x": 0, "y": 34 }, + "datasource": { "type": "prometheus", "uid": "__DATASOURCE_UID__" }, + "fieldConfig": { "defaults": { "unit": "bps" }, "overrides": [] }, + "targets": [ + { + "refId": "A", + "datasource": { "type": "prometheus", "uid": "__DATASOURCE_UID__" }, + "expr": "sum by (site) (rate(interfaces_interface_state_counters_in_octets{site=~\"$site\", interface!~\"Management.*\"}[5m]) * 8)", + "legendFormat": "{{site}} in" + }, + { + "refId": "B", + "datasource": { "type": "prometheus", "uid": "__DATASOURCE_UID__" }, + "expr": "-sum by (site) (rate(interfaces_interface_state_counters_out_octets{site=~\"$site\", interface!~\"Management.*\"}[5m]) * 8)", + "legendFormat": "{{site}} out" + } + ] + } + ] +} diff --git a/configs/grafana/weathermap-dashboard.json b/configs/grafana/weathermap-dashboard.json index b57fa99..80d15ad 100644 --- a/configs/grafana/weathermap-dashboard.json +++ b/configs/grafana/weathermap-dashboard.json @@ -58,7 +58,6 @@ "panels": [ { "id": 1, - "type": "tamirsuliman-weathermap-panel", "title": "Fabric Weathermap", "gridPos": { "h": 24, @@ -66,6 +65,7 @@ "x": 0, "y": 0 }, + "type": "tamirsuliman-weathermap-panel", "datasource": { "type": "prometheus", "uid": "cfrlusac89se8a" diff --git a/scripts/README.md b/scripts/README.md index 2d5e4ea..bd052e7 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -1,10 +1,25 @@ # scripts/generate_weathermap.py Generates a [weathermap-ng](https://github.com/allamiro/grafana-network-weathermap-ng) -panel from live IPFabric topology + gnmic/Prometheus metrics, and writes a full -Grafana dashboard-as-code JSON to `configs/grafana/weathermap-dashboard.json` -(committed to Gitea as the source of truth, same pattern as the retired Flow -Panel YAML). Optionally provisions it into Grafana via the HTTP API. +**panel only** from live IPFabric topology + gnmic/Prometheus metrics, merges +it into a manually-authored dashboard base, and writes the merged result to +`configs/grafana/weathermap-dashboard.json` (committed to Gitea as the build +artifact, same pattern as the retired Flow Panel YAML). Optionally provisions +it into Grafana via the HTTP API. + +## File structure (see #52) + +| File | What it is | +|---|---| +| `configs/grafana/dashboard-base.json` | **Manually authored**, committed source of truth for everything except the weathermap panel: BGP sessions table, ports/interfaces table, throughput-per-site graphs, `site`/`device` template variables, panel layout. Edit this directly for anything in those panels. Contains a reserved slot panel titled `__WEATHERMAP_SLOT__` (id `1`, `gridPos` fixed) that the script splices the generated weathermap panel into. | +| `configs/grafana/weathermap-dashboard.json` | **Generated build artifact** — base + freshly-generated weathermap panel, merged. This is what actually gets provisioned to Grafana. Don't hand-edit; re-run the script. | + +The script itself only ever knows about the weathermap panel (`targets` + +`options.weathermap`) — it has no knowledge of the other three panels or the +template variables. That split is deliberate: topology-driven content +(nodes/links, generated from live IPFabric+Prometheus data) is separated from +hand-tuned dashboard composition (table layout, transformations, thresholds), +which doesn't need to regenerate on every topology change. See issue #48 for the panel schema research this is built against, and its comment thread for the live-validation history (auth quirks, plugin id, a @@ -16,7 +31,7 @@ anchor/regex-escaping logic). ```bash export IPFABRIC_URL=https:// export IPFABRIC_TOKEN= -python3 scripts/generate_weathermap.py # writes the JSON only +python3 scripts/generate_weathermap.py # writes the merged JSON only export GRAFANA_URL=https:// export GRAFANA_TOKEN= @@ -24,13 +39,25 @@ export GRAFANA_DATASOURCE_UID= python3 scripts/generate_weathermap.py --provision # also provisions via the Grafana API ``` -Re-run after any topology change (`evpn-lab.clab.yml`) to regenerate and -re-provision. +Re-run after any topology change (`evpn-lab.clab.yml`) to regenerate the +weathermap panel and re-merge/re-provision. The script always regenerates the +weathermap panel fresh from live IPFabric data (no diffing/incremental +state), so a plain re-run already picks up any topology change — there's no +separate "detect changes" step. The only manual/operational step is +*triggering* that re-run after a change; there's no watcher or CI hook doing +it automatically yet. + +If you need to change the BGP/ports/throughput panels, template variables, or +layout, edit `configs/grafana/dashboard-base.json` directly and re-run the +script (or run it with `--provision` to push the edit live) — no topology +data is needed for that path, the weathermap panel just gets regenerated +alongside it. ## Environment variables | Variable | Required | Default | Notes | |---|---|---|---| +| `--base` (CLI flag, not env) | no | `configs/grafana/dashboard-base.json` | Manual dashboard base to merge the weathermap panel into. | | `IPFABRIC_URL` | yes | — | e.g. `https://ipfabric.example.com` | | `IPFABRIC_TOKEN` | yes | — | Inventory/Snapshots read access. Sent as `X-API-Token`, not `Authorization: Bearer` — IPFabric's REST API does not use bearer auth. | | `IPFABRIC_SNAPSHOT` | no | `$last` | | @@ -66,8 +93,13 @@ re-provision. name has no matching series is logged, not silently dropped — the actual fix for a real mismatch belongs in gnmic interface aliasing (#43), not in this script. -7. Writes the dashboard JSON, and provisions it via `POST - /api/dashboards/db` if `--provision` is passed. +7. Loads `configs/grafana/dashboard-base.json`, substitutes the real + Prometheus datasource UID into its `__DATASOURCE_UID__` placeholders, + finds the panel titled `__WEATHERMAP_SLOT__` and splices in the generated + weathermap panel content (keeping the slot's `gridPos`/`id`, so the manual + layout is never repositioned). +8. Writes the merged dashboard JSON to `configs/grafana/weathermap-dashboard.json`, + and provisions it via `POST /api/dashboards/db` if `--provision` is passed. ## Known gaps diff --git a/scripts/generate_weathermap.py b/scripts/generate_weathermap.py index 5fa6ed3..0d6d1a3 100644 --- a/scripts/generate_weathermap.py +++ b/scripts/generate_weathermap.py @@ -1,6 +1,14 @@ #!/usr/bin/env python3 -"""Generate a weathermap-ng panel config from IPFabric topology + gnmic/Prometheus -metrics, and optionally provision it into a Grafana dashboard. +"""Generate a weathermap-ng PANEL (only) from IPFabric topology + gnmic/Prometheus +metrics, merge it into a manually-authored dashboard base, and optionally +provision the result into Grafana. + +Scope (see #52): this script knows only about the weathermap panel -- +targets (node status / link tx / link rx / VXLAN tooltip queries) and +options.weathermap (nodes/links/scale/settings). It has no knowledge of the +BGP sessions table, ports/interfaces table, or throughput panels -- those +live in the manually-authored `configs/grafana/dashboard-base.json` and are +not touched by this script. Data sources (see gitea issues #44, #47, #48): - IPFabric REST API: device inventory + connectivity-matrix (topology) @@ -8,8 +16,13 @@ Data sources (see gitea issues #44, #47, #48): values, used both to validate the IPFabric->gnmic interface-name mapping and to resolve which VTEPs/VLANs actually have VXLAN data. +Merge: the weathermap panel is generated fresh from live data on every run +(no diffing), then spliced into the base dashboard's reserved slot (the panel +titled "__WEATHERMAP_SLOT__"), keeping that slot's gridPos so the manually +authored layout is never repositioned by the generator. See #52. + Usage: - python3 scripts/generate_weathermap.py [--output PATH] [--provision] + python3 scripts/generate_weathermap.py [--base PATH] [--output PATH] [--provision] Environment: IPFABRIC_URL e.g. https://ipfabric.example.com @@ -396,226 +409,66 @@ def build_weathermap(devices, links, interface_speeds, positions, prometheus_url # -------------------------------------------------------------------------- -# Grafana provisioning +# Weathermap panel (only) -- see #52, scope narrowed from full-dashboard # -------------------------------------------------------------------------- -def build_templating(datasource_uid): - ds = {"type": "prometheus", "uid": datasource_uid} +WEATHERMAP_SLOT_TITLE = "__WEATHERMAP_SLOT__" + + +def build_weathermap_panel(weathermap, targets, datasource_uid, plugin_id): + """The weathermap panel's own content: type/datasource/targets/options. + Deliberately has no gridPos/id/title of its own -- those come from + whatever slot it's merged into (see merge_weathermap_into_base).""" return { - "list": [ - { - "name": "site", - "type": "query", - "datasource": ds, - "query": {"query": "label_values(interfaces_interface_state_oper_status, site)", "refId": "site"}, - "refresh": 2, - "sort": 1, - "multi": True, - "includeAll": True, - "current": {"text": "All", "value": "$__all"}, - }, - { - "name": "device", - "type": "query", - "datasource": ds, - # chained: only devices belonging to the selected site(s) - "query": { - "query": 'label_values(interfaces_interface_state_oper_status{site=~"$site"}, device)', - "refId": "device", - }, - "refresh": 2, - "sort": 1, - "multi": True, - "includeAll": True, - "current": {"text": "All", "value": "$__all"}, - }, - ] - } - - -def build_bgp_table_panel(panel_id, datasource_uid, grid_y): - ds = {"type": "prometheus", "uid": datasource_uid} - return { - "id": panel_id, - "type": "table", - "title": "BGP Sessions", - "gridPos": {"h": 10, "w": 12, "x": 0, "y": grid_y}, - "datasource": ds, - "targets": [ - { - "refId": "A", - "datasource": ds, - "instant": True, - "format": "table", - "expr": ( - 'network_instances_network_instance_protocols_protocol_bgp_neighbors_neighbor_state_session_state' - '{device=~"$device"}' - ), - } - ], - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": { - "Time": True, "__name__": True, "instance": True, "job": True, - "protocol_identifier": True, "protocol_name": True, "subscription_name": True, - }, - "renameByName": { - "device": "Device", - "neighbor_address": "Neighbor Address", - "network_instance_name": "VRF", - "Value": "State", - }, - }, - } - ], - "fieldConfig": { - "defaults": { - "mappings": [ - {"type": "value", "options": {"0": {"text": "Down", "color": "red"}, "1": {"text": "Up", "color": "green"}}} - ], - "custom": {"cellOptions": {"type": "color-background"}}, - }, - "overrides": [ - {"matcher": {"id": "byName", "options": "State"}, "properties": [ - {"id": "custom.cellOptions", "value": {"type": "color-background"}}, - {"id": "mappings", "value": [ - {"type": "value", "options": {"0": {"text": "Down", "color": "red"}, "1": {"text": "Up", "color": "green"}}} - ]}, - ]} - ], - }, - } - - -def build_ports_table_panel(panel_id, datasource_uid, grid_y): - ds = {"type": "prometheus", "uid": datasource_uid} - return { - "id": panel_id, - "type": "table", - "title": "Ports / Interfaces", - "gridPos": {"h": 10, "w": 12, "x": 12, "y": grid_y}, - "datasource": ds, - "targets": [ - { - "refId": "A", - "datasource": ds, - "instant": True, - "format": "table", - "expr": 'interfaces_interface_state_oper_status{device=~"$device"}', - }, - { - "refId": "B", - "datasource": ds, - "instant": True, - "format": "table", - "expr": 'rate(interfaces_interface_state_counters_in_octets{device=~"$device"}[5m]) * 8', - }, - { - "refId": "C", - "datasource": ds, - "instant": True, - "format": "table", - "expr": 'rate(interfaces_interface_state_counters_out_octets{device=~"$device"}[5m]) * 8', - }, - ], - # Grafana-side merge (not a PromQL join) -- see #44/#48 VXLAN join - # failure; joining on (device, interface) in PromQL across these - # three metric families is fragile, merging the three table results - # in Grafana on shared field values is not. - "transformations": [ - {"id": "merge", "options": {}}, - { - "id": "organize", - "options": { - "excludeByName": { - "Time": True, "__name__": True, "instance": True, "job": True, "subscription_name": True, - }, - "renameByName": { - "device": "Device", - "interface": "Interface", - "Value #A": "Status", - "Value #B": "In (bps)", - "Value #C": "Out (bps)", - }, - }, - }, - ], - "fieldConfig": { - "defaults": {}, - "overrides": [ - {"matcher": {"id": "byName", "options": "Status"}, "properties": [ - {"id": "custom.cellOptions", "value": {"type": "color-background"}}, - {"id": "mappings", "value": [ - {"type": "value", "options": {"0": {"text": "Down", "color": "red"}, "1": {"text": "Up", "color": "green"}}} - ]}, - ]}, - {"matcher": {"id": "byName", "options": "In (bps)"}, "properties": [{"id": "unit", "value": "bps"}]}, - {"matcher": {"id": "byName", "options": "Out (bps)"}, "properties": [{"id": "unit", "value": "bps"}]}, - ], - }, - } - - -def build_throughput_panel(panel_id, datasource_uid, grid_y): - ds = {"type": "prometheus", "uid": datasource_uid} - return { - "id": panel_id, - "type": "timeseries", - "title": "Throughput per Site", - "gridPos": {"h": 10, "w": 24, "x": 0, "y": grid_y}, - "datasource": ds, - "fieldConfig": {"defaults": {"unit": "bps"}, "overrides": []}, - "targets": [ - { - "refId": "A", - "datasource": ds, - # Management0 excluded -- gNMI telemetry traffic on the OOB - # port otherwise swamps fabric traffic and skews in/out - # wildly asymmetric, see #51. - "expr": 'sum by (site) (rate(interfaces_interface_state_counters_in_octets{site=~"$site", interface!~"Management.*"}[5m]) * 8)', - "legendFormat": "{{site}} in", - }, - { - "refId": "B", - "datasource": ds, - # negated so in/out render as a signed graph (in above zero, out below) - "expr": '-sum by (site) (rate(interfaces_interface_state_counters_out_octets{site=~"$site", interface!~"Management.*"}[5m]) * 8)', - "legendFormat": "{{site}} out", - }, - ], - } - - -def build_dashboard(weathermap, targets, dashboard_uid, datasource_uid, plugin_id): - weathermap_panel = { - "id": 1, "type": plugin_id, - "title": "Fabric Weathermap", - "gridPos": {"h": 24, "w": 24, "x": 0, "y": 0}, "datasource": {"type": "prometheus", "uid": datasource_uid}, "targets": [dict(t, datasource={"type": "prometheus", "uid": datasource_uid}) for t in targets], "options": {"weathermap": weathermap}, } - return { - "dashboard": { - "uid": dashboard_uid, - "title": "EVPN/VXLAN Fabric Weathermap", - "tags": ["evpn", "vxlan", "weathermap", "auto-generated"], - "timezone": "browser", - "schemaVersion": 39, - "version": 0, - "templating": build_templating(datasource_uid), - "panels": [ - weathermap_panel, - build_bgp_table_panel(2, datasource_uid, 24), - build_ports_table_panel(3, datasource_uid, 24), - build_throughput_panel(4, datasource_uid, 34), - ], - }, - "overwrite": True, - } + + +# -------------------------------------------------------------------------- +# Manual base dashboard + merge (see #52) +# -------------------------------------------------------------------------- + +def load_base_dashboard(path): + with open(path) as f: + return json.load(f) + + +def substitute_placeholders(obj, replacements): + """Recursively replace exact-match string placeholders (e.g. the + datasource UID token) anywhere in the manually-authored base JSON.""" + if isinstance(obj, dict): + return {k: substitute_placeholders(v, replacements) for k, v in obj.items()} + if isinstance(obj, list): + return [substitute_placeholders(v, replacements) for v in obj] + if isinstance(obj, str) and obj in replacements: + return replacements[obj] + return obj + + +def merge_weathermap_into_base(base_dashboard, weathermap_panel, dashboard_uid): + """Splice the freshly generated weathermap panel into the base + dashboard's reserved slot (matched by title), keeping the slot's + gridPos/id -- layout stays manual, the generator never repositions it.""" + dashboard = dict(base_dashboard) + dashboard["uid"] = dashboard_uid + panels = [] + found = False + for panel in dashboard.get("panels", []): + if panel.get("title") == WEATHERMAP_SLOT_TITLE: + found = True + merged = dict(panel) + merged.update(weathermap_panel) + merged["title"] = "Fabric Weathermap" + panels.append(merged) + else: + panels.append(panel) + if not found: + sys.exit(f"Base dashboard has no panel titled {WEATHERMAP_SLOT_TITLE!r} -- nowhere to merge the weathermap panel") + dashboard["panels"] = panels + return dashboard def provision_to_grafana(grafana_url, api_token, dashboard_payload): @@ -636,10 +489,12 @@ def provision_to_grafana(grafana_url, api_token, dashboard_payload): def main(): parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument("--base", default="configs/grafana/dashboard-base.json", + help="manually-authored dashboard base JSON (everything but the weathermap panel)") parser.add_argument("--output", default="configs/grafana/weathermap-dashboard.json", - help="where to write the generated dashboard-as-code JSON") + help="where to write the merged dashboard-as-code JSON (build artifact)") parser.add_argument("--provision", action="store_true", - help="also POST the dashboard to the Grafana API (requires GRAFANA_* env vars)") + help="also POST the merged dashboard to the Grafana API (requires GRAFANA_* env vars)") args = parser.parse_args() ipfabric_url = env("IPFABRIC_URL", required=True) @@ -674,13 +529,20 @@ def main(): dashboard_uid = env("GRAFANA_DASHBOARD_UID", "evpn-vxlan-fabric-weathermap") datasource_uid = env("GRAFANA_DATASOURCE_UID", "PROMETHEUS_DATASOURCE_UID_PLACEHOLDER") plugin_id = env("GRAFANA_WEATHERMAP_PLUGIN_ID", "tamirsuliman-weathermap-panel") - dashboard_payload = build_dashboard(weathermap, targets, dashboard_uid, datasource_uid, plugin_id) + weathermap_panel = build_weathermap_panel(weathermap, targets, datasource_uid, plugin_id) + + print(f"Loading manual dashboard base ({args.base})...") + base_dashboard = load_base_dashboard(args.base) + base_dashboard = substitute_placeholders(base_dashboard, {"__DATASOURCE_UID__": datasource_uid}) + dashboard = merge_weathermap_into_base(base_dashboard, weathermap_panel, dashboard_uid) + dashboard_payload = {"dashboard": dashboard, "overwrite": True} os.makedirs(os.path.dirname(args.output) or ".", exist_ok=True) with open(args.output, "w") as f: json.dump(dashboard_payload, f, indent=2) f.write("\n") - print(f"Wrote {args.output} ({len(weathermap['nodes'])} nodes, {len(weathermap['links'])} links)") + print(f"Wrote {args.output} ({len(weathermap['nodes'])} nodes, {len(weathermap['links'])} links, " + f"{len(dashboard['panels'])} panels total)") if args.provision: grafana_url = env("GRAFANA_URL", required=True) From e73b789f9223e4cdd548189dad95ff2dccdaad46 Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Fri, 10 Jul 2026 10:20:29 +0000 Subject: [PATCH 16/28] Add sample environment file with Grafana and IPFabric credentials --- envrc.sample | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 envrc.sample diff --git a/envrc.sample b/envrc.sample new file mode 100644 index 0000000..1d698b9 --- /dev/null +++ b/envrc.sample @@ -0,0 +1,4 @@ +export GRAFANA_URL="" +export GRAFANA_TOKEN="" +export IPFABRIC_URL="" +export IPFABRIC_TOKEN="" From fcd7ea25676c3075307f6bb048cb1f55e4d3cf4a Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Fri, 10 Jul 2026 10:40:42 +0000 Subject: [PATCH 17/28] Layered default layout by hostname role + preserve live node positions Default node position for spine/core/border-leaf/leaf/access is now a Y-tier by role (parsed from hostname, same trust level as the site parsing from #49) with X grouped by site within each tier, replacing the flat site-grid heuristic. Position specifically is now read from the live Grafana dashboard before computing anything, so a node manually drag-and-dropped in the UI keeps its position across regeneration -- only nodes with no live position yet (new devices, or first-ever run) get the layered default. Devices removed from the topology are simply absent from this run's output, so no orphaned position/link reference is possible. Refs #53 --- configs/grafana/weathermap-dashboard.json | 110 ++++++++--------- scripts/README.md | 28 ++++- scripts/generate_weathermap.py | 143 ++++++++++++++++++---- 3 files changed, 196 insertions(+), 85 deletions(-) diff --git a/configs/grafana/weathermap-dashboard.json b/configs/grafana/weathermap-dashboard.json index 80d15ad..a34064b 100644 --- a/configs/grafana/weathermap-dashboard.json +++ b/configs/grafana/weathermap-dashboard.json @@ -117,8 +117,8 @@ "id": "campus-spine1", "label": "campus-spine1", "position": [ - 460, - 900 + 2595, + 93 ], "isConnection": false, "useConstantSpacing": false, @@ -173,8 +173,8 @@ "id": "dc-spine1", "label": "dc-spine1", "position": [ - 460, - 300 + -793, + 31 ], "isConnection": false, "useConstantSpacing": false, @@ -229,8 +229,8 @@ "id": "dc-spine2", "label": "dc-spine2", "position": [ - 640, - 300 + -275, + 27 ], "isConnection": false, "useConstantSpacing": false, @@ -285,8 +285,8 @@ "id": "campus-spine2", "label": "campus-spine2", "position": [ - 640, - 900 + 2147, + 58 ], "isConnection": false, "useConstantSpacing": false, @@ -341,8 +341,8 @@ "id": "campus-border-leaf1", "label": "campus-border-leaf1", "position": [ - 460, - 750 + 1744, + -152 ], "isConnection": false, "useConstantSpacing": false, @@ -398,7 +398,7 @@ "label": "dc-leaf1", "position": [ 100, - 150 + 900 ], "isConnection": false, "useConstantSpacing": false, @@ -460,8 +460,8 @@ "id": "campus-border-leaf2", "label": "campus-border-leaf2", "position": [ - 640, - 750 + 1407, + -163 ], "isConnection": false, "useConstantSpacing": false, @@ -516,8 +516,8 @@ "id": "dc-leaf4", "label": "dc-leaf4", "position": [ - 640, - 150 + -687, + 538 ], "isConnection": false, "useConstantSpacing": false, @@ -572,8 +572,8 @@ "id": "dc-leaf3", "label": "dc-leaf3", "position": [ - 460, - 150 + -920, + 540 ], "isConnection": false, "useConstantSpacing": false, @@ -628,8 +628,8 @@ "id": "dc-leaf5", "label": "dc-leaf5", "position": [ - 820, - 150 + -226, + 525 ], "isConnection": false, "useConstantSpacing": false, @@ -691,8 +691,8 @@ "id": "dc-border-leaf1", "label": "dc-border-leaf1", "position": [ - 820, - 0 + 215, + -169 ], "isConnection": false, "useConstantSpacing": false, @@ -747,8 +747,8 @@ "id": "dc-leaf6", "label": "dc-leaf6", "position": [ - 1000, - 150 + 56, + 532 ], "isConnection": false, "useConstantSpacing": false, @@ -810,8 +810,8 @@ "id": "dc-access1", "label": "dc-access1", "position": [ - 100, - 0 + -1432, + 773 ], "isConnection": false, "useConstantSpacing": false, @@ -866,8 +866,8 @@ "id": "dc-access2", "label": "dc-access2", "position": [ - 280, - 0 + -803, + 719 ], "isConnection": false, "useConstantSpacing": false, @@ -922,8 +922,8 @@ "id": "dc-leaf8", "label": "dc-leaf8", "position": [ - 280, - 300 + 816, + 553 ], "isConnection": false, "useConstantSpacing": false, @@ -978,8 +978,8 @@ "id": "dc-leaf7", "label": "dc-leaf7", "position": [ - 100, - 300 + 430, + 530 ], "isConnection": false, "useConstantSpacing": false, @@ -1034,8 +1034,8 @@ "id": "dc-access4", "label": "dc-access4", "position": [ - 640, - 0 + 644, + 707 ], "isConnection": false, "useConstantSpacing": false, @@ -1090,8 +1090,8 @@ "id": "dc-access3", "label": "dc-access3", "position": [ - 460, - 0 + -87, + 704 ], "isConnection": false, "useConstantSpacing": false, @@ -1146,8 +1146,8 @@ "id": "dc-border-leaf2", "label": "dc-border-leaf2", "position": [ - 1000, - 0 + 595, + -172 ], "isConnection": false, "useConstantSpacing": false, @@ -1202,8 +1202,8 @@ "id": "dc-leaf2", "label": "dc-leaf2", "position": [ - 280, - 150 + -1289, + 532 ], "isConnection": false, "useConstantSpacing": false, @@ -1265,8 +1265,8 @@ "id": "campus-leaf1", "label": "campus-leaf1", "position": [ - 820, - 750 + 1925, + 520 ], "isConnection": false, "useConstantSpacing": false, @@ -1328,8 +1328,8 @@ "id": "campus-access1", "label": "campus-access1", "position": [ - 100, - 750 + 2061, + 720 ], "isConnection": false, "useConstantSpacing": false, @@ -1384,8 +1384,8 @@ "id": "campus-leaf2", "label": "campus-leaf2", "position": [ - 1000, - 750 + 2161, + 520 ], "isConnection": false, "useConstantSpacing": false, @@ -1447,8 +1447,8 @@ "id": "campus-leaf3", "label": "campus-leaf3", "position": [ - 100, - 900 + 2585, + 510 ], "isConnection": false, "useConstantSpacing": false, @@ -1510,8 +1510,8 @@ "id": "campus-access2", "label": "campus-access2", "position": [ - 280, - 750 + 2955, + 521 ], "isConnection": false, "useConstantSpacing": false, @@ -1566,8 +1566,8 @@ "id": "campus-leaf4", "label": "campus-leaf4", "position": [ - 280, - 900 + 2812, + 731 ], "isConnection": false, "useConstantSpacing": false, @@ -1629,8 +1629,8 @@ "id": "core1", "label": "core1", "position": [ - 100, - 450 + 912, + 71 ], "isConnection": false, "useConstantSpacing": false, @@ -1685,8 +1685,8 @@ "id": "core2", "label": "core2", "position": [ - 280, - 450 + 1251, + 90 ], "isConnection": false, "useConstantSpacing": false, diff --git a/scripts/README.md b/scripts/README.md index bd052e7..9554650 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -62,8 +62,8 @@ alongside it. | `IPFABRIC_TOKEN` | yes | — | Inventory/Snapshots read access. Sent as `X-API-Token`, not `Authorization: Bearer` — IPFabric's REST API does not use bearer auth. | | `IPFABRIC_SNAPSHOT` | no | `$last` | | | `PROMETHEUS_URL` | no | `http://172.16.0.71:9090` | The **in-topology** Prometheus (see #45), used at generation time to validate the IPFabric→gnmic interface alias and to discover live VTEP/VLAN pairs. This does not have to be the same instance Grafana queries at render time — see below. | -| `GRAFANA_URL` | with `--provision` | — | | -| `GRAFANA_TOKEN` | with `--provision` | — | Grafana Service Account token, sent as `Authorization: Bearer`. | +| `GRAFANA_URL` | no (see #53) | — | Required for `--provision`. Also used, if set, to fetch the currently-provisioned dashboard and preserve any manually drag-and-drop-repositioned node positions — see step 3 below. Without it, every node gets the layered default position, even ones a human previously repositioned in the UI. | +| `GRAFANA_TOKEN` | no (see #53) | — | Grafana Service Account token, sent as `Authorization: Bearer`. Same conditions as `GRAFANA_URL` above. | | `GRAFANA_DATASOURCE_UID` | with `--provision` | — | UID of the Prometheus datasource in Grafana that will actually back the panel. **This must be a datasource that can see the gnmic metrics** — an unrelated/external Prometheus instance with no gnmic data will make the panel render with no values (this happened once, see #48). | | `GRAFANA_DASHBOARD_UID` | no | `evpn-vxlan-fabric-weathermap` | | | `GRAFANA_WEATHERMAP_PLUGIN_ID` | no | `tamirsuliman-weathermap-panel` | The installed weathermap-ng plugin id. Override if a different fork is installed — plugin ids don't always match the upstream repo name (the schema research in #48 was done against the `allamiro` fork's source; what's actually installed here is a different fork with a stricter/different runtime schema — see the `ANCHOR` handling in the script). | @@ -77,8 +77,28 @@ alongside it. they ride the same physical port as their parent interface and gnmic only exports physical interface counters), and dedupes the two directions IPFabric reports for each physical link into one. -3. Computes node positions as a simple site-grouped grid (dc/core/campus - bands) — IPFabric has no layout data. +3. Computes node positions (see #53): + - **Default layered layout**, for nodes with no known position yet: role + is parsed from the hostname naming convention (`*-spine*`→spine, + `core*`→core, `*-border-leaf*`→border-leaf, `*-leaf*`→leaf, + `*-access*`→access — same trust level as the `site` parsing used for + the Prometheus relabel, not IPFabric-derived), giving Y-tiers top to + bottom `spine → core → border-leaf → leaf → access`. X position is + grouped/columned by site within each tier, so e.g. dc leafs and campus + leafs land in the same row but different column bands. A hostname + matching no role pattern is logged (not silently placed in the wrong + tier) and put in a fallback tier below `access`. + - **Live-position preservation**: position is edited by drag-and-drop + directly in the Grafana UI, not in the git-committed base file — a + deliberate exception to the "file is the only source of truth" rule + from #52, because that's simply not where this field is edited. Before + computing the default layout above, the script fetches the currently + provisioned dashboard's weathermap panel (if `GRAFANA_URL`/`GRAFANA_TOKEN` + are set) and reuses each existing node's live position as-is. Only + genuinely new nodes (not in that live map — first-ever run, or a fresh + device added to the topology) get the layered default. A device removed + from the topology simply has no entry in this run's node/link output at + all, so no orphaned position or dangling link reference is possible. 4. Builds the panel's `targets`: one PromQL query per metric family (BGP status, interface tx, interface rx, VXLAN MAC/VNI), each with an explicit `legendFormat` so the resolved display name is predictable. diff --git a/scripts/generate_weathermap.py b/scripts/generate_weathermap.py index 0d6d1a3..2c741cd 100644 --- a/scripts/generate_weathermap.py +++ b/scripts/generate_weathermap.py @@ -61,7 +61,25 @@ SITE_ORDER = ["dc", "core", "campus"] GRID_COLUMNS = 6 GRID_SPACING_X = 180 GRID_SPACING_Y = 150 -SITE_BAND_Y = {"dc": 0, "core": 450, "campus": 750} + +# Layered default layout (see #53): device role is parsed from the hostname +# naming convention, same trust level as the `site` parsing already in place +# for the Prometheus relabel (#49) -- not IPFabric-derived, not configurable. +# Checked in this order so e.g. "campus-border-leaf1" matches border-leaf +# before the more general leaf pattern. +ROLE_PATTERNS = [ + ("spine", re.compile(r"-spine")), + ("core", re.compile(r"^core")), + ("border-leaf", re.compile(r"-border-leaf")), + ("leaf", re.compile(r"-leaf")), + ("access", re.compile(r"-access")), +] +ROLE_TIER_ORDER = ["spine", "core", "border-leaf", "leaf", "access"] +TIER_SPACING_Y = 300 +# Per-site X band start, wide enough that the largest role/site group (8 dc +# leafs) doesn't spill into the next site's band at GRID_COLUMNS=6. +SITE_X_OFFSET = {"dc": 100, "core": 1300, "campus": 1600} +UNMATCHED_ROLE_TIER_Y = len(ROLE_TIER_ORDER) * TIER_SPACING_Y + 300 # tamirsuliman-weathermap-panel's numeric anchor enum (Center=0, Top=1, # Bottom=2, Left=3, Right=4) -- reverse-engineered from module.js, since @@ -181,27 +199,49 @@ def promql_escape(s): # Topology processing # -------------------------------------------------------------------------- -def build_layout(devices): - by_site = {} +def parse_role(hostname): + """Device role from the hostname naming convention -- see ROLE_PATTERNS. + Returns None if nothing matches (logged by the caller, not silently + defaulted into the wrong tier).""" + for role, pattern in ROLE_PATTERNS: + if pattern.search(hostname): + return role + return None + + +def build_layout(devices, mismatches): + """Default layered layout for nodes with no live (Grafana-drag-and-drop) + position yet -- see #53. Y-tier by role (spine top, access bottom), X + grouped/columned by site within each tier so same-role devices from + different sites don't overlap.""" + groups = {} # (role, site) -> [hostname, ...] + unmatched = [] for dev in devices: - by_site.setdefault(dev["siteName"], []).append(dev["hostname"]) + host, site = dev["hostname"], dev["siteName"] + role = parse_role(host) + if role is None: + unmatched.append(host) + continue + groups.setdefault((role, site), []).append(host) positions = {} - for site in SITE_ORDER: - band_y = SITE_BAND_Y.get(site, 0) - for idx, host in enumerate(sorted(by_site.get(site, []))): - col, row = idx % GRID_COLUMNS, idx // GRID_COLUMNS - positions[host] = [100 + col * GRID_SPACING_X, band_y + row * GRID_SPACING_Y] + for role_idx, role in enumerate(ROLE_TIER_ORDER): + tier_y = role_idx * TIER_SPACING_Y + for site in SITE_ORDER: + x_offset = SITE_X_OFFSET.get(site, max(SITE_X_OFFSET.values()) + 300) + for idx, host in enumerate(sorted(groups.get((role, site), []))): + col, row = idx % GRID_COLUMNS, idx // GRID_COLUMNS + positions[host] = [x_offset + col * GRID_SPACING_X, tier_y + row * GRID_SPACING_Y] - # Any site not in SITE_ORDER (shouldn't happen given the naming convention, - # but don't silently drop nodes if it does) gets stacked below everything else. - extra_band_y = max(SITE_BAND_Y.values()) + 300 - for site, hosts in by_site.items(): - if site in SITE_ORDER: - continue - for idx, host in enumerate(sorted(hosts)): + if unmatched: + mismatches.append( + f"{len(unmatched)} hostname(s) matched no role pattern (spine/core/border-leaf/leaf/access), " + f"placed in a fallback tier instead of guessing: {', '.join(sorted(unmatched))}" + ) + for idx, host in enumerate(sorted(unmatched)): col, row = idx % GRID_COLUMNS, idx // GRID_COLUMNS - positions[host] = [100 + col * GRID_SPACING_X, extra_band_y + row * GRID_SPACING_Y] + positions[host] = [100 + col * GRID_SPACING_X, UNMATCHED_ROLE_TIER_Y + row * GRID_SPACING_Y] + return positions @@ -413,6 +453,7 @@ def build_weathermap(devices, links, interface_speeds, positions, prometheus_url # -------------------------------------------------------------------------- WEATHERMAP_SLOT_TITLE = "__WEATHERMAP_SLOT__" +WEATHERMAP_PANEL_TITLE = "Fabric Weathermap" # what the slot is renamed to on merge def build_weathermap_panel(weathermap, targets, datasource_uid, plugin_id): @@ -461,7 +502,7 @@ def merge_weathermap_into_base(base_dashboard, weathermap_panel, dashboard_uid): found = True merged = dict(panel) merged.update(weathermap_panel) - merged["title"] = "Fabric Weathermap" + merged["title"] = WEATHERMAP_PANEL_TITLE panels.append(merged) else: panels.append(panel) @@ -471,6 +512,39 @@ def merge_weathermap_into_base(base_dashboard, weathermap_panel, dashboard_uid): return dashboard +def fetch_live_node_positions(grafana_url, api_token, dashboard_uid): + """Node positions as currently provisioned in Grafana, keyed by node id + -- see #53. Position is edited live via drag-and-drop in the Grafana UI, + not in the git-committed base file, so it's the one weathermap field that + must be sourced from live Grafana state rather than regenerated or read + from the manual base -- a manual repositioning must survive every rerun. + + Returns {} if the dashboard doesn't exist yet (first-ever run) or has no + weathermap panel yet -- everything falls back to the default layered + layout in that case. Any other HTTP error is treated as a real + misconfiguration (e.g. a bad token) and raised, rather than silently + treated as "no dashboard" -- that would risk quietly discarding every + manual position on a run that should have failed loudly instead.""" + req = urllib.request.Request( + f"{grafana_url.rstrip('/')}/api/dashboards/uid/{dashboard_uid}", + headers={"Authorization": f"Bearer {api_token}"}, + method="GET", + ) + try: + with urllib.request.urlopen(req, timeout=30) as resp: + payload = json.load(resp) + except urllib.error.HTTPError as e: + if e.code == 404: + return {} + sys.exit(f"Fetching live dashboard for position preservation failed: HTTP {e.code} {e.read().decode()}") + + for panel in payload.get("dashboard", {}).get("panels", []): + if panel.get("title") == WEATHERMAP_PANEL_TITLE: + nodes = panel.get("options", {}).get("weathermap", {}).get("nodes", []) + return {n["id"]: n["position"] for n in nodes if "position" in n} + return {} + + def provision_to_grafana(grafana_url, api_token, dashboard_payload): req = urllib.request.Request( f"{grafana_url.rstrip('/')}/api/dashboards/db", @@ -501,6 +575,11 @@ def main(): ipfabric_token = env("IPFABRIC_TOKEN", required=True) snapshot = env("IPFABRIC_SNAPSHOT", "$last") prometheus_url = env("PROMETHEUS_URL", "http://172.16.0.71:9090") + dashboard_uid = env("GRAFANA_DASHBOARD_UID", "evpn-vxlan-fabric-weathermap") + datasource_uid = env("GRAFANA_DATASOURCE_UID", "PROMETHEUS_DATASOURCE_UID_PLACEHOLDER") + plugin_id = env("GRAFANA_WEATHERMAP_PLUGIN_ID", "tamirsuliman-weathermap-panel") + grafana_url = env("GRAFANA_URL") + grafana_token = env("GRAFANA_TOKEN") print(f"Fetching devices from IPFabric ({ipfabric_url}, snapshot={snapshot})...") devices = fetch_devices(ipfabric_url, ipfabric_token, snapshot) @@ -514,21 +593,33 @@ def main(): print("Fetching interface speeds...") interface_speeds = fetch_interface_speeds(ipfabric_url, ipfabric_token, snapshot) - positions = build_layout(devices) - mismatches = [] + default_positions = build_layout(devices, mismatches) + + # Position specifically is edited live in the Grafana UI (drag-and-drop), + # not in the git-committed base file -- see #53. Reuse whatever's live + # for nodes that already exist there; only brand-new nodes get the + # layered default. Iterating over default_positions (this run's device + # set) rather than the live map means a removed device's stale live + # position is simply never looked up again, no orphaned entry survives. + if grafana_url and grafana_token: + print(f"Fetching live node positions from {grafana_url} (preserve manual repositioning)...") + live_positions = fetch_live_node_positions(grafana_url, grafana_token, dashboard_uid) + print(f" {len(live_positions)} node(s) with an existing live position") + else: + print("GRAFANA_URL/GRAFANA_TOKEN not set -- skipping live position fetch, using layered default for all nodes", file=sys.stderr) + live_positions = {} + positions = {host: live_positions.get(host, default) for host, default in default_positions.items()} + print(f"Cross-checking interface names against live exporter ({prometheus_url})...") weathermap, targets = build_weathermap(devices, links, interface_speeds, positions, prometheus_url, mismatches) if mismatches: - print(f"\n{len(mismatches)} interface-name / bandwidth mismatch(es) found (link kept, not dropped):", file=sys.stderr) + print(f"\n{len(mismatches)} mismatch(es) found (link/position kept, not dropped):", file=sys.stderr) for m in mismatches: print(f" - {m}", file=sys.stderr) print(file=sys.stderr) - dashboard_uid = env("GRAFANA_DASHBOARD_UID", "evpn-vxlan-fabric-weathermap") - datasource_uid = env("GRAFANA_DATASOURCE_UID", "PROMETHEUS_DATASOURCE_UID_PLACEHOLDER") - plugin_id = env("GRAFANA_WEATHERMAP_PLUGIN_ID", "tamirsuliman-weathermap-panel") weathermap_panel = build_weathermap_panel(weathermap, targets, datasource_uid, plugin_id) print(f"Loading manual dashboard base ({args.base})...") @@ -545,8 +636,8 @@ def main(): f"{len(dashboard['panels'])} panels total)") if args.provision: - grafana_url = env("GRAFANA_URL", required=True) - grafana_token = env("GRAFANA_TOKEN", required=True) + if not (grafana_url and grafana_token): + sys.exit("Refusing to provision: GRAFANA_URL and GRAFANA_TOKEN must both be set") if datasource_uid == "PROMETHEUS_DATASOURCE_UID_PLACEHOLDER": sys.exit("Refusing to provision: set GRAFANA_DATASOURCE_UID to the real Prometheus datasource UID first") print(f"Provisioning dashboard '{dashboard_uid}' to {grafana_url}...") From 9b53ab06838efbf9facadf2240ca10ed7accdb03 Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Fri, 10 Jul 2026 12:50:12 +0000 Subject: [PATCH 18/28] Fix inconsistent node rectangle height via compactVerticalLinks Confirmed root cause against the installed plugin's real module.js (not the #48 schema doc, which doesn't cover this): node height is driven by max(anchors[Left].numLinks, anchors[Right].numLinks) whenever compactVerticalLinks is false, which is why campus-leaf1 (3 links) and campus-leaf2 (4 links) rendered at different heights despite the same role. Width is unaffected by link count -- it's always recomputed from the label text at render time, no override field exists. Set compactVerticalLinks: true on every generated node, which makes height a constant (fontSize + 2*padding.vertical) regardless of link count, for every node (padding/fontSize are already uniform fabric-wide). Refs #54 --- configs/grafana/weathermap-dashboard.json | 168 +++++++++++----------- scripts/generate_weathermap.py | 16 ++- 2 files changed, 99 insertions(+), 85 deletions(-) diff --git a/configs/grafana/weathermap-dashboard.json b/configs/grafana/weathermap-dashboard.json index a34064b..34c9ea7 100644 --- a/configs/grafana/weathermap-dashboard.json +++ b/configs/grafana/weathermap-dashboard.json @@ -117,12 +117,12 @@ "id": "campus-spine1", "label": "campus-spine1", "position": [ - 2595, - 93 + 1600, + 80 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -173,12 +173,12 @@ "id": "dc-spine1", "label": "dc-spine1", "position": [ - -793, - 31 + 350, + 80 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -229,12 +229,12 @@ "id": "dc-spine2", "label": "dc-spine2", "position": [ - -275, - 27 + 750, + 80 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -285,12 +285,12 @@ "id": "campus-spine2", "label": "campus-spine2", "position": [ - 2147, - 58 + 1850, + 80 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -341,12 +341,12 @@ "id": "campus-border-leaf1", "label": "campus-border-leaf1", "position": [ - 1744, - -152 + 1450, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -397,12 +397,12 @@ "id": "dc-leaf1", "label": "dc-leaf1", "position": [ - 100, - 900 + 80, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -460,12 +460,12 @@ "id": "campus-border-leaf2", "label": "campus-border-leaf2", "position": [ - 1407, - -163 + 1555, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -516,12 +516,12 @@ "id": "dc-leaf4", "label": "dc-leaf4", "position": [ - -687, - 538 + 395, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -572,12 +572,12 @@ "id": "dc-leaf3", "label": "dc-leaf3", "position": [ - -920, - 540 + 290, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -628,12 +628,12 @@ "id": "dc-leaf5", "label": "dc-leaf5", "position": [ - -226, - 525 + 500, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -691,12 +691,12 @@ "id": "dc-border-leaf1", "label": "dc-border-leaf1", "position": [ - 215, - -169 + 920, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -747,12 +747,12 @@ "id": "dc-leaf6", "label": "dc-leaf6", "position": [ - 56, - 532 + 605, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -810,12 +810,12 @@ "id": "dc-access1", "label": "dc-access1", "position": [ - -1432, - 773 + 132, + 440 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -866,12 +866,12 @@ "id": "dc-access2", "label": "dc-access2", "position": [ - -803, - 719 + 342, + 440 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -922,12 +922,12 @@ "id": "dc-leaf8", "label": "dc-leaf8", "position": [ - 816, - 553 + 815, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -978,12 +978,12 @@ "id": "dc-leaf7", "label": "dc-leaf7", "position": [ - 430, - 530 + 710, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -1034,12 +1034,12 @@ "id": "dc-access4", "label": "dc-access4", "position": [ - 644, - 707 + 762, + 440 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -1090,12 +1090,12 @@ "id": "dc-access3", "label": "dc-access3", "position": [ - -87, - 704 + 552, + 440 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -1146,12 +1146,12 @@ "id": "dc-border-leaf2", "label": "dc-border-leaf2", "position": [ - 595, - -172 + 1025, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -1202,12 +1202,12 @@ "id": "dc-leaf2", "label": "dc-leaf2", "position": [ - -1289, - 532 + 185, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -1265,12 +1265,12 @@ "id": "campus-leaf1", "label": "campus-leaf1", "position": [ - 1925, - 520 + 1660, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -1328,12 +1328,12 @@ "id": "campus-access1", "label": "campus-access1", "position": [ - 2061, - 720 + 1712, + 440 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -1384,12 +1384,12 @@ "id": "campus-leaf2", "label": "campus-leaf2", "position": [ - 2161, - 520 + 1765, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -1447,12 +1447,12 @@ "id": "campus-leaf3", "label": "campus-leaf3", "position": [ - 2585, - 510 + 1870, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -1510,12 +1510,12 @@ "id": "campus-access2", "label": "campus-access2", "position": [ - 2955, - 521 + 1922, + 440 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -1566,12 +1566,12 @@ "id": "campus-leaf4", "label": "campus-leaf4", "position": [ - 2812, - 731 + 1975, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -1629,12 +1629,12 @@ "id": "core1", "label": "core1", "position": [ - 912, - 71 + 1150, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 @@ -1685,12 +1685,12 @@ "id": "core2", "label": "core2", "position": [ - 1251, - 90 + 1280, + 260 ], "isConnection": false, "useConstantSpacing": false, - "compactVerticalLinks": false, + "compactVerticalLinks": true, "padding": { "horizontal": 12, "vertical": 6 diff --git a/scripts/generate_weathermap.py b/scripts/generate_weathermap.py index 2c741cd..8d7fe27 100644 --- a/scripts/generate_weathermap.py +++ b/scripts/generate_weathermap.py @@ -314,7 +314,21 @@ def build_weathermap(devices, links, interface_speeds, positions, prometheus_url "position": positions[host], "isConnection": False, "useConstantSpacing": False, - "compactVerticalLinks": False, + # True (not the plugin default) so rendered node HEIGHT is + # constant, decoupled from per-node link count -- see #54. Ground + # truth confirmed against the installed plugin's real module.js + # (not the #48 schema doc, which doesn't cover this): height is + # `fontSize + 2*padding.vertical` when compactVerticalLinks is + # true, unconditionally; when false, it's the larger of that or + # a term proportional to max(anchors[Left].numLinks, + # anchors[Right].numLinks) -- exactly why campus-leaf1 (3 links) + # and campus-leaf2 (4 links) rendered at different heights. + # Width is unaffected either way: it's always recomputed from + # the label text at render time (no override field exists), and + # useConstantSpacing only pulls in Top/Bottom anchor link count, + # which this generator never uses (links always attach + # Right/Left -- see anchor_counts above). + "compactVerticalLinks": True, "padding": {"horizontal": 12, "vertical": 6}, "colors": dict(NODE_COLORS), "nodeIcon": None, From 8fb83b9446f21d64c6612cf8c2ee1ee5d51cd03e Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Fri, 10 Jul 2026 12:58:15 +0000 Subject: [PATCH 19/28] Add end-to-end how-to guide + regenerate dashboard from a clean reset Full reset validation: deleted weathermap-dashboard.json and the live Grafana dashboard (dashboard-base.json untouched, it's the manual part). Regenerated from scratch and reprovisioned -- confirms the first-ever-run path (0 live positions found, full layered layout applied, all 4 panels' queries resolve). Documented the whole flow in scripts/README.md as a start-to-finish how-to: credential acquisition (UI steps for the fiddly API paths -- Grafana service account token, datasource UID, plugin id), dry run, provision, verification (UI walkthrough + API/Explore alternative), re-running after topology changes, and a troubleshooting table. Added GRAFANA_DATASOURCE_UID and the optional env vars to envrc.sample. --- configs/grafana/weathermap-dashboard.json | 110 +++++++------- envrc.sample | 7 + scripts/README.md | 169 +++++++++++++++++++--- 3 files changed, 210 insertions(+), 76 deletions(-) diff --git a/configs/grafana/weathermap-dashboard.json b/configs/grafana/weathermap-dashboard.json index 34c9ea7..b809e98 100644 --- a/configs/grafana/weathermap-dashboard.json +++ b/configs/grafana/weathermap-dashboard.json @@ -118,7 +118,7 @@ "label": "campus-spine1", "position": [ 1600, - 80 + 0 ], "isConnection": false, "useConstantSpacing": false, @@ -173,8 +173,8 @@ "id": "dc-spine1", "label": "dc-spine1", "position": [ - 350, - 80 + 100, + 0 ], "isConnection": false, "useConstantSpacing": false, @@ -229,8 +229,8 @@ "id": "dc-spine2", "label": "dc-spine2", "position": [ - 750, - 80 + 280, + 0 ], "isConnection": false, "useConstantSpacing": false, @@ -285,8 +285,8 @@ "id": "campus-spine2", "label": "campus-spine2", "position": [ - 1850, - 80 + 1780, + 0 ], "isConnection": false, "useConstantSpacing": false, @@ -341,8 +341,8 @@ "id": "campus-border-leaf1", "label": "campus-border-leaf1", "position": [ - 1450, - 260 + 1600, + 600 ], "isConnection": false, "useConstantSpacing": false, @@ -397,8 +397,8 @@ "id": "dc-leaf1", "label": "dc-leaf1", "position": [ - 80, - 260 + 100, + 900 ], "isConnection": false, "useConstantSpacing": false, @@ -460,8 +460,8 @@ "id": "campus-border-leaf2", "label": "campus-border-leaf2", "position": [ - 1555, - 260 + 1780, + 600 ], "isConnection": false, "useConstantSpacing": false, @@ -516,8 +516,8 @@ "id": "dc-leaf4", "label": "dc-leaf4", "position": [ - 395, - 260 + 640, + 900 ], "isConnection": false, "useConstantSpacing": false, @@ -572,8 +572,8 @@ "id": "dc-leaf3", "label": "dc-leaf3", "position": [ - 290, - 260 + 460, + 900 ], "isConnection": false, "useConstantSpacing": false, @@ -628,8 +628,8 @@ "id": "dc-leaf5", "label": "dc-leaf5", "position": [ - 500, - 260 + 820, + 900 ], "isConnection": false, "useConstantSpacing": false, @@ -691,8 +691,8 @@ "id": "dc-border-leaf1", "label": "dc-border-leaf1", "position": [ - 920, - 260 + 100, + 600 ], "isConnection": false, "useConstantSpacing": false, @@ -747,8 +747,8 @@ "id": "dc-leaf6", "label": "dc-leaf6", "position": [ - 605, - 260 + 1000, + 900 ], "isConnection": false, "useConstantSpacing": false, @@ -810,8 +810,8 @@ "id": "dc-access1", "label": "dc-access1", "position": [ - 132, - 440 + 100, + 1200 ], "isConnection": false, "useConstantSpacing": false, @@ -866,8 +866,8 @@ "id": "dc-access2", "label": "dc-access2", "position": [ - 342, - 440 + 280, + 1200 ], "isConnection": false, "useConstantSpacing": false, @@ -922,8 +922,8 @@ "id": "dc-leaf8", "label": "dc-leaf8", "position": [ - 815, - 260 + 280, + 1050 ], "isConnection": false, "useConstantSpacing": false, @@ -978,8 +978,8 @@ "id": "dc-leaf7", "label": "dc-leaf7", "position": [ - 710, - 260 + 100, + 1050 ], "isConnection": false, "useConstantSpacing": false, @@ -1034,8 +1034,8 @@ "id": "dc-access4", "label": "dc-access4", "position": [ - 762, - 440 + 640, + 1200 ], "isConnection": false, "useConstantSpacing": false, @@ -1090,8 +1090,8 @@ "id": "dc-access3", "label": "dc-access3", "position": [ - 552, - 440 + 460, + 1200 ], "isConnection": false, "useConstantSpacing": false, @@ -1146,8 +1146,8 @@ "id": "dc-border-leaf2", "label": "dc-border-leaf2", "position": [ - 1025, - 260 + 280, + 600 ], "isConnection": false, "useConstantSpacing": false, @@ -1202,8 +1202,8 @@ "id": "dc-leaf2", "label": "dc-leaf2", "position": [ - 185, - 260 + 280, + 900 ], "isConnection": false, "useConstantSpacing": false, @@ -1265,8 +1265,8 @@ "id": "campus-leaf1", "label": "campus-leaf1", "position": [ - 1660, - 260 + 1600, + 900 ], "isConnection": false, "useConstantSpacing": false, @@ -1328,8 +1328,8 @@ "id": "campus-access1", "label": "campus-access1", "position": [ - 1712, - 440 + 1600, + 1200 ], "isConnection": false, "useConstantSpacing": false, @@ -1384,8 +1384,8 @@ "id": "campus-leaf2", "label": "campus-leaf2", "position": [ - 1765, - 260 + 1780, + 900 ], "isConnection": false, "useConstantSpacing": false, @@ -1447,8 +1447,8 @@ "id": "campus-leaf3", "label": "campus-leaf3", "position": [ - 1870, - 260 + 1960, + 900 ], "isConnection": false, "useConstantSpacing": false, @@ -1510,8 +1510,8 @@ "id": "campus-access2", "label": "campus-access2", "position": [ - 1922, - 440 + 1780, + 1200 ], "isConnection": false, "useConstantSpacing": false, @@ -1566,8 +1566,8 @@ "id": "campus-leaf4", "label": "campus-leaf4", "position": [ - 1975, - 260 + 2140, + 900 ], "isConnection": false, "useConstantSpacing": false, @@ -1629,8 +1629,8 @@ "id": "core1", "label": "core1", "position": [ - 1150, - 260 + 1300, + 300 ], "isConnection": false, "useConstantSpacing": false, @@ -1685,8 +1685,8 @@ "id": "core2", "label": "core2", "position": [ - 1280, - 260 + 1480, + 300 ], "isConnection": false, "useConstantSpacing": false, diff --git a/envrc.sample b/envrc.sample index 1d698b9..52e9916 100644 --- a/envrc.sample +++ b/envrc.sample @@ -1,4 +1,11 @@ export GRAFANA_URL="" export GRAFANA_TOKEN="" +export GRAFANA_DATASOURCE_UID="" export IPFABRIC_URL="" export IPFABRIC_TOKEN="" + +# Optional -- see scripts/README.md for defaults and when to override +# export IPFABRIC_SNAPSHOT="$last" +# export PROMETHEUS_URL="http://172.16.0.71:9090" +# export GRAFANA_DASHBOARD_UID="evpn-vxlan-fabric-weathermap" +# export GRAFANA_WEATHERMAP_PLUGIN_ID="tamirsuliman-weathermap-panel" diff --git a/scripts/README.md b/scripts/README.md index 9554650..b07384b 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -26,32 +26,159 @@ comment thread for the live-validation history (auth quirks, plugin id, a PromQL escaping bug, a panel-crash fix — worth reading before touching the anchor/regex-escaping logic). -## Usage +## How to generate and provision the dashboard, start to finish + +This walks through the whole thing from nothing — no `weathermap-dashboard.json`, +no dashboard in Grafana — to a fully working, live-updating dashboard. Useful +for a first-ever setup, or after a full reset (deleting the generated JSON +and the Grafana dashboard, keeping `dashboard-base.json` — that file is the +hand-authored part of the project and is never deleted/regenerated). + +### 1. Gather credentials + +Four values are required; two more are worth setting so `--provision` works +without extra flags. Each has a fiddly API path and a much simpler UI path — +UI is recommended unless you're scripting this. + +**IPFabric API token** (`IPFABRIC_TOKEN`) +- UI: IPFabric → user menu (top right) → **Settings** → **API Tokens** → **Add token**. Needs Inventory/Snapshots read access. +- No simpler API alternative — tokens can only be created through the UI or by an admin via the same UI. + +**Grafana service account token** (`GRAFANA_TOKEN`) +- UI (recommended — the API path is multiple chained calls: create the service account, then create a token under it, threading the returned service account ID between them): + 1. Grafana → **Administration** → **Users and access** → **Service accounts** → **Add service account**. + 2. Give it a name (e.g. `weathermap-generator`), role **Editor** (needs to create/update dashboards). + 3. Open the new service account → **Add service account token** → copy the token immediately, it's shown once. + +**Prometheus datasource UID** (`GRAFANA_DATASOURCE_UID`) +- UI: Grafana → **Connections** → **Data sources** → click the Prometheus datasource that can see the gnmic metrics (`NetLab` in this lab) → the UID is the last segment of the page URL (`.../datasources/edit/`). +- API alternative: `curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" "$GRAFANA_URL/api/datasources" | jq '.[] | {name, uid}'` +- **This must be a datasource that can actually see the gnmic metrics** — see the note in the Environment variables table below; picking the wrong one renders the panel with no data (happened once, see #48). + +**Weathermap plugin ID** (`GRAFANA_WEATHERMAP_PLUGIN_ID`, optional — only if a different fork than `tamirsuliman-weathermap-panel` is installed) +- UI: Grafana → **Administration** → **Plugins and data** → **Plugins**, search "weathermap", open it — the id is in the page URL (`.../plugins/`). +- API alternative: `curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" "$GRAFANA_URL/api/plugins?panelId=..." ` is more involved than it's worth; the UI is faster here. + +**IPFabric/Grafana URLs** — just the base URLs you already use in a browser (e.g. `https://ipfabric.example.com`, `https://grafana.example.com`). + +Copy `envrc.sample` to `.envrc` (already gitignored) and fill in the values, +or `export` them directly in your shell: ```bash -export IPFABRIC_URL=https:// -export IPFABRIC_TOKEN= -python3 scripts/generate_weathermap.py # writes the merged JSON only - -export GRAFANA_URL=https:// -export GRAFANA_TOKEN= -export GRAFANA_DATASOURCE_UID= -python3 scripts/generate_weathermap.py --provision # also provisions via the Grafana API +cp envrc.sample .envrc # then edit .envrc +source .envrc ``` -Re-run after any topology change (`evpn-lab.clab.yml`) to regenerate the -weathermap panel and re-merge/re-provision. The script always regenerates the -weathermap panel fresh from live IPFabric data (no diffing/incremental -state), so a plain re-run already picks up any topology change — there's no -separate "detect changes" step. The only manual/operational step is -*triggering* that re-run after a change; there's no watcher or CI hook doing -it automatically yet. +### 2. Dry run first (no Grafana changes yet) -If you need to change the BGP/ports/throughput panels, template variables, or -layout, edit `configs/grafana/dashboard-base.json` directly and re-run the -script (or run it with `--provision` to push the edit live) — no topology -data is needed for that path, the weathermap panel just gets regenerated -alongside it. +```bash +python3 scripts/generate_weathermap.py +``` + +This only needs `IPFABRIC_URL`/`IPFABRIC_TOKEN` (and optionally `GRAFANA_URL`/`GRAFANA_TOKEN`, +to preserve any live node positions — see #53). It writes +`configs/grafana/weathermap-dashboard.json` and prints a summary: + +``` +Fetching devices from IPFabric (...)... + 28 devices +Fetching connectivity-matrix... + 61 fabric links after Management-plane filter + dedup (702 raw rows) +Fetching interface speeds... +Fetching live node positions from ... (preserve manual repositioning)... + 0 node(s) with an existing live position <- 0 is expected/correct on a first-ever run +Cross-checking interface names against live exporter (...)... +Loading manual dashboard base (configs/grafana/dashboard-base.json)... +Wrote configs/grafana/weathermap-dashboard.json (28 nodes, 61 links, 4 panels total) +``` + +If any "interface-name / bandwidth mismatch(es)" are printed to stderr, read +them — they mean a link's query won't resolve to data until the underlying +gnmic/IPFabric naming mismatch is fixed (not this script's job to fix, see +"Known gaps" below), but the link itself is still generated, not dropped. + +Open the written JSON and sanity-check it if you like before pushing it live +— it's plain, readable JSON, no need to trust it blindly. + +### 3. Provision it + +```bash +python3 scripts/generate_weathermap.py --provision +``` + +Requires `GRAFANA_URL`, `GRAFANA_TOKEN`, `GRAFANA_DATASOURCE_UID` in addition +to the IPFabric variables. On success: + +``` +Provisioning dashboard 'evpn-vxlan-fabric-weathermap' to https://... + success: /d/evpn-vxlan-fabric-weathermap/evpn-vxlan-fabric-weathermap +``` + +### 4. Verify + +**Via the UI (recommended, and the only way to actually see it render)**: +open `$GRAFANA_URL/d/evpn-vxlan-fabric-weathermap` in a browser. Check: +- The weathermap panel shows all nodes, roughly grouped spine-top/access-bottom (see #53), all colored green (up) with no data gaps. +- The `site`/`device` dropdown variables at the top of the dashboard filter the BGP Sessions and Ports/Interfaces tables when changed. +- BGP Sessions and Ports/Interfaces tables are populated, states colored (green=Up, red=Down). +- Throughput per Site shows a signed graph (in above the axis, out below) with plausible non-zero values. + +This step has no good API substitute — dashboard rendering, panel colors, +and transformations (the ports table's Grafana-side merge, in particular) +only actually execute in a browser. If you don't have one handy, at minimum +confirm the queries resolve (below), then ask someone who does have UI +access to eyeball it. + +**Via the API (queries only, not rendering)** — useful for CI/scripting or a +quick sanity check without opening a browser: + +```bash +# Any panel's query, pulled straight from the generated JSON, e.g.: +curl -s -X POST -H "Authorization: Bearer $GRAFANA_TOKEN" -H "Content-Type: application/json" \ + "$GRAFANA_URL/api/ds/query" -d '{ + "queries": [{"refId":"A","datasource":{"type":"prometheus","uid":"'"$GRAFANA_DATASOURCE_UID"'"}, + "expr":"min by (device) (interfaces_interface_state_oper_status)","instant":true}], + "from":"now-5m","to":"now"}' | python3 -m json.tool +``` + +A much friendlier equivalent that doesn't need hand-built JSON: Grafana's +**Explore** view (left sidebar → **Explore**, pick the Prometheus datasource, +paste a PromQL expression from the panel JSON, run it). This is the manual +alternative for every `/api/ds/query` validation call used during +development of this dashboard (#49–#54) — same result, no `curl`/`jq` +required. + +### 5. Re-running after a topology change + +```bash +python3 scripts/generate_weathermap.py --provision +``` + +Same command — the script always regenerates the weathermap panel fresh from +live IPFabric data (no diffing/incremental state), so a plain re-run already +picks up any topology change. There's no separate "detect changes" step, and +no watcher/CI hook triggering it automatically yet — re-running after a +change is a manual/operational step for now. + +Nodes you've manually repositioned in the Grafana UI keep that position +across the re-run (#53); only genuinely new nodes get the layered default. + +If you only need to change the BGP/ports/throughput panels, template +variables, or panel layout, edit `configs/grafana/dashboard-base.json` +directly and re-run the script (or `--provision` to push it live) — no +topology fetch is skipped today (the script always does the full IPFabric +round-trip regardless), but no topology data is *needed* for that kind of +edit to take effect. + +### Troubleshooting + +| Symptom | Likely cause | Check | +|---|---|---| +| `Refusing to provision: set GRAFANA_DATASOURCE_UID...` | Env var unset or still the placeholder | `echo $GRAFANA_DATASOURCE_UID` | +| Panel loads but shows no data at all | Wrong datasource UID — points at a Prometheus instance that can't see the gnmic metrics | Grafana UI → Explore → run `up` against the datasource you set; confirm gnmic-labeled series come back | +| `Base dashboard has no panel titled '__WEATHERMAP_SLOT__'` | `dashboard-base.json` was edited and the slot panel's `title` got changed/removed | Check the panel with `id: 1` in `dashboard-base.json` still has that exact title | +| A node's manual position keeps resetting to the default layout on every rerun | `GRAFANA_URL`/`GRAFANA_TOKEN` not set for that run, so the live-position fetch was skipped entirely | Check the printed line `Fetching live node positions from ...` appears in the run's output — if it's missing, those two vars weren't set | +| `Fetching live dashboard for position preservation failed: HTTP 401/403` | Bad/expired Grafana token | Regenerate the service account token (UI steps above) | ## Environment variables From 998014d144d927a3f3dbabc66d12461581a8fa38 Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Fri, 10 Jul 2026 13:08:43 +0000 Subject: [PATCH 20/28] Update Grafana weathermap dashboard node positions --- configs/grafana/weathermap-dashboard.json | 110 +++++++++++----------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/configs/grafana/weathermap-dashboard.json b/configs/grafana/weathermap-dashboard.json index b809e98..34c9ea7 100644 --- a/configs/grafana/weathermap-dashboard.json +++ b/configs/grafana/weathermap-dashboard.json @@ -118,7 +118,7 @@ "label": "campus-spine1", "position": [ 1600, - 0 + 80 ], "isConnection": false, "useConstantSpacing": false, @@ -173,8 +173,8 @@ "id": "dc-spine1", "label": "dc-spine1", "position": [ - 100, - 0 + 350, + 80 ], "isConnection": false, "useConstantSpacing": false, @@ -229,8 +229,8 @@ "id": "dc-spine2", "label": "dc-spine2", "position": [ - 280, - 0 + 750, + 80 ], "isConnection": false, "useConstantSpacing": false, @@ -285,8 +285,8 @@ "id": "campus-spine2", "label": "campus-spine2", "position": [ - 1780, - 0 + 1850, + 80 ], "isConnection": false, "useConstantSpacing": false, @@ -341,8 +341,8 @@ "id": "campus-border-leaf1", "label": "campus-border-leaf1", "position": [ - 1600, - 600 + 1450, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -397,8 +397,8 @@ "id": "dc-leaf1", "label": "dc-leaf1", "position": [ - 100, - 900 + 80, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -460,8 +460,8 @@ "id": "campus-border-leaf2", "label": "campus-border-leaf2", "position": [ - 1780, - 600 + 1555, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -516,8 +516,8 @@ "id": "dc-leaf4", "label": "dc-leaf4", "position": [ - 640, - 900 + 395, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -572,8 +572,8 @@ "id": "dc-leaf3", "label": "dc-leaf3", "position": [ - 460, - 900 + 290, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -628,8 +628,8 @@ "id": "dc-leaf5", "label": "dc-leaf5", "position": [ - 820, - 900 + 500, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -691,8 +691,8 @@ "id": "dc-border-leaf1", "label": "dc-border-leaf1", "position": [ - 100, - 600 + 920, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -747,8 +747,8 @@ "id": "dc-leaf6", "label": "dc-leaf6", "position": [ - 1000, - 900 + 605, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -810,8 +810,8 @@ "id": "dc-access1", "label": "dc-access1", "position": [ - 100, - 1200 + 132, + 440 ], "isConnection": false, "useConstantSpacing": false, @@ -866,8 +866,8 @@ "id": "dc-access2", "label": "dc-access2", "position": [ - 280, - 1200 + 342, + 440 ], "isConnection": false, "useConstantSpacing": false, @@ -922,8 +922,8 @@ "id": "dc-leaf8", "label": "dc-leaf8", "position": [ - 280, - 1050 + 815, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -978,8 +978,8 @@ "id": "dc-leaf7", "label": "dc-leaf7", "position": [ - 100, - 1050 + 710, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -1034,8 +1034,8 @@ "id": "dc-access4", "label": "dc-access4", "position": [ - 640, - 1200 + 762, + 440 ], "isConnection": false, "useConstantSpacing": false, @@ -1090,8 +1090,8 @@ "id": "dc-access3", "label": "dc-access3", "position": [ - 460, - 1200 + 552, + 440 ], "isConnection": false, "useConstantSpacing": false, @@ -1146,8 +1146,8 @@ "id": "dc-border-leaf2", "label": "dc-border-leaf2", "position": [ - 280, - 600 + 1025, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -1202,8 +1202,8 @@ "id": "dc-leaf2", "label": "dc-leaf2", "position": [ - 280, - 900 + 185, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -1265,8 +1265,8 @@ "id": "campus-leaf1", "label": "campus-leaf1", "position": [ - 1600, - 900 + 1660, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -1328,8 +1328,8 @@ "id": "campus-access1", "label": "campus-access1", "position": [ - 1600, - 1200 + 1712, + 440 ], "isConnection": false, "useConstantSpacing": false, @@ -1384,8 +1384,8 @@ "id": "campus-leaf2", "label": "campus-leaf2", "position": [ - 1780, - 900 + 1765, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -1447,8 +1447,8 @@ "id": "campus-leaf3", "label": "campus-leaf3", "position": [ - 1960, - 900 + 1870, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -1510,8 +1510,8 @@ "id": "campus-access2", "label": "campus-access2", "position": [ - 1780, - 1200 + 1922, + 440 ], "isConnection": false, "useConstantSpacing": false, @@ -1566,8 +1566,8 @@ "id": "campus-leaf4", "label": "campus-leaf4", "position": [ - 2140, - 900 + 1975, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -1629,8 +1629,8 @@ "id": "core1", "label": "core1", "position": [ - 1300, - 300 + 1150, + 260 ], "isConnection": false, "useConstantSpacing": false, @@ -1685,8 +1685,8 @@ "id": "core2", "label": "core2", "position": [ - 1480, - 300 + 1280, + 260 ], "isConnection": false, "useConstantSpacing": false, From 045179e09861618cfe7d7cb06b97d6530a6abbbb Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Fri, 10 Jul 2026 13:18:05 +0000 Subject: [PATCH 21/28] Reword scripts/README.md for readability, add pipeline diagram Same content, restructured for scanning: tables instead of long paragraphs (credentials, troubleshooting, env vars), shorter sentences, deep rationale trimmed to a phrase + issue reference instead of inline essays. Cut from 258 to 135 lines. Added assets/weathermap-pipeline.svg showing the IPFabric/Prometheus -> generator -> merge (with the manual base) -> Grafana flow, referenced at the top of the README. --- assets/weathermap-pipeline.svg | 72 +++++++ scripts/README.md | 331 +++++++++++---------------------- 2 files changed, 176 insertions(+), 227 deletions(-) create mode 100644 assets/weathermap-pipeline.svg diff --git a/assets/weathermap-pipeline.svg b/assets/weathermap-pipeline.svg new file mode 100644 index 0000000..407b6e4 --- /dev/null +++ b/assets/weathermap-pipeline.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + IPFabric + topology, inventory + + + Prometheus + gnmic metrics, live labels + + + + generate_weathermap.py + weathermap panel only + targets + options.weathermap + + + + + + + dashboard-base.json + hand-authored, committed + BGP/ports/throughput/vars + + + + merge + splices into __WEATHERMAP_SLOT__ + + + + + + + weathermap-dashboard.json + generated build artifact + + + + + + Grafana + --provision (POST /api/dashboards/db) + + + + + + + live node positions read back before each regeneration (see #53) + + diff --git a/scripts/README.md b/scripts/README.md index b07384b..283597c 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -1,139 +1,67 @@ # scripts/generate_weathermap.py -Generates a [weathermap-ng](https://github.com/allamiro/grafana-network-weathermap-ng) -**panel only** from live IPFabric topology + gnmic/Prometheus metrics, merges -it into a manually-authored dashboard base, and writes the merged result to -`configs/grafana/weathermap-dashboard.json` (committed to Gitea as the build -artifact, same pattern as the retired Flow Panel YAML). Optionally provisions -it into Grafana via the HTTP API. +Generates the **weathermap panel only** from live IPFabric + Prometheus +data, merges it into a hand-authored dashboard base, and provisions the +result to Grafana. -## File structure (see #52) +![pipeline diagram](../assets/weathermap-pipeline.svg) -| File | What it is | -|---|---| -| `configs/grafana/dashboard-base.json` | **Manually authored**, committed source of truth for everything except the weathermap panel: BGP sessions table, ports/interfaces table, throughput-per-site graphs, `site`/`device` template variables, panel layout. Edit this directly for anything in those panels. Contains a reserved slot panel titled `__WEATHERMAP_SLOT__` (id `1`, `gridPos` fixed) that the script splices the generated weathermap panel into. | -| `configs/grafana/weathermap-dashboard.json` | **Generated build artifact** — base + freshly-generated weathermap panel, merged. This is what actually gets provisioned to Grafana. Don't hand-edit; re-run the script. | +## Files -The script itself only ever knows about the weathermap panel (`targets` + -`options.weathermap`) — it has no knowledge of the other three panels or the -template variables. That split is deliberate: topology-driven content -(nodes/links, generated from live IPFabric+Prometheus data) is separated from -hand-tuned dashboard composition (table layout, transformations, thresholds), -which doesn't need to regenerate on every topology change. +| File | What it is | Edit it? | +|---|---|---| +| `configs/grafana/dashboard-base.json` | Hand-authored: BGP table, ports table, throughput graphs, `site`/`device` variables, layout. Has one reserved slot panel (`title: "__WEATHERMAP_SLOT__"`) where the weathermap gets spliced in. | Yes, directly | +| `configs/grafana/weathermap-dashboard.json` | Generated build artifact — base + fresh weathermap panel, merged. What actually gets provisioned. | No — regenerate instead | -See issue #48 for the panel schema research this is built against, and its -comment thread for the live-validation history (auth quirks, plugin id, a -PromQL escaping bug, a panel-crash fix — worth reading before touching the -anchor/regex-escaping logic). +Why split like this: topology data (nodes/links) changes with the lab and +should regenerate every time; the rest of the dashboard (table layout, +thresholds, transformations) is hand-tuned and shouldn't be touched by a +topology refresh. See #52. -## How to generate and provision the dashboard, start to finish - -This walks through the whole thing from nothing — no `weathermap-dashboard.json`, -no dashboard in Grafana — to a fully working, live-updating dashboard. Useful -for a first-ever setup, or after a full reset (deleting the generated JSON -and the Grafana dashboard, keeping `dashboard-base.json` — that file is the -hand-authored part of the project and is never deleted/regenerated). - -### 1. Gather credentials - -Four values are required; two more are worth setting so `--provision` works -without extra flags. Each has a fiddly API path and a much simpler UI path — -UI is recommended unless you're scripting this. - -**IPFabric API token** (`IPFABRIC_TOKEN`) -- UI: IPFabric → user menu (top right) → **Settings** → **API Tokens** → **Add token**. Needs Inventory/Snapshots read access. -- No simpler API alternative — tokens can only be created through the UI or by an admin via the same UI. - -**Grafana service account token** (`GRAFANA_TOKEN`) -- UI (recommended — the API path is multiple chained calls: create the service account, then create a token under it, threading the returned service account ID between them): - 1. Grafana → **Administration** → **Users and access** → **Service accounts** → **Add service account**. - 2. Give it a name (e.g. `weathermap-generator`), role **Editor** (needs to create/update dashboards). - 3. Open the new service account → **Add service account token** → copy the token immediately, it's shown once. - -**Prometheus datasource UID** (`GRAFANA_DATASOURCE_UID`) -- UI: Grafana → **Connections** → **Data sources** → click the Prometheus datasource that can see the gnmic metrics (`NetLab` in this lab) → the UID is the last segment of the page URL (`.../datasources/edit/`). -- API alternative: `curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" "$GRAFANA_URL/api/datasources" | jq '.[] | {name, uid}'` -- **This must be a datasource that can actually see the gnmic metrics** — see the note in the Environment variables table below; picking the wrong one renders the panel with no data (happened once, see #48). - -**Weathermap plugin ID** (`GRAFANA_WEATHERMAP_PLUGIN_ID`, optional — only if a different fork than `tamirsuliman-weathermap-panel` is installed) -- UI: Grafana → **Administration** → **Plugins and data** → **Plugins**, search "weathermap", open it — the id is in the page URL (`.../plugins/`). -- API alternative: `curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" "$GRAFANA_URL/api/plugins?panelId=..." ` is more involved than it's worth; the UI is faster here. - -**IPFabric/Grafana URLs** — just the base URLs you already use in a browser (e.g. `https://ipfabric.example.com`, `https://grafana.example.com`). - -Copy `envrc.sample` to `.envrc` (already gitignored) and fill in the values, -or `export` them directly in your shell: +## Quickstart ```bash -cp envrc.sample .envrc # then edit .envrc +cp envrc.sample .envrc # fill in the values (see "Credentials" below) source .envrc + +python3 scripts/generate_weathermap.py # dry run: writes the JSON only +python3 scripts/generate_weathermap.py --provision # also pushes it to Grafana ``` -### 2. Dry run first (no Grafana changes yet) +Re-run the same `--provision` command any time the lab topology changes — +the script always rebuilds the weathermap panel from live data, so there's +nothing to "detect", just re-run it. It's not automated yet (no watcher/CI +hook), so re-running is a manual step for now. + +## Credentials + +| Value | Env var | Get it from the UI | Get it via API | +|---|---|---|---| +| IPFabric token | `IPFABRIC_TOKEN` | IPFabric → user menu → Settings → API Tokens → Add token | not possible, UI-only | +| Grafana service account token | `GRAFANA_TOKEN` | Grafana → Administration → Service accounts → Add → give it **Editor** role → Add token | possible but multi-step (create account, then create token under it) — UI is simpler | +| Prometheus datasource UID | `GRAFANA_DATASOURCE_UID` | Grafana → Connections → Data sources → open the one with gnmic data → UID is the last part of the URL | `curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" "$GRAFANA_URL/api/datasources" \| jq '.[] \| {name,uid}'` | +| Weathermap plugin ID | `GRAFANA_WEATHERMAP_PLUGIN_ID` (optional, only if not the default fork) | Grafana → Administration → Plugins → search "weathermap" → id is in the URL | — | + +⚠️ The datasource must be the one that can actually see gnmic metrics — +picking an unrelated Prometheus instance renders the panel with no data +(see #48). + +## Verifying the result + +**In the browser** (the only way to actually see it render — colors, +tables, and the ports-table merge transformation all happen client-side): + +1. Open `$GRAFANA_URL/d/evpn-vxlan-fabric-weathermap`. +2. Weathermap: nodes grouped spine-top → access-bottom, all green. +3. `site`/`device` dropdowns filter the two tables below. +4. BGP Sessions / Ports tables: populated, green=Up / red=Down. +5. Throughput per Site: signed graph, non-zero values. + +**Without a browser**, use Grafana's **Explore** view (paste a PromQL +expression from the panel JSON and run it) — same result as the UI check +above minus the rendering, no `curl` needed. Or hit the API directly: ```bash -python3 scripts/generate_weathermap.py -``` - -This only needs `IPFABRIC_URL`/`IPFABRIC_TOKEN` (and optionally `GRAFANA_URL`/`GRAFANA_TOKEN`, -to preserve any live node positions — see #53). It writes -`configs/grafana/weathermap-dashboard.json` and prints a summary: - -``` -Fetching devices from IPFabric (...)... - 28 devices -Fetching connectivity-matrix... - 61 fabric links after Management-plane filter + dedup (702 raw rows) -Fetching interface speeds... -Fetching live node positions from ... (preserve manual repositioning)... - 0 node(s) with an existing live position <- 0 is expected/correct on a first-ever run -Cross-checking interface names against live exporter (...)... -Loading manual dashboard base (configs/grafana/dashboard-base.json)... -Wrote configs/grafana/weathermap-dashboard.json (28 nodes, 61 links, 4 panels total) -``` - -If any "interface-name / bandwidth mismatch(es)" are printed to stderr, read -them — they mean a link's query won't resolve to data until the underlying -gnmic/IPFabric naming mismatch is fixed (not this script's job to fix, see -"Known gaps" below), but the link itself is still generated, not dropped. - -Open the written JSON and sanity-check it if you like before pushing it live -— it's plain, readable JSON, no need to trust it blindly. - -### 3. Provision it - -```bash -python3 scripts/generate_weathermap.py --provision -``` - -Requires `GRAFANA_URL`, `GRAFANA_TOKEN`, `GRAFANA_DATASOURCE_UID` in addition -to the IPFabric variables. On success: - -``` -Provisioning dashboard 'evpn-vxlan-fabric-weathermap' to https://... - success: /d/evpn-vxlan-fabric-weathermap/evpn-vxlan-fabric-weathermap -``` - -### 4. Verify - -**Via the UI (recommended, and the only way to actually see it render)**: -open `$GRAFANA_URL/d/evpn-vxlan-fabric-weathermap` in a browser. Check: -- The weathermap panel shows all nodes, roughly grouped spine-top/access-bottom (see #53), all colored green (up) with no data gaps. -- The `site`/`device` dropdown variables at the top of the dashboard filter the BGP Sessions and Ports/Interfaces tables when changed. -- BGP Sessions and Ports/Interfaces tables are populated, states colored (green=Up, red=Down). -- Throughput per Site shows a signed graph (in above the axis, out below) with plausible non-zero values. - -This step has no good API substitute — dashboard rendering, panel colors, -and transformations (the ports table's Grafana-side merge, in particular) -only actually execute in a browser. If you don't have one handy, at minimum -confirm the queries resolve (below), then ask someone who does have UI -access to eyeball it. - -**Via the API (queries only, not rendering)** — useful for CI/scripting or a -quick sanity check without opening a browser: - -```bash -# Any panel's query, pulled straight from the generated JSON, e.g.: curl -s -X POST -H "Authorization: Bearer $GRAFANA_TOKEN" -H "Content-Type: application/json" \ "$GRAFANA_URL/api/ds/query" -d '{ "queries": [{"refId":"A","datasource":{"type":"prometheus","uid":"'"$GRAFANA_DATASOURCE_UID"'"}, @@ -141,118 +69,67 @@ curl -s -X POST -H "Authorization: Bearer $GRAFANA_TOKEN" -H "Content-Type: appl "from":"now-5m","to":"now"}' | python3 -m json.tool ``` -A much friendlier equivalent that doesn't need hand-built JSON: Grafana's -**Explore** view (left sidebar → **Explore**, pick the Prometheus datasource, -paste a PromQL expression from the panel JSON, run it). This is the manual -alternative for every `/api/ds/query` validation call used during -development of this dashboard (#49–#54) — same result, no `curl`/`jq` -required. +## Troubleshooting -### 5. Re-running after a topology change - -```bash -python3 scripts/generate_weathermap.py --provision -``` - -Same command — the script always regenerates the weathermap panel fresh from -live IPFabric data (no diffing/incremental state), so a plain re-run already -picks up any topology change. There's no separate "detect changes" step, and -no watcher/CI hook triggering it automatically yet — re-running after a -change is a manual/operational step for now. - -Nodes you've manually repositioned in the Grafana UI keep that position -across the re-run (#53); only genuinely new nodes get the layered default. - -If you only need to change the BGP/ports/throughput panels, template -variables, or panel layout, edit `configs/grafana/dashboard-base.json` -directly and re-run the script (or `--provision` to push it live) — no -topology fetch is skipped today (the script always does the full IPFabric -round-trip regardless), but no topology data is *needed* for that kind of -edit to take effect. - -### Troubleshooting - -| Symptom | Likely cause | Check | +| Symptom | Cause | Check | |---|---|---| -| `Refusing to provision: set GRAFANA_DATASOURCE_UID...` | Env var unset or still the placeholder | `echo $GRAFANA_DATASOURCE_UID` | -| Panel loads but shows no data at all | Wrong datasource UID — points at a Prometheus instance that can't see the gnmic metrics | Grafana UI → Explore → run `up` against the datasource you set; confirm gnmic-labeled series come back | -| `Base dashboard has no panel titled '__WEATHERMAP_SLOT__'` | `dashboard-base.json` was edited and the slot panel's `title` got changed/removed | Check the panel with `id: 1` in `dashboard-base.json` still has that exact title | -| A node's manual position keeps resetting to the default layout on every rerun | `GRAFANA_URL`/`GRAFANA_TOKEN` not set for that run, so the live-position fetch was skipped entirely | Check the printed line `Fetching live node positions from ...` appears in the run's output — if it's missing, those two vars weren't set | -| `Fetching live dashboard for position preservation failed: HTTP 401/403` | Bad/expired Grafana token | Regenerate the service account token (UI steps above) | +| `Refusing to provision: set GRAFANA_DATASOURCE_UID...` | Env var unset | `echo $GRAFANA_DATASOURCE_UID` | +| Panel renders with no data | Wrong datasource — can't see gnmic metrics | Explore → run `up` against it, confirm gnmic series come back | +| `Base dashboard has no panel titled '__WEATHERMAP_SLOT__'` | Someone edited `dashboard-base.json` and renamed/removed that panel | Check panel `id: 1` still has that exact title | +| Manually-moved node keeps resetting position | `GRAFANA_URL`/`GRAFANA_TOKEN` weren't set for that run | Look for `Fetching live node positions from ...` in the run output | +| `HTTP 401/403` fetching live positions | Expired/bad Grafana token | Re-issue the service account token | ## Environment variables -| Variable | Required | Default | Notes | -|---|---|---|---| -| `--base` (CLI flag, not env) | no | `configs/grafana/dashboard-base.json` | Manual dashboard base to merge the weathermap panel into. | -| `IPFABRIC_URL` | yes | — | e.g. `https://ipfabric.example.com` | -| `IPFABRIC_TOKEN` | yes | — | Inventory/Snapshots read access. Sent as `X-API-Token`, not `Authorization: Bearer` — IPFabric's REST API does not use bearer auth. | -| `IPFABRIC_SNAPSHOT` | no | `$last` | | -| `PROMETHEUS_URL` | no | `http://172.16.0.71:9090` | The **in-topology** Prometheus (see #45), used at generation time to validate the IPFabric→gnmic interface alias and to discover live VTEP/VLAN pairs. This does not have to be the same instance Grafana queries at render time — see below. | -| `GRAFANA_URL` | no (see #53) | — | Required for `--provision`. Also used, if set, to fetch the currently-provisioned dashboard and preserve any manually drag-and-drop-repositioned node positions — see step 3 below. Without it, every node gets the layered default position, even ones a human previously repositioned in the UI. | -| `GRAFANA_TOKEN` | no (see #53) | — | Grafana Service Account token, sent as `Authorization: Bearer`. Same conditions as `GRAFANA_URL` above. | -| `GRAFANA_DATASOURCE_UID` | with `--provision` | — | UID of the Prometheus datasource in Grafana that will actually back the panel. **This must be a datasource that can see the gnmic metrics** — an unrelated/external Prometheus instance with no gnmic data will make the panel render with no values (this happened once, see #48). | -| `GRAFANA_DASHBOARD_UID` | no | `evpn-vxlan-fabric-weathermap` | | -| `GRAFANA_WEATHERMAP_PLUGIN_ID` | no | `tamirsuliman-weathermap-panel` | The installed weathermap-ng plugin id. Override if a different fork is installed — plugin ids don't always match the upstream repo name (the schema research in #48 was done against the `allamiro` fork's source; what's actually installed here is a different fork with a stricter/different runtime schema — see the `ANCHOR` handling in the script). | +| Variable | Required | Default | +|---|---|---| +| `IPFABRIC_URL` | yes | — | +| `IPFABRIC_TOKEN` | yes | — | +| `IPFABRIC_SNAPSHOT` | no | `$last` | +| `PROMETHEUS_URL` | no | `http://172.16.0.71:9090` | +| `GRAFANA_URL` | no* | — | +| `GRAFANA_TOKEN` | no* | — | +| `GRAFANA_DATASOURCE_UID` | with `--provision` | — | +| `GRAFANA_DASHBOARD_UID` | no | `evpn-vxlan-fabric-weathermap` | +| `GRAFANA_WEATHERMAP_PLUGIN_ID` | no | `tamirsuliman-weathermap-panel` | +| `--base` (CLI flag) | no | `configs/grafana/dashboard-base.json` | -## What the script does +\* `GRAFANA_URL`/`GRAFANA_TOKEN` are required for `--provision`, and +optional otherwise — if set on a plain (non-`--provision`) run, they're +used to read back live node positions so manual repositioning survives +the next regeneration (see #53). Skip them and every node just gets the +default layout. -1. Fetches device inventory + connectivity-matrix from IPFabric. -2. Filters the connectivity-matrix to physical Ethernet-to-Ethernet links - only: drops Management-plane neighbor entries and `.100`/`.200` - subinterface rows (802.1Q tags used for the gold VRF stitching on Core — - they ride the same physical port as their parent interface and gnmic only - exports physical interface counters), and dedupes the two directions - IPFabric reports for each physical link into one. -3. Computes node positions (see #53): - - **Default layered layout**, for nodes with no known position yet: role - is parsed from the hostname naming convention (`*-spine*`→spine, - `core*`→core, `*-border-leaf*`→border-leaf, `*-leaf*`→leaf, - `*-access*`→access — same trust level as the `site` parsing used for - the Prometheus relabel, not IPFabric-derived), giving Y-tiers top to - bottom `spine → core → border-leaf → leaf → access`. X position is - grouped/columned by site within each tier, so e.g. dc leafs and campus - leafs land in the same row but different column bands. A hostname - matching no role pattern is logged (not silently placed in the wrong - tier) and put in a fallback tier below `access`. - - **Live-position preservation**: position is edited by drag-and-drop - directly in the Grafana UI, not in the git-committed base file — a - deliberate exception to the "file is the only source of truth" rule - from #52, because that's simply not where this field is edited. Before - computing the default layout above, the script fetches the currently - provisioned dashboard's weathermap panel (if `GRAFANA_URL`/`GRAFANA_TOKEN` - are set) and reuses each existing node's live position as-is. Only - genuinely new nodes (not in that live map — first-ever run, or a fresh - device added to the topology) get the layered default. A device removed - from the topology simply has no entry in this run's node/link output at - all, so no orphaned position or dangling link reference is possible. -4. Builds the panel's `targets`: one PromQL query per metric family (BGP - status, interface tx, interface rx, VXLAN MAC/VNI), each with an explicit - `legendFormat` so the resolved display name is predictable. -5. Builds `nodes[]` and `links[]` referencing those resolved legend strings, - including the plugin's `anchors` tally (per-node count of link - attachments per side) and numeric anchor enum on each link side — - omitting these crashes the panel on load in the installed plugin fork, - despite the (fork-specific) schema research saying it's safe to skip. -6. Cross-checks every IPFabric interface name, aliased to gnmic's naming - (`Et`→`Ethernet`, `Po`→`Port-Channel`, `Lo`→`Loopback`, `Vl`→`Vlan`, - `Ma`→`Management`), against the live exporter. Any link whose aliased - name has no matching series is logged, not silently dropped — the actual - fix for a real mismatch belongs in gnmic interface aliasing (#43), not in - this script. -7. Loads `configs/grafana/dashboard-base.json`, substitutes the real - Prometheus datasource UID into its `__DATASOURCE_UID__` placeholders, - finds the panel titled `__WEATHERMAP_SLOT__` and splices in the generated - weathermap panel content (keeping the slot's `gridPos`/`id`, so the manual - layout is never repositioned). -8. Writes the merged dashboard JSON to `configs/grafana/weathermap-dashboard.json`, - and provisions it via `POST /api/dashboards/db` if `--provision` is passed. +## How it works + +1. Fetch device inventory + connectivity-matrix from IPFabric. +2. Keep only physical Ethernet↔Ethernet links (drop management-plane and + `.100`/`.200` subinterface rows), dedupe the two directions IPFabric + reports per link. +3. Position each node: + - **New node** → layered default: Y-tier by role parsed from the + hostname (`spine → core → border-leaf → leaf → access`), X grouped + by site within the tier. A hostname that matches no role is logged + and dropped into a fallback tier, never silently misplaced (#53). + - **Known node** → whatever position is currently live in Grafana, + unchanged. This is why `GRAFANA_URL`/`GRAFANA_TOKEN` matter even on + a dry run (#53). +4. Build the panel's PromQL `targets`: node status, link tx/rx, VXLAN + MAC/VNI tooltip — each with an explicit `legendFormat`. +5. Build `nodes[]`/`links[]`, including the plugin's `anchors` tally + (link count per side) — required by the installed plugin fork even + though the schema doc says it's optional (#48). +6. Cross-check every interface name against the live gnmic exporter + (`Et`→`Ethernet`, `Po`→`Port-Channel`, etc.); mismatches are logged, + not dropped — the link stays, just without data until fixed upstream. +7. Load `dashboard-base.json`, substitute the real datasource UID, splice + the generated panel into `__WEATHERMAP_SLOT__` (keeping that slot's + `gridPos`/`id` — layout stays manual). +8. Write `weathermap-dashboard.json`; provision it if `--provision`. ## Known gaps -- **VXLAN MAC-per-VNI target**: the `vlan` join key used to correlate - VLAN→VNI mapping with FDB entries (query verbatim from #44) doesn't - actually match on live data for any VTEP node — likely an Arista - internal-VLAN-vs-front-panel-VLAN translation the OpenConfig paths don't - reconcile. Only affects the decorative per-VTEP tooltip metric, not - node/link status or traffic coloring. Tracked in #44, not fixed here. +- **VXLAN MAC-per-VNI tooltip**: the `vlan` join key doesn't match on live + data for any VTEP node — likely an Arista internal-vs-front-panel VLAN + translation gap. Only affects that one decorative tooltip metric, not + node/link status or traffic coloring. Tracked in #44. From 64a8287518a467b16707cb2a5fe27485ebdc03de Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Fri, 10 Jul 2026 13:19:43 +0000 Subject: [PATCH 22/28] Update scripts README table formatting --- scripts/README.md | 72 +++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/scripts/README.md b/scripts/README.md index 283597c..878dc76 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -8,10 +8,10 @@ result to Grafana. ## Files -| File | What it is | Edit it? | -|---|---|---| -| `configs/grafana/dashboard-base.json` | Hand-authored: BGP table, ports table, throughput graphs, `site`/`device` variables, layout. Has one reserved slot panel (`title: "__WEATHERMAP_SLOT__"`) where the weathermap gets spliced in. | Yes, directly | -| `configs/grafana/weathermap-dashboard.json` | Generated build artifact — base + fresh weathermap panel, merged. What actually gets provisioned. | No — regenerate instead | +| File | What it is | Edit it? | +| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- | +| `configs/grafana/dashboard-base.json` | Hand-authored: BGP table, ports table, throughput graphs, `site`/`device` variables, layout. Has one reserved slot panel (`title: "__WEATHERMAP_SLOT__"`) where the weathermap gets spliced in. | Yes, directly | +| `configs/grafana/weathermap-dashboard.json` | Generated build artifact — base + fresh weathermap panel, merged. What actually gets provisioned. | No — regenerate instead | Why split like this: topology data (nodes/links) changes with the lab and should regenerate every time; the rest of the dashboard (table layout, @@ -35,12 +35,12 @@ hook), so re-running is a manual step for now. ## Credentials -| Value | Env var | Get it from the UI | Get it via API | -|---|---|---|---| -| IPFabric token | `IPFABRIC_TOKEN` | IPFabric → user menu → Settings → API Tokens → Add token | not possible, UI-only | -| Grafana service account token | `GRAFANA_TOKEN` | Grafana → Administration → Service accounts → Add → give it **Editor** role → Add token | possible but multi-step (create account, then create token under it) — UI is simpler | -| Prometheus datasource UID | `GRAFANA_DATASOURCE_UID` | Grafana → Connections → Data sources → open the one with gnmic data → UID is the last part of the URL | `curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" "$GRAFANA_URL/api/datasources" \| jq '.[] \| {name,uid}'` | -| Weathermap plugin ID | `GRAFANA_WEATHERMAP_PLUGIN_ID` (optional, only if not the default fork) | Grafana → Administration → Plugins → search "weathermap" → id is in the URL | — | +| Value | Env var | Get it from the UI | Get it via API | +| ----------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | +| IPFabric token | `IPFABRIC_TOKEN` | IPFabric → user menu → Settings → API Tokens → Add token | not possible, UI-only | +| Grafana service account token | `GRAFANA_TOKEN` | Grafana → Administration → Service accounts → Add → give it **Editor** role → Add token | possible but multi-step (create account, then create token under it) — UI is simpler | +| Prometheus datasource UID | `GRAFANA_DATASOURCE_UID` | Grafana → Connections → Data sources → open the one with gnmic data → UID is the last part of the URL | `curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" "$GRAFANA_URL/api/datasources" \| jq '.[] \| {name,uid}'` | +| Weathermap plugin ID | `GRAFANA_WEATHERMAP_PLUGIN_ID` (optional, only if not the default fork) | Grafana → Administration → Plugins → search "weathermap" → id is in the URL | — | ⚠️ The datasource must be the one that can actually see gnmic metrics — picking an unrelated Prometheus instance renders the panel with no data @@ -71,28 +71,28 @@ curl -s -X POST -H "Authorization: Bearer $GRAFANA_TOKEN" -H "Content-Type: appl ## Troubleshooting -| Symptom | Cause | Check | -|---|---|---| -| `Refusing to provision: set GRAFANA_DATASOURCE_UID...` | Env var unset | `echo $GRAFANA_DATASOURCE_UID` | -| Panel renders with no data | Wrong datasource — can't see gnmic metrics | Explore → run `up` against it, confirm gnmic series come back | -| `Base dashboard has no panel titled '__WEATHERMAP_SLOT__'` | Someone edited `dashboard-base.json` and renamed/removed that panel | Check panel `id: 1` still has that exact title | -| Manually-moved node keeps resetting position | `GRAFANA_URL`/`GRAFANA_TOKEN` weren't set for that run | Look for `Fetching live node positions from ...` in the run output | -| `HTTP 401/403` fetching live positions | Expired/bad Grafana token | Re-issue the service account token | +| Symptom | Cause | Check | +| ---------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------ | +| `Refusing to provision: set GRAFANA_DATASOURCE_UID...` | Env var unset | `echo $GRAFANA_DATASOURCE_UID` | +| Panel renders with no data | Wrong datasource — can't see gnmic metrics | Explore → run `up` against it, confirm gnmic series come back | +| `Base dashboard has no panel titled '__WEATHERMAP_SLOT__'` | Someone edited `dashboard-base.json` and renamed/removed that panel | Check panel `id: 1` still has that exact title | +| Manually-moved node keeps resetting position | `GRAFANA_URL`/`GRAFANA_TOKEN` weren't set for that run | Look for `Fetching live node positions from ...` in the run output | +| `HTTP 401/403` fetching live positions | Expired/bad Grafana token | Re-issue the service account token | ## Environment variables -| Variable | Required | Default | -|---|---|---| -| `IPFABRIC_URL` | yes | — | -| `IPFABRIC_TOKEN` | yes | — | -| `IPFABRIC_SNAPSHOT` | no | `$last` | -| `PROMETHEUS_URL` | no | `http://172.16.0.71:9090` | -| `GRAFANA_URL` | no* | — | -| `GRAFANA_TOKEN` | no* | — | -| `GRAFANA_DATASOURCE_UID` | with `--provision` | — | -| `GRAFANA_DASHBOARD_UID` | no | `evpn-vxlan-fabric-weathermap` | -| `GRAFANA_WEATHERMAP_PLUGIN_ID` | no | `tamirsuliman-weathermap-panel` | -| `--base` (CLI flag) | no | `configs/grafana/dashboard-base.json` | +| Variable | Required | Default | +| ------------------------------ | ------------------ | ------------------------------------- | +| `IPFABRIC_URL` | yes | — | +| `IPFABRIC_TOKEN` | yes | — | +| `IPFABRIC_SNAPSHOT` | no | `$last` | +| `PROMETHEUS_URL` | no | `http://172.16.0.71:9090` | +| `GRAFANA_URL` | no* | — | +| `GRAFANA_TOKEN` | no* | — | +| `GRAFANA_DATASOURCE_UID` | with `--provision` | — | +| `GRAFANA_DASHBOARD_UID` | no | `evpn-vxlan-fabric-weathermap` | +| `GRAFANA_WEATHERMAP_PLUGIN_ID` | no | `tamirsuliman-weathermap-panel` | +| `--base` (CLI flag) | no | `configs/grafana/dashboard-base.json` | \* `GRAFANA_URL`/`GRAFANA_TOKEN` are required for `--provision`, and optional otherwise — if set on a plain (non-`--provision`) run, they're @@ -107,13 +107,13 @@ default layout. `.100`/`.200` subinterface rows), dedupe the two directions IPFabric reports per link. 3. Position each node: - - **New node** → layered default: Y-tier by role parsed from the - hostname (`spine → core → border-leaf → leaf → access`), X grouped - by site within the tier. A hostname that matches no role is logged - and dropped into a fallback tier, never silently misplaced (#53). - - **Known node** → whatever position is currently live in Grafana, - unchanged. This is why `GRAFANA_URL`/`GRAFANA_TOKEN` matter even on - a dry run (#53). + - **New node** → layered default: Y-tier by role parsed from the + hostname (`spine → core → border-leaf → leaf → access`), X grouped + by site within the tier. A hostname that matches no role is logged + and dropped into a fallback tier, never silently misplaced (#53). + - **Known node** → whatever position is currently live in Grafana, + unchanged. This is why `GRAFANA_URL`/`GRAFANA_TOKEN` matter even on + a dry run (#53). 4. Build the panel's PromQL `targets`: node status, link tx/rx, VXLAN MAC/VNI tooltip — each with an explicit `legendFormat`. 5. Build `nodes[]`/`links[]`, including the plugin's `anchors` tally From 1cbea385223e8f4e7a3cd51faaf26f35b3874222 Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Fri, 10 Jul 2026 13:22:56 +0000 Subject: [PATCH 23/28] Fix read-back arrow to terminate on dashboard-base.json's edge, not its middle --- assets/weathermap-pipeline.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/weathermap-pipeline.svg b/assets/weathermap-pipeline.svg index 407b6e4..b47cdc2 100644 --- a/assets/weathermap-pipeline.svg +++ b/assets/weathermap-pipeline.svg @@ -66,7 +66,7 @@ - + live node positions read back before each regeneration (see #53) From 0f3aa275662617a582e1f6295b1d5a07907edde7 Mon Sep 17 00:00:00 2001 From: Damien Date: Fri, 10 Jul 2026 15:35:12 +0200 Subject: [PATCH 24/28] Add Grafana weathermap dashboard asset --- assets/grafana-weathermap-dashboard.png | Bin 0 -> 654357 bytes scripts/README.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 assets/grafana-weathermap-dashboard.png diff --git a/assets/grafana-weathermap-dashboard.png b/assets/grafana-weathermap-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..b73a5b1ba37ffe93524a347a4984fbf6cdb511b1 GIT binary patch literal 654357 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 z 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

sphgcy??r`ydzX!RJ&xxLYTNFNo`8hr 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

}@eDnxGl#)W4EI zDGh>qc;;|w@!SmfC~S%<`Q6)Q7(8{fFrn{qwaA>aX$80PUDa%Pjw(Pzy#;+8^ZDLe zFx6LJ;3~DaSppAFf!N$&z@@(rRjxM)dYTo=d)BIK2H>QGur26SNFf9qa z^g`0A&1EzAxhs!bcle@T^6;XtqxAKUIeiN5Qz)RNvgfh8FVRs@idcHCiYyiqb^@tX z)be--!d#~FyuzPPW}em-2v|SeuXh{8Tv8pY&6_uZ-pmZ)c|UB3o)#pt=8az5HL{V9 z?foiRe#E`-xJwT?Ff6(*uP1HX7b;fOAFA5x;;@`FfnlJRw_p1O<$G#3TTH=(>FY#! z^K?>!BM4|F1NifuzMlJmCShoNRU4#3G8@3HXr+ZOO8OG#Wv%goX6Am*YDOfByTRab zh)-ntluu+Pv*~1b<~nb|z_Cg`f*DRU<8nvpt<1@f7O~l z`@*1WO+tNK`cN57ulFZ0Vsyroo88{eE|8y2h#1jsEk9D@vkQPpy@_V81Dg_$`Z+@fP0}UCx)gL*e z8+%MK7L*D58^zk2yrU8cj7XRMcHjN3n#TO~Z~))PJOP#fKD&PvR%YUriXaNO2eIh| z%>PpDm{Hfe((9H#$Lp#v6%kjd2&O;|9XJm=qu;X-(V|K4=vm3qi}ovFLuNKK+#bG zM6eNX;!#%~koKY6%Cx^n6!X15W_ezg4$0&dT^UX>ixbbmJ8nFLYT6P+4hIWs&1JN9 zi%!Dt%tvmn-hdaH58GGm)b$uaPA=fG4J#sGHi$~f(i(TkZaGfyS)Hc9Rn|da{f`4W zq=2V1lhbk7474zDvfzXZorwqA^MlmHER?UoW^PcN&r=3*0cARjMOyvZQt^?k=$h>6 z@u|Yaz>~vj>Ys1Pd1qNX+4S;1%EN~w(vgo;!SSb?-5B?0&lu+@2}(ifWzmEF?G^hX zmFlBxaMAoae>{DLf* z3SvBLP!_=pxsE^bhKdsod=m$LLS9!?V=|BJU3zhyPSW*1h@>!lRY!{c=&`Na}%#x$91X6Kca6h zjDL}FkOe4jc8`AYp7`m!c%CjL-uI}uO7tSt?niz20fq0{1s6}1lHs)paM8N8hUIG1 z&7X$ebkD>0IBfU&y4qd$M#t|(osl5*O+ln!8xSw150nLTo>^++E@}Es(_r1o!`#nM z(HWgmKh5L03-yKp`2mKgQ?`D9Wmcy!`nUnxje^V6@yD}hdt?@|h*4~@5I zmd9V6HiPa#F`(HKr`8%8d6;}jXo7qLn1W6UZI~eVdy0zCdu-~0JQ88Q^k<5dR^Z4% zqZ+eiCb}W*Lwlja$UytzbJgGub5yStUMx%K3Dzwb#CRG9BBESq^@Y+d?CC*M!Nm)! zgyji(XI6D?t>c_<8;Ez$>}&Ef?6Pb3Q4(Y$D2uj*ixd0FJ?W?*+;u&iQ74dqyzej# z4GQKrX>soo-aBshPcrkgi=7e2yyD3OdVMv6c)^-e<7=fY_=}nM^ZPOr;!#9;k6=Pb zna@JIo*CY&VswjSR|8kZPi+aJNh=kUJBXUnIt)S{<{U4d%4|k>pRU^P(T`hkN#{%^>^P3d{RL*Y z5a_?|WMIG%gaK;tEwz&f?5s?#xFSb%e6BwSS6l^{Ht=4dMPs>ZI>$vVbx4ZV^Bh*b z1GXngi}3N1ZqRAysm*hT_jT<6-(b&ZN}x+1fsiTPLD~J(|AR6(rxaXalH42s${^Wj zZH}wW4$JN3uu8}N@wc4-qHSjhI-u$-x~T=Oa^&&*Dr{wqPnLN}Ic?18{fB1l;lT#a z_wBU^9^*qK0v(Z+15ds|@y%~03Z@FZ{aOG8L`WXj8Ivd!SJlz9FH+?s5fBGfo!$V; zg4>|N*n&6P+z!lDXzrHcvfmr`UG2WIkA~a@3*#EM%*)*ME~%L*+W2v(@QL>Mvx8Ce zu2wHJn&d2=HVgB3x!{RGFrC7u(t&TcJVp5kftQ3_n7^!9!cVZnj8xQCJvZ^hyE(So z;vcV;X8JQ8{}v)|&G{6#3(^uO(>-GqHJFcJ!}f~dQ(%fvaHD5&>vD^Y3Z4mdf4lui zxzxL6I_DHkZmoKa7<^EhI0PFxAvD{o4#%A;8U*zN13$S$E+q=aV%XEfEs`J)6Wdq< z!2~7@)>$Ou2m7cwcRT=(=KD`=_=ct}^VTT&<7{G`OHbZUcK>Xj?7_yl`K8KP;vX22 ztx&oJ+n7=phX!aAZT9ZtRI1IA&X?OU04hvZN5g@JeC1@Zf*}ke%_bK@3cbhA?fl`3 zAtomD2jPRE$5SZSUtZ+)mk7}L@D5+K^0x|tlFqpvOM?UNox*3@ZjD@Zf~4;oXU5>` zUG1=a2Q~Oqt(H*bp+}Wv^~{i?Pk?Ve{NL&qQi<^BFz1&ob_=;WSDTXs62VfFSA@O@ z3>T<&k0wM)bR;NP*uR)QSp`71^&t|u5qFn$*wTF(xe6={?b6l<&rOO1;w zuX5h!`vuU@bm%|ORQ9G62+R-S4nhrj-DNLV8WlaZyO`awg(Da`T_d*#I->1>#<7R%LQ|5sTLG*xd9s@u3OAJM{MaCch>DbA00ouT0(z*b0!DLs3VFYq;unNLLDuI#CGidfF zrx(O{tFxT5^Yw1^N^K1b`VeTC>r}9(B(Umlq%TRrx099x>wvLxU@plR7BM6)6ak|_ zWw-4hQ#HrxtMmvMDWH49yCW`FV!_HdZbF4bnEN;iY&}Th8#5X2+ zZ>X4&B`0wXL>aU?ot7jb{La&?dW{eG`^!ytWdflvhh!M$7-MzdIKLDhmy@dSi; zXfR2Sw&)RB4L0xMCq&&X5~V+rk#HXbg+=+0oiQutOpY8-YSEnFA?D;r)vqa}`_3e8 zOvzP{((wDvyA?b3wymPnwW9TQCzmDhCYKJ!b@)l6IFU+f#Ik%Egx=hV(+!<=NHcz7 z@%-w;<<9a7nneWkM~Y%&Bm^h(G!~-;=F~xwVZ~wuOvtbBFdpt8@K%V|;dDWEjh}|o z=J#)d8<^|_n4=NGQQQbYWP_g}I;M^Bqn^J>a@NV7Zr>RvpVl@m%e5T$xF~NO?KXp6 zs8qx=S{C>=%9Bez;E7rUIg;Bw+^stCxg!h;;o3tq*j%>1Op=jOCWk#r`D6!)lLe_m zzLN8$8Rx+uBOz@G2RpNs%HBu|&8}KGt~X0)8kUY@kRni+y}C@IqKD2m`&(_@Qe@s; zEQ^Ipwwa7WX9`)7#(un}9=qkPe3ke5Y5fslQhT3v>KeaxSd-ZZ-O8J!ClDfM!c>+Z z2s(cL$L+*XdsuO4hO|(tgV5xK+th}(wE#|;@?nW%w;B0eOA9~3hkYPNI#4-&qME=O zbt%F8qg>X^W7%Vwy@YGef*t>6s%7;XSm#9uyWO}A*DDuW{4DU4jxAS)k4%8`f z5&_ShHe$oSpi}}*^RRKLTf~bF9U}0LtH5{tPy6kbYY3IzpvPLSc(qO+O_R%)kD<|- zP1XZf>m-GpR#VwD=IWQOpD167nMmO*5*~H#sjY@PxE<<;U!(DrGl_NO9V59Eiu>|9b?sBTXOFcbzq>z6V1P& z5~MtjzMS!ilbSOXtv6U<5N-F^sbB9;5Yj=xD2{JQ(YH;NbGzZVP%VsF&aFwcj zYq+M*oyodyyfFj>l-*E|f*2iTFf~$G(@R_e93e$<_y*=RGNNw=P%AeKaqIgM>p$8} z1SXi2AKfHBQin@J9jZq+?u(pwNM6yglQ9|g#V`|IbGsXISWT3iy}!{mC}~R9Xxug_ zJ?I>HfX2BHQMi(~^6i%y&#^FwdH;5A>9tH`UAXeX>j;F_Zn3Bf8`7axppchbww!EE zWW&Gr5L=E?i9&7jnmuV~ws^VxAn{UDVEu}zXXXZ1-xS;jPYmr~$IrlcZ4!(E$0iQd z14q6F+gHM2fV52fK}#9(&6`zj>52OITm zOvG-_Vx6*5`1$^%A9)Wd4`bGywk%Edq59F?;sUOdYGgZC$PC$k>tWm9Ws|l)9SmJb z1rUyFAS0|S(^gvPRs_nMTORcf6)w0q{ ztL5;_bCsh9!%bv=yDDp;Zu&2yN}CH}J-ov$hl{%&lG&tPw`=%UzvD_`{Y+IoK0c)3wF2^v6MftZso!=vy|EYz?9ze4|@g z$-Ag5dXH_j0pBD487xtHTk;SP*}Rmfn1oU0h z3yyBcBE8dPXOJx~q?1ENxJZj8C}rymE9^#vo$mev_?=Dq{qZ0#TdM14VERMZzqFp8 zq3%O2r~kE5##8XhS#jheMJ5iReqynwRXlW)TPZLOC<&|!KD~dP zA;VhYVQ236E zG{YWrMM72bi{1K2F#W#(@shzhV#j z3+k1C?@*F8Cb+vk3coF(q95w_@OlYzHSl3ewxM#y=!W_f@d<^r6N1oRq8z@Jg@+O3 zY~wmkig`7bX6Pq2K4igbN9mTeVYs%?5t$}K3TMah)Irt2UZci$Jy(Kod?jAR7VX)4 z9g^FDT7V1|gK|R##41s19?ZLSa!AWK%a3a_Qx?eNs*{RLa-?#oJTAR}}qnWh6 ztl>(+O|~VdK^xGZ&NV1fa>G_o&SGl|%auOJG~XTJ(omeZSGljBWf)VWobo*u%dVWA z?4)bgIs?C3;l(ZNKhzkysHF&m`HtXzP+d~>9=*3bL&pAhRKj`Fe$`9?hCEnhC>Dfx=GK4Bh8+V-6~tV1^@63p4%&v%|rr<&b-0Tm}KumfW1xI90x` z*nOBj4N@g|Q#?I*vsNRGtz-;IGS3|);(-m~$9mg-)Nz@(!NAKw`{K(8n_8;})w=cD z`Dct`ChqL7PV_8xV1fjS59wsJ)AzpKcP}9U6Yq;@=qBJX;?>TV5ph3MX>RPbRF)ma zVG|B+4$~Ae2o=YY3{NSy&y#4?D{(Dp4WkeT!-|ia(P3Zx;D!zEjf`%6e_NH5h=?`S zV64`U>;qjR_!Qh$RI2p<1yr!XQ_@z?DU7h%ZtV8o%e5{z?L}}n6;ho(-zar@Bz_2( z?h@SL7N#;c88lcaD85*_uBG?&AuUGNn#1(oW-O$KRP1B*!(R`!ocZQ>{d{?Liq@>~ z0jxjaCA}YPX&DJYK2H`SYVdMBXV`1pnFWK;vc#APp%NA{TR#@A58r3kKhI_hdMEXg z9Xi$ah3CUc>tsO1grR*p27#~;Q7or&bB0OER?@`-;`4O4z4R>Vx~jQK6VSzx=}xE$ zgfNXDtMs2Nf0@4dVxurh@Y92GApfZJItQWIZ7CQ93g#oPhKFAe3b@1QzGp4fD6?Qy zaH8NtvBhG=t0AkIx2g4GY3(`B9Ft+z)JFEe!v$i z;*0bBP%#F38}AiSji-_8g!XTfkw+Zl`o?vtf%)(Lg3@n~|3&xWfO57n0C{2O+o!%< zkl%-Wi?FsY5Ax;X;-;+!LxxC!DzJr>DwB?XI`ynuur12G#VT0Nu-HKf8@#DI7#8y@ z4I`Ijx*!}LDl&vNc)<_liJiCbqA(AVh=kow#|-BpAjD6n$*4oY_p;$NRsQ73TRIHI zFK`>=-~a;e8o)08JlrrPOmvU5@I2T`v<-V-7+#2Z!t{h0L$c$y5{!}^PgKf92+;D?=NcFoD#f8*c_tM#C;kQlS>K$3uC95LF}CNO9?_V zOql2<4Ec9pkpXrc*Cz-XRxjU z)D(dP#>SHnIok8@k6&K$^~>H0hT_kWctpfWQ)M5&^tpBVTLN}E`_ZxFg;HhH4>L%c z#*c7C1egzDY9;csPz9}Nuq6WfEq&ok&tD8!H0xo}2>Fxt9ML3oBF{hV;)5y>Pl^U% zM5{lQ1N7M+dUG`2`*T`bCws@a)##H6Ur*Cs6W6%Es;L-m$+{Vfg>G)UR#g19vCB?0 z{&wny5qxs8*qlLKg;dK*t?(6^r<#u6Uqxh);y`3xV#CXI=rE_(qjpYpLp5o7-91|Z zdM&mYGD@raP1+jX$uPh?sZ*U?o5oBb-kU|9^E0|G=`f;5`B0H)M$Pz8W}bWFILd`< z@_#_oV*g0Sz2{V~^sqC~oj!E=lAE;1x_Sqq?Y|zdK@rmMgt7E5+kw zlONSB_tmAx{6$Xx<)A56ELIL({pE8zP&KOCm&3@CI>z-wSrCGBFG)Zpm;>Ifq?(17 zG+D@Hv%62+mMUYAI(?pWM$>-xK9kW84+U3`pJvhJvF-ra?K!@w8Fq`s5Nh#Ix^G}y$&S}Q|~w3qSx z138E;0aJ^T|4F!AD7b{D@>$flu^{1Sv4!V7VvNTMYXivyi96bvI!@APjD$7_7xECa zR8F4VA5O`LSL+P}O=`{5YA_gKNO(_jgw>D3EL(7+iH)nRVk?#yJq-;^zgnIky!Tyx zXRz?8a%(NI*{G!Fc*0!iSUmr#giP_TbV8pO{u5)qYqScH!=|@9;z3J&OE5zeYJp!0 zthqO!jj|#_JBH<_2mQm_K6rf4nS~lLl>K{VM_IWn_T9-&@%s+SN}HW0G>@r#S{1m< zB1gF7J#}aBgPHAyvdGVtcpgcEwo&N6lO(I^&cQFlG*Ws*BTt5%-$*Ky$ z6HusE5vn65)KDlO<39y3C>#Y0F8Wp!qNm@nhLo@k>;fM5((Dsqd+7(UlNB*H)27IY$4w`zwj1H#P5K4WXvvc=22PKA};+MQyBT0b$dfGmp^u;YvqI02ohfXDG)w%)o);~dFK%iYifkPbo}e0d_f za-{`k5~Tw?3yvOqVjaVQ2!|k?0jTfTY8TQAUD*~P;glbzU1eCLMN+<<3G_3LxzH&_ zEsjih%(9X(LTJ#2mB3ut4d9BX4ZoaZm@iv%RjyoivFUFP= z9@7!iQ64W-$(A6*=zAl+F8|nhGb>O0gm}?M3cbYzkWxgVs=G)5SXzewdKVbsPnOv~ z#$2E@KFwNhp}${4<^2MZgZZ4RX%R9w?rBeUzr7CxDzr|xA;>WF+9Mxal!T;#s{kBw`1`JFO%bdK=AdWfIFk^ zfO*dVI^hE&TWCl~n1>b0Im*Ib9|2Us#c3W>AHBttGT&IY!eV??Az%XkvT;9BqtW3v z{^YF#u{-0K7#^#XJ~C)@e9_8TRv&fRZv_&u)pb5%iK}|TEREK9hWDg#IR{HQPk59wL1)=q`bM>G`)BV28Bo@B4yOV$_*b_ z2>lxQGy$Po@E@6BXGzw+qLxje3}sROxe7OMO!(c!C5^95INsxs+7YyET?{|4W~ZH-;uQx{}sy7#&TN9l=gd zp=OY%-;I~i#cy<2xswbLoUd01_&S6o$}nMl!}S}u`he&3t+|V6$EuLEF<6=jG_sXQ z3ZPO;3d=b_rRk`PNxA!Es~qHgjCYkFKn@Y<&-{*gs3!8m9^lnL3?*10w{M>GbXcB_?~hTf4&;a-;A0%EQ)ka7!*+_6X;~PFx52%#x?z#@R$~!sQ<6&2bp|ec-BiIgm`9%V(p>#G&%~0+KCR9Z$dt9BA@Z86!ebz4p zhGHtV3OU?4mKvF(9&u31F{JXijE-L%SiwM}Rs#xd;|inVJ^EVhdk2w9hZhcktr zS}R<3w=ou%y-xi8M9zp7k-!&wGDdTWNL1YF@Q6VRBy%Qi=zLYmh`(PEW^d!WwJ!e> zda|Wt^V%xN?h5@@v{UG{J$gRkAe?wutwAB=L)fBK8Cy~ao+cBGmQ?tg%9N>|HhFP< z!C@s~vwP@bk2Hm^@NzPeOJ=Hrg%XWH_pLxdjgl}+XG2}Ds3(PiQHUH-^>a9|{$P02 zP)9_D;mbwTk5f-M+<`<{Zw{6_r?8e$e6Nwq;wt(nT@Nqnb$s$<2bYKzoc!Q(zWn8N zV#*}L^^|DVSc6N;<26N@;8se#lf*dN);5pt_Xb)eqqm(*88uwHc3)Vd+m`G>7RJH-qn$ZlF}MiN9Th-hg! zp54zp*4rHn9)PZ%5UYQCh$1#0ARLAU^3>;wW{R(}7K&GXGPS zCJB4H?=bs{vMSD|%wgL&3#)Q_%?dC((5FpeDk^f}pJ9)aK+U2LVLd&fcXx;tzk!t) zvyiR+owcdaMqcPvq>|5fFd$tW9FWUHs1?hwNWKd62Nu8`NeR}qy=7h z5nG|R#(iyzwmQ$2Xwxj3z&Gd@-d$uB_Wqnsu4SM)t(Av1LVUwwhpseBs;&M6i?RZv zr4QCE;o-=TA}zqx{#f2a2@>QER)$;Z&8)nSy%O$Wg_wtUe|S~!Aqw)Spn4VlsPD~Q z7yBPfz3!;%IzK925d=)*-4>c)J#xK-!2DMU<^^@K4x=sc` zVT*e~+lLD0)3p4}g*zcKcY;I41zVYn7iY_ZtKbb8K=mpx4h06YntrK_co?q02HoOX zrpsqKC#O7K%=j1dlOjB2VrFv}y(@OF)W4Z97qm&0i=zm2>>t-6UH#8b$-IPvvBpXj z^~3!BYSS$#vtp7BLW3K6C`0!ro-_JI72hnO--X?{H8hoivmmu7eWV{f&lX@!g|qT$j^; zegOss*%REo^e~i4e13RzAQq@oijhGwotd7Yr-fo7NckBlv~gvP%s9W<)WUQxvl4-e z)FO0g2%3>{?+~mHY;vFUi}6zm2qm2=9x4jbo~E?W=MTx_q>{!vGYMO;9X^}<;r&Ja zy;hDuNoQrXo^*_R&L?lVd9(S|=*eo%5?&2P0nHdCrY!jh?~&PpXyqeJt!WGOeaho# z(d`;#4M4>$qOSwazH0gkU)m6`W=$V=b&^ zn2qK>;(jRQxi~uNOm;O2(tCe!`yjMgAI@4B5Fv!~iLr6TAU8kJ^n~z9VmPLU1Ln); z5xg4axg!#wfnw|nE#&aVO-8y!z&!Yiv=ippgJYmDOf^0pIQm+*@M2ZN%;(6&Q+rX* zMs<_fvvXd8GMuQ7e)}aH1rN^<3rkKv_KPf?8%;E|#J0f5wOqNDtebD&ZS*;=8Z(RtZP z**4T?pS`~QQW+BpXMAy0)&sea{~_xwqvG0{u2E=Qf@^Sh5AGJ6;7((~9fG@CfZ*Op zaCd@RfZ*;P9D+k|xcfZc_ulv3^Za3q9*pj>*REBwX025LqvGP1L`KAU(z?|T9+`kd2|Ph6HCYw>C4^S@?vmO3^~G8i?3 z{uIG2e7mR*#!$j|Y)g7YGnBKHcq??(?;jwxH}Q{69!j~+&EUYrz#tDz@EUmZ0?!`n zojxIJOv(Y;ip4}FjcLD|3#qA>ynv-Y@N_hIKK#3!Qqw4^nnc=i;Kegz2 z7Z(QDSZXSvt9*mc5!2{b<4IweXf+={nL?({4HpRg##GwsYw*4&PU06Q1w>5e(^!7V zb>1aFL}Tsop{M6chCNaFkrxUF=gB4fp9>rbwofNOZj+wzsp`7vwp}Z}KDot|ypv(j zf}4X!Jfy`}QI$ir(R)j|%|nxfneBSMf{4pU^P+Dc8qeevHCRk;DT#878mBJb^c)86 z2j0;wk)Q|q=$I?>mZVG3WTtuBht!sGu5ZroWDWrpxbTMgV+D)BItcMkCvgp|RNpT06fcg@ z^4)6j%`VZLPSKur(As@lV%}~z$Pfz(8;Y4etosU5LfpN=pUAq|E+tq@T0Hu6dthRo zA>1mOjOUl1e2C3`wUEE4&{e_Q+&{UkD=|1d$fp@>MEuH$V2+4k$AR9{0QJW)ofJ=y!ER z`LcDa?!!y-u6cPzbWA|C!ASnz$FJ{4U0T#72CJxl!EE{Ak9gU>QUJZ%(D%ciEGI+D z8AnnctS;%d1ivA4!7Ma+L+S383~^as;*Gcv@O$uxW^~(N%pdA~^sr+bEu(2sV06q% zZbo>E=Wv(xjMW5{B=0qgEE2)UoenLWtG%L?r9}W@n&P-FTE*_>f=rIfLb+W5oH-p{ ziXL_&ifVnnjNJpvW@24Kk4sj@xL0h+vCWE0l9)1IuRrLzniubz!9o26qrOaAX1O&- z`P1D!XgrAPT|+Y5h+V(tribLmG%RE>ZqiJ?pdh`P8k-}J5liLH6SJ}r2~-PpCi8%G zB-UwQATfp`-}37ZzC1aWYvS2mM|-yPpRQm3~7bo;8MgU{Er^ z$$czGQ-l)3w}EX@Pt5z}_CXfp^|UuRQiFIA*CG`3qyj~QLBvH(9V)Ew%jL&TWIZ%} zP%|fTGL(w+s3ty-&_^D*g-silsg%2f&1tity-BI);U7eDLYJeK))j|D=!xk`uB5=j zqzZBs;rFuS{v?1wX?0PA-YS4?HE8>y+r-Jv+VmKI3=r2JNx_ zUTjNx_5nQUDc~)>=pYOX^(FiEEGAr@0358el9s0Q=PaIWdW(G`6D|5eIFsPG z!TjaKx9>-uo;l2nk#4}q7oZ2ehnkGvl=NF7e*|v`^##f6Mrs!dll#vN;NF>Ezj4Rv zw7~FTeL^H{FVVJq`mWXGRsAoLz7QN#&^?#J)zf!VFXo2Hc1pjw+b7gyG2K`Y4M2W9 z;>rr=(u^uA+ya2x7>*K2G^zj50;n_%TzI=0Wh10V(T?C8Q&QV7J8xJv8->dgYr8oj zV7H)V1CC_A3&D-NTkMEHBjLD0LYn#ICqKtM+C|elPW}4LmJABg{42o>>auhmalxzw z?dK4YwgOen(LW@XBA3@?ZggnO*Jjsn(2pw&ehFI>6l%6XqusaZWRo~9!tKR8+n=${6P z*=J6|b{i(pt+%z_05PE0tct4HrE8)mTqv4a+DvG9t6Lhb9i2~TrjsqdEUDSB$OqpY zzpJj>4nv263oUfQ#l<8CdqNQkd9pL*n@}LU;tDZAl|f|FZK0BTNT*R%`o2F&GIuAj zbk@vP5cd#xnuj4^6OfoV&g6;1lyom{;4|yihl*o)ijb45U{eP@9i5d71uasDs6Lbo zU<Ryx(4bdUu8AxslnDh5x~da85017ambU zzgbGM1zSgH=MQ`CBX#BqT6trWk86--AbtP?U-x3Y&3f8U|Nb>QaqK^@ zn4S%(c<0ZJgUPdQPc^Rf|Ee!LUT)WRg{*3Omfi!k1G>f$>1SsJ!Ce&3Hg8Lp=hZGh zt~;T~KBG6^sDC0+FU>tEadhS$_TQTja9wN%Mqi91M$`kHCW9(?p)-L@Hb0}nN6iS0 z7D@I{|FZn73A^H#ES?*68E$U#8su7J_%IW@R1b%^>up10=fr8=;2E9dhwsMWu*Mgx z%@H~oXdD1Y$2n9`CNr5meoYoJd*oB8Sw-F%#P9C|Q9o5t#kgEonzP|(%;Z8>$BhZH zuszv8J$J#@O=PoYfqgHf-G{*R?rh2Jm6nX!r%x-pFB;XHcqT2oW%hpW`pA2LAwS|F zd<=bV8a3ec1vBS6lOoo;13i15Y_}`{Nck0U+b;YlM-1P@CM8vFU(gfcdx+3Ep1SBK z&BPE>XpQq1{(|*#Jt?Zp#t_H>bXm~)2wMStfWa#1$^orW_+Lqd1txaFa&x;cW)4c8 zKJ1oUIHUm6L5vA@QY=^;OFSl!hU`{*cBdcYSUw^4DpsY$)(aM(VmPIG_j104dE(2l7k?9ll8xL3DhnLY zaHlGDxg->==*bG5RxtP26J=D24Zg%umP*AK3$#6FC&;L2WcHXY@9-q1-IcX_-G-uf zb?^p9^B@%mySc=CgTX(9U^CweZwuazkb6Z_>c-4AU4&l0&6TM?sOof3LWE7r&8mV; z>AIa#n9M9s_RdRvq#IK6%skMzK0)(tmBm7RW0{%iQ_tHJ$Rvjf-ulJssD)gek~LwE ztPZN z7$_;c>f8v|(JWSq?iydXwSF=|_pd1Qi2{p$v*OQL`dm#&KM3E17>!hj zUcwn3OAH?cpLJJ-I7h(E^cA5;^#>1+LXZSJRInmceGrl5*RVp)CsOSqHu`brM)i^Rg-$vrg^)mI}-H7dZ}fWbt=$axqp^$1KYho{Y3u>YLH{z-@EPm$?TUcrpq z5)zasey*4cMSQ;}kt)O5ptst)f9|Ks0F6>1NVcj)V8#^w)=RZaJSnU(PTv90X#6R( z1<{>>jiwvjc@$IGbZ0R3&pMVXGQE#`z(@j>EbXiiCC+YW{tehC%bn#gZtbPh>F_r zO6F9B;mzob5W~u(WqQdr)ZGBlDRwft69ySYWf8ZbrDStimTQJV5TXFG58{cTSR`3| zS#8c)f_+gq$KEMjABSekA88knVOwuS^SrOSxf}@VBkm!{b7O$?JPqop^{3S=KU%<{ z4^=o3sc1uWyNEE!QfKY_yyPFhK=ZqZ&NC|3s%%M19eNaxWiY2&>UmKQolx9fsi&Zs z>s&TEEIG8LMdMtkh;ZLGV!`43E!rVco*mh)5N<&3gfZ?@zN}ekUj0pP_ zGRcUd9VxX+caAM@f5$xYQ9w41a=C09pPTQBNKWn{%T;+Jb-AZaR&vTGh7?mY0 zI>w&+J>D~+%_GY;Ir0uy@H$4~DLSj7HTI+h+!^ml>h9(AeW-Ng7T#ZJloaU}W4dWPKTa;u?!ZcLpAf8*=a|K}p;;@b@mGIbfu~eM zDF+ zB3H2Qmrb^e4|~3gPm`9Wk?&>nJf~2{#~Hoc6x4{10=^{^o4_%tF&t^s(c*P<@K@8f z%zA{eO!zCAd{&cv zfIL_2xlCm|xjKZ0f}Pkj>Gw9jv+;{v3qn*kr|ggQz3XAmvr66``Q$X8m$*F~Q%)zd z`rSYA7>S$*1^$*HxtxD7f1D|+-)XXWc)EK%b>_Oy9i0$RQT_pxG@lbETPEAJ)Py{L z1!OPIMI*k*{!@4*l{tb0ddq@JwxN)x(QnuH_DIBU#YF8VL*FY+M3qpOFs23Q*M5? zjKH3fVMZS#V=t5c%aC}4@Co;4@cEK3Kd&}sg#j#=vYf(npMlj<5Twl^rLltJL@>^; zCMWw7y$7djxxd+WW+CUU-IN3Q0qB8|3W*BTzipcmn9ecr4}(FVy9Fn~*Fmx!{X7)j z=n!Gak@^ZnB=;Ct(9u52>7m2o>~oUkNYKI9?9SuBDmW#lW>LyddHaNM$E+(yt>SR+YBFCjlzNfcQ zgM^O=s17=P!5eL6Az!$qir1GAwwp?gKSG-6Ym8P4CP0$dnhAF#AM>o-A;f-1LC2^$ zj3=b4)W(3$i;rOmvxr+z^XCw(J&2P0*1@a!D1LZ4*z8pAW}3hLyo}3D7}D|A>qzA# z`1)mo+vQKzayk7>h~c$wH?~j>#oXBNaMJJJSmtm>#p}BVySwt``_q43l<$1$mNu1E z^>zc}nUmMbmOg-N3i@T|H3t^nnWu#NmX47^YX;T zGd|RaAi6_Bue0YD7mRK&{e6CuD!=x2q0lf@5-kV>yP0#sZYW#$hhK@Pmv$-5w@mn) z%Jquopnkl(V(#P6U^vn9J;2f2V+v{5FWkxl)bDqq`xbTb?dLH^rtr5gJ(Tm6e z_L|Zt(=nhFW_g(b@Axl&H2#v)j?y1Ub8yOZ0gLc>H~&fA!`13JPJm`L(8O)Hl9FbX ze)?%$1?v}2_DO6H|6ZBv&$?qGrUr7!t;_d=#dUf4+da0dI01qyA!#X7-$Qf3QZi&u zRpui!x?L8D=Q^5nO8P5}fo7$f!V;36-vWchkDftQy4h6*7{TC&b-|S|2$|<^Mz7bh zn7usLk`n>9`MZ&cwBx2CNlU}{`tZn#@^H-z4(SjOgONrdGZNFhiFTp2dPRrRdKPCU zd2lvWcb8N#nOe1Tsh3&2#gC?rO^O$1Vjk*b$|i?^mY2<6&CZ_e6{USTQ;PMk4Fj$w-osHtFOMX9WMv5NYi7L z1&aJf$6PdAj?8iAe>HC(6{pJ$bkX1a_@l^yZ5b_bDvb~=ljnKoy~`iD?{8Ji+-aPk z+{X`cc&vSOn{WT4m`@;BG!g@w4zDSrdB_FV_pa0PGz;SN^Y$FOMnHihaj+847Hm5Q zp)nrdn` zDwqKCJ=_L?_;h+!g5&ZARxuk>8WkJ30NZn1#*8N;N9E)5qw^%Wvg_lGE8jLAE!o zqb0T#EnR>8bzcG;ZOx;mrnj=X5Q*KEdpYgpGQdRc<=3va6|s-c*;dHhU8gRqZW+j( z&i4UqY8?;;z5KmSI@@Gt#jKkq^q;3f?)qd><-%K-J9fb@j$OzcP-f&9IQ`_SJze9i zgrtw@yvx#rda@#KyTD&W^Q$!f>t+G6u!EdZU*|HleRc46e%}6*Li7#gQQ3KT_6D39 zv*O3<%tT7HYrPP)L|@)N&*%b8 z0p4-`pure+RI~_}?tClb)b{d% z-vpWH8+Dwq5Pro(pRkU{(nv;RXWg3dJvzA4hA~#GCE8M5Tsy8jPxUxksYDyus4LrP z4JylcaQTDoPbWS5N>gS%-2c4vU|QATb`bueP$WPZlA7@0xAw?3CvW%w4h zgwgYWxgkkgP)@}--_|6if2(}Md@dL-)(D^<%SEo)!)sCf?las7$V+kS_uKG&$82Mf z=EAdE64w5ZV|w$w)PzArG)&1z;v}oe2Eq`*@_xy0UblG854zWBv7j#eVJ}#WW|R>h zYDzI!(|D*3oi5i&+A_Ze)rh&BwJ%+t^fnx|Ex*Q6ggLX%7k}|jNR%Wg6v~b#%ua`x z=vg7!8Mdk~Y#bP*_rY0?r3_fchQXj!ee@j-g~D;JbLdqF!iL?cD#Aaj=?vscAiG|Q z5gWI?UGd~dg~*iA*R_Zi{6%4PE04=Au4?5>sW4KK-(#Se-%WJT(A6#b!FySz;@D%S zp&!+x?O~0MwF)WY5yF0xiwHPTGJnTknX#w)Ktv;40rt{$BI5e2;l28p;`72&rI}_G zOgE_-I>plvpTla75(8JwwmnFioEXl}{a2sP_oBOwKZQO?z6x6M`;6{lm4P7laIGI%Es}AIGA;qmE-#TTkqu; z?~sG4(8qU5%dMl9^o}U%P0h@WQ{w84M7lnamD33n^J!5#!%$i_>ptF^^r042Uy|ub zMTHQi*VF@;%@KSJYGw9tsuRYtb8I$k6iWRs?BcsO5!dIdCDKo|P%};^X{rk}%j?CU zxR4y=G5w)dW|ne`3k%Bwtef}anU5%F6`|$B->nqN zQer%=g<4kDxm74e0OLV)XIljln?6B0g!lIa`Ob$d96n+@er54Yr>`7Q2QU43GX8MF zsj90(hbe)0@N}$wOy`|_Cn;u}n>08m**nHZhJKucNGh$@(qgNi#_lGUAPu#xWl1Ke zG=i7>D}6{$Fo3R}+xV=P5()xcS;?{?o_E(cOK>adNkiaUxCWIMB#L}3QUx@Z!Jj<0h7ON_;1DcUsB@-UjY)qA8G(+dsugCB%y{$gcX zge)F}>45clU4;Z*Klu>8Y*UbctT{Wk=cWldD zE@6(GHB^y3^);d;YxH=YDHmrXxyfCrBw*`~NJm&?3ldh8$=8soL_;@Q^L}Ccm6;3- zepoz+UkuKez*t4#9ob9Q2S>f5l);$$kL1E0<-|8(-6%rmo-7 z6)AR95dTYr?4e8>=~U1tVI19moGBJxDi9F^8UTt&C`@wD|M{>*7Ia0Eo5)Z08gv?z z&77GpgG=JNK1}<(J;pWK`K^43vBnfL zUWn*oNQuZkPjQ`nl=-~6qwQUENm+;Cq^An9pe@9}wDNosvEIB)JUy+45n-fxf_zr6 zl-R`}I6H4NhwM`kGz#~G{*Z(M6+iNxH_tOUt^|SbR|^j**w-A<&32gV;=%TSqAen- zJMVDyL4d7~FgMqy^0@A`)QQkv6zrduO881BBRr^GtHI{E>hz8aE)!+4zt6H-taE=a zPvX;nvH!JVF<21Q)cr)r%*Ef%<_NW!2J?+F`Sj8b$^kfg7_ECz%WAoOq ze=A=i8oTbYSypGHOB9a!X6=p?BT+&9gZu-2jGR_7Jc|?SwuNU+f_7o#2Ge6^uS5T= zpWJw*M6LCcG`!uu{QuXgfQbVuFqa<2YQB_*%FbZ25k5Y!yk(VGBla69P^Xy%@$^6oYGr>Q? zo3V%~7RWkI1!aTU5PJIrX+mGNQDJ{VEHiM2u;d_3P#I$#t3mAvO-zqqg7p-UWeL6Z zG>&7`=u}FHX!5@6d^M^u9Wufj(4%%#{TPph+Me106U;*Qf8FeV)>X~-+&RFe=~Ig_5hRJ zD`hL&h4esbA|V zGe(n}#t-a|6rJ#bOhVF985qiL5_g!##$x{kAVJg;d45ke%eT)!Sb_K)rzGm~t$W5t zO;Ai3c2B43I>1$J+UHTrN(AV~8o?Fnl06o4Hi`&{>m~k}|6{$CEx)!AqdZ1K7DMh{Nx~3-07}xFj_tCdZoihQ+VUN?ls_|mfJ-@{1tsMB z6B53!HUGt~$|IZpKZf~VWJG))^vL_l=(8Yf=OZFqBDD``>jPfDC1&1jdxPhoq=Wr= zP2w@W1G|)#GHUUliJv)B^adN`!>G24!9HH5F;VslnzSg}=RL37_;Hqf zk$K7(p?YfVx=FA)V!E)rO8z8+uUQIu=PK5Y}D!ui%NbsQ<B4!jNDT`Jl+=Cgw>l*35pl#~xht~4+!>l(m zl2ZmR@9Xrv4jDfrj2wS^` zJCxaB^_qofluq8vE8Mo%%nE;Rx&FsS(AN*~$g&d@W7+?oNcEo;$!fvoF>?q_nc0eT zxsE>OHsxiFv)$YTS4ed5F59H* zw|29{A`M4D;nEPF-Noh9$iL{{ExClrAbA4#2OqTEg{D7_bW80`eRUiC|i*^ zE+XzXUsdO`l|$9wZM$q3zCr$nhQOKvINzV%7R-ub-7Ie!O{oc3WYD2agva(x+_0{U z4aS-Oyl4QQD-Ko12<R+#nB};>+TCMLbNN;v-_BtTz*M$SL9{hk8pp2it2ze&Fwv@{UKAxaGUtO5*%&7b zvpUG8zo)z2bJG3)*@PHuA`!Hw%G%2e*;n#0VYjd=7ZtmXp`RBRht-?LqvR#Q3+Fs4 zSnTJ9caG7;oHXko&9Zw^PDzy zi_1SKvQ5Q4XNlgOkSPsUc##krPn@|RN@+~_pf>DJH##?9`AB=c0u4JxN^@8=0Bw~4 z_is~4iBZ))?dcbpUnlW=;6$-ROs0{Ypb`UIh$FUyIE%L`c}4rxs&Zycy(YP_QesD# zHasrST6u3uLE$j4?T-?$oKi{sO&={F$d|C(^)1UFuN{8NmhQpv4(X$_D`aUS;)Q9tDkwB88SVxe~*Gw*S4hcZiU~u z$7416$3snVjMZD*o)@{Da5caGj611@EUWzwVb8kQ;3BbH7B!6n>eO!D{on)Ovuxw`(IY z%Ky}78z>ghNRDJbQz9bOiXI=TLZ#Mc_cpN^iFodnfNhbm!>AhiP^VO zSZI;%z`+6wtN4V|zZ?ohZA9@eiW7(k8zcs#0)=O{-AlO|@G;lQh7=4(x_^BXk&vL( zOQDe6B!fAtjgHIxw3|gQvCT;G1C!OerU2HEBm?C_V^naJz(zUjr6e6ie^RNHL(ZEW~}a8Q;Ff;!{pd3XL6aItCU9=QtczU!tqg@>I0&b-dl)EyB{9 zUSW%k!53DM!XDUGBGnGRf}*ih4+nxKyg797ip_Bobw1o&N&Odu%@ZM-gJx9Z&r$xQ2$ zy*@T$s=prc0WrYw`gSq5M7X`i?&1FnyT}b-n`;d6B_!uo>KSyMqR04-nE*PXNDAGc z;xWC;^_vJOsHgg%THVCJsCk~d#1|U(n_X#W>Xf159en~spD`nBR&w;4V=Fu~fMaD$ zM4MhJ)_PsWO!mjGmh!{FNr3OC3xQ}A)-{mb=+Hk0cTDTP6wh^Vexj)`#rTh38zFmBGQhg32-^B z|4!V#-5>@=z?vgrkMliNsMT-E73(Wz!GdVxv8?$A5_L7WqYUn?C@BK@xu=$mD_o8W zX3ZZljetzS#0A(lO$tUQ%Bu=Dj3yz}M_7Py23UEK@>GPFx724EzUyFn;F;IYDN!}7 z<>b7GSC9uD+b=uVQlagxZQ0c-3iKWpg-NW-?WD`H{n5RvZFKM()H2tBRa}2V1%fSY zM9;Tg1qH^Gcv=M0VBvMm7A+g2hwoJj{N_(1V`gm4|9J+2I|jyKWi%-frGKSrfSv+$ zP~0)^=Y!eq4_*9sbGV6y0*in@^a4rnCQawKdzXg;T&Fy2gz;}-?x`jj26995%KI_1 zZq|Y8PwX3JrWc4)>IxS+G_y&7|C>6RnQ<{Fe8y2U`vHaU*!z>YL(E8TSFiy9kIhoWS!tA*SQdxRm zf2*{AOO3(aYE-OnEeDmJ7f)IEPGa?5O?*CI&Fk>MH_1yF33ki`giM;vekbaYXSsvz3vD&o8S)A8m!`bLqyvoO-?#-JIEY0SrUn$QHu9%{)qyhWHgCYIE6`Y zd{Wyv);R)?g#B-(Ob)`7GzRia&be8e(e6Ki@eGp9*Z;(6G{EuG@_B?T8jIs_0SHj_01vXKu}qs# zUua8P2KWIn;Q5AaQRryxQUNxewK88R_=*)xbh6k576H0!0_qd{PzUA?i+Yl>D~mqlMjriul7>clyzD0- z8Er?fb%2L{mA&%2zm1_EN(M)=3idV2jr|jTqX*?vjFlx^MmH^1r?I>})M>m&+bB|) zNNHO<`_JP=we6cak`ea4k`li|8{cC9vwf9qLw)D&Q>5e@^pIS^ZZQdaZCFWIyd<*U3GI&L}s9KkRRjp;LuWrmzCPMLxq=i zy^mn$1|ji#B$FDDMOm;gMC!l5iyYKTVSIUUXXmf?@$H2w!{UNm)&1gO2Hc$t_L)1Z*XJd4b-O#txC+= z!6D-vpZd%E(Q)5GX-j$iTm2c$r|R$XN>Zd%VcNA~9~`{py%hiM3o8vXBL~Ir8k!c2 zm~`qVWNWKOD=7>dH9Xhgr0L@7Hkp_%VEUclYQv5?PKmv>G-Y{idJgAbWs_aeE-_BF)C#n%|i-l5)9aB;DpXpt3#Bm`3)`p(YI&S#Hk9(03x z{iP}Y3&k*kIuQd85L;zDJX-eYPCK!)jJCEV&w?B`J@>aI_k#kq=)8zDf5P*|AZV+o z5M&|OYOulfD7+^k+nV-%zwRlFml7kjH9d$8hU9>BhX_6~h*s~_Lfn*pZg#>1Jw)v7 z;i`4IT23i_FOZs2fqOHywT)?PYVzz<(bO!edMseU`B|)QWOPnLAGX!q*vMSXykCpd z*!TenN0GU_v{WTV&O%X05co#f;mX;BX%{)FxG$l$| zv=|mrKFZLW`}-Ewj*esz?<1VQ#(QFxreBm-R?gkVz=82pFakBTecE%_SXmPa3b0Nv zUt_UA_w@alCuP5Q-HtWfzKuo=X9s`#G6@mhsTwk1WM!R47`^;S@YeGRJ63C?o1B$Z zvF{%Rj;U<4dWKU6`LzJbDVM)5Fk!}!QDO#X@2R{I^F-N2*jt!`T_jXhRTcMfaJY|; zk1NZqJ|Pj1T^5JVt#!ySiR`9zQfJU4Mt@eqx*CI&n?}*F%83>U}^?L zdI~1>XZDKQ+6;+z#0-7A4-ZkK03*WZ_n>~1#|zSif`~UhG;Yxa89{j^NMC%^RZ}aE zm9F~m8cPZ~jOQS=fAh>QDk_pcqT@Z@fx$gIK2{sNj@@w!dWLgl1fxoG#0P2z1o&>5 zL&Nbi-#bBWLFi~p)2?M_@f&d}=5SelzOqk(*uG_sTdMCiiqSXpfct)q&1@r} zEw}aQtbK2g$Z_s;5Tp$zCHmONb^(c|i6HeZ^}VeyO5vImQqQBuRPcU#x!cQ+AWbB4 z_#w_Up_*1-k4*Z$V2xpXTuDBX6Hv>1z2DhmGJ1&4_J2IGNs6j+@&n|OuC_wZM;rs5 z^oxE@m*eJ-j53+|TlI+Nclx2$n8gcg?c65B`${p$q7UZI^Wac`L-_7jw}<;7QC5}17#i`Y{p|>{)XlfoyLxA;KJ`cu z#les*vWSbpLGP-{u$Sws&FA85pR?BbFGn*v62+omi05ylhaIvv`gq~L>D4I76m{AO z1rbmkvc|rF+fWumduc|jz$nz_KizMy(-ool)PIx+@LM*#D}>&juOE?gqQ!K17GR6@ zBqclll83kXUd9+DPx_s?*84tOrE9$-Yn~K&s(ik!2}lurdzfrvHEuKsC>cskcYlZS zUnj(&6Tfskj~;aT{U zmm&jnecUK(yW;3qKybAiSW#>Wso#xi>t3qqe>?c7j2SRNy#kS z?CDQKyn*lKK&FhK_lJ032w77bt4c8gGjp7Er!n!$+=t?y96-@^ z>>{1WB~tIXXMP&kTMn34M%sE*ob@He7%}vgUO0zTA?FVjaMT`E-0!6;kA<2q;dj$pr)wK%+hP8u6b7}|FG zUS{GWAh28@PDkylRIQwC_$U)+NK^yqnB*uf`m`$i1w|ToDlw+~A&A952{BsgO%( zfrD(c6u8Z(k8T-wS{}*4jOMveriWh#%CXJ@~o!rHi9ZY}l%0v*E0 zi(sFsKpDh>1EY768m|#km_C0$9M<>rBe02*9u0}U);;giiB4;VY%5htG=w zJOubp9eItHMQnZyruOcPW{AI(1&*j&0r`?9b6@$99h&{K0TmUGug@dzd9HQ)i zdk-JalfD>(&$i%79I%sMoNzH6@2_EO4%3o!!Gl@zLKJ^rr!4iqmk9s4!}l05Ys{k%ai;fePwQr8km{eh9-?hYR?>6#*Pt~2-`(PG569>_KMNqcoFr8ydi$^ z@-!Lnsy-@=;Z3}uA(tQtl`jg2I`Rck2AebEwPHz5K7?W`PjyTIqk4{=8dUy9HE-V% zfScaeki8trT%8!b3D919bJ9~*{_#4%G%LYaZN)DSu{O%ha|Ga`RIf?cz9=4M7 ztBc^uDvZdES5h<<#47Zj2=!`kkYgL0S%6|I$})J1i~@Blnvmn0Q)Fb=3H}e<-~#v# zZsVXB4}pi>q^5$OKIfe!6`46CxqaU}hd7oVxp{c3wr4f94QY&?Ru+T(SS%*R(?Jx+ zXY1VF-@|XMKOo7==)_caT#YzaY+I$0+30dvj7>#2|M(@T6IX{$z(^4mZJBq6kqQU8 zne^S~a;_-)qZ@$uQn%5EjU~ctw#|u2$|oSO0=I)h!Fo|gFd2%j{}VpU7@ycjy zDe)CbB)1^}DU?9ZGmeFSUvNQ}U=r-`qYVSYTV8(LP;ak-L&^QGhUrqATuR!wrHOvu zi(ns}G&keffALy#9(+Ffi+F26 z^6%qZa?my<)Z_?;3gu7gugh3ruXh1&+S=SJLV74S12dpti{?BePb<;!&)g`dhex_khYPL=qtK}$|oBut8ah>r?`es?j+HL zKbR~f1O9mZNW$zejrXXZ-ur^eV;nHIvLX-%eF61QOtIdFa0->$Gbc4Q)&JY3AkD~M zx7lIcri~i{|E?DJ1&tlJ?GJzzbar+ca$oFvKtczyuC5J>4e6G^h>>e~$<2O&_1qrr zwad$>PrecsUV|mCMC=nx2~dzJ z#gA*d82teK6WqpQd{zTK6E0r6C1W4>4U$T9;k6qQB3c@Jov+&3+N)O*p#4LjQOvQ! zk_H&<-leBcu(;4>ydHC7REeEFRNEt?0~df})jhb@BWko#XBGiyM-KAp8c~H#GSzgL zb|7r?NX#or9pnad`BSf?D`~Ltt`D`sfa|vGchz$rlQ)Yq1|uBbFKAA-;#%dPeJBYg zAzJ{OoRau6kp&THW#EH7w?kXa&hF1ndmKhnS-|Iy5R^`b@)$8!C9$8dTL#gLyMsjJc$&)GEIH4 zMUE0DRRhkcj342VX=>djLUK&*>!?nM!Vl8#4?BScJ;S)zaYx4OVBSe(Q$mXNg<&{ z){~Z+$`5O|ztquAba?`X&_No>PI+vVv8Z^KL5L`bJXu+eU0%<1K+~9YQvZ*Zkw2=(40YJyn;Jx5|P`X$ok$Hi~hL?;($K}U8K%D!FkI=h?M=b*@ zopYHa=CM>Zqq7zr;?G-WOMOt6^%om-q7QO8aXwB|v7Vwm2pls`@6x25M9&z$h*7k= zpC;zM-jpOJnga4F?0x|GSXim^XS(Tq$2>w_@s5o8Iz9wZX9@m2nM!1aXu#|J{r&md ztD_;zSVNMsfLugRZ+ac`OukMdFe(0MNrm8PiCmZ=VQ8qQCtd9$c?U+;dFl7K#CX3y zW@=hmv^8Ci<(Aib_}%wmA{|eIry&&rW85cXwUUSMpIl6Z`?fJY-*#HQK9h)m7T!Bn z8NIsvYuv{Y>uDd%3Alea?DIZv_jFB5#gdgyZXDll z#8YWF)*as?kM5@&rQuO;cmlK2tVq6GS_%5+C&&(!ibL^b(Cvbr`X&AWLG~)GUWux5 z9zX7%``U?$g$>NoSLKb6D@>srF>$<;kK`apL{hrI|A(@-ii)G_+O?r+pmBG1cMBRc zXo3cJ51s(Q-9m784HAO8ySqzpC&Ari7w;bbKlb-L?>^XL)CnAPSJ#>~*OYr+D^v=I z7c$fp#00vQ#qK88v?kr*ePBk5497q%h zHJOk6t{WjOgVWh7p;wR=qirPEa7$y0+BhG&cO9%8nYSb&8-7qVFdQ9@U%oi$Iz;K{ zzddQ#LS}ENOi9b3=6KtL~WW-CZuz@A(E%_?EM`zU$m{ zN`_z}anrq=MfpH;s9*G!5YZ4MB;zT~KMiKsk z-X$ofRnSR$O3YP|Asuv4F{Wva7zin(2`wj|96iQZ7Oilmy@$YJBhxI`6bKo5h^&WGFGJ#9nK>s6QgkAGU<4G^w_M;#Jc0 zk4-8RSJlu+s{08wrn#0q@g+bXTpUFC-|%`I_4(n7f4Q&Ad^jCL+#)kArsr9qyw9(P!36 z7xl}LrM2`fu22W_Ya1k=e|B?3!MUNny^hG2M+Z^T)|(qToROj}GM?QuoM>yCz2Gin zFGv&~dja&z0HoM+-&2p!v8$V<{OKZM^Y07T%F1AQdr8&y0!Txc0qoS3QX7 zHK?1LIRo8Nv7%?^N+z#lZ%3u7sH(#3g6mft{9wd{m}SM3qC2(&_(Bg4Z5Zh3qk-zx z5eR?06Gs?KK}!P8LK27yKoilluQ8mOpP9LJz6d-Q)l|xrH`&qJ zNgL{;KuZ2knALpTG)#-^&j}MKdy6zL)`8KbZkf_4jKh9OZ3x#VAcP=vK0vj&h<8IV z@Bq9?%t?A*Qy#}(9;4LjL=CdDl-k(d&&;=tUkEsXK@n)gxH&A4d8vsuSfl9>P8DV4 zm}7Z)2k^Xut*xy#x;4Vj4{x8Go+7W_7WVb83P?MCfX!4?BK6;`G;57ig3LWO0MO>k zN9f48MN^~AJG=|Ht}j9-Oxs_qgck+tb3-#Mm{wjqPHt=JaY)^=J3?w_2$7UBeRE*~ z8cN;r9KDoB!Wxcs- zZSAS4nWp_c8ntb!`+}c-NYo8(uMtRHAM^@KT|lD@)}G{S^!wmcRrL%L9ueRlH8^r@ z<3bnV=D3|}NCWI%@o?e&j#$OlomVq$6I9lzbR%`tV5hueMjm69l}=pZi2h zT1v;7Ddd@_*c0aTU0QImzR-dsjAFWb${ZR=g*v#VpK zGinbTBnaN(Oh{;W-QEHnV(yvjO7gr-npu0EVLd0z7mgN|WL7(Pf1r4bfvm4i3Nb@s z0}_V&`C52YCK8_vgQx-3^Bz8Z?9t$beA@_rz^D_%*Y%H)A$B9*+^YzR)*6L1i8q68|xWIGJg=ZPrqODfyX@F?__q+J5H zEf-_c;*3wC{*P!N%5_-07bS1sXw)I3*JRTfiQLe?A7TjQzeCYt*|CVO9)hkwG2%~W zB++ocUkqDT;G2Y_`UuqHYU?WcjgfMu>)WnaY{gK-1cZX3H_@Pp(J6#FiTysZf|~(q z@rxLLZh5)lIwJz9G`VSy7?%3-8`F+1BCjZzLb^sbPth$*kV8XFfH6Aw)3;LCC?fPf zU9n^o{Nz7*F?OluFd%E$M~AY56{K!;^GEHUHA6s{eXtPinp02H(x8RH>lGIRmYzT) zv2Y?Gn4mhKVmFLL3e*7hG*{)>-*OmKK6hP-T(gxdC5PS8OD5y3x&2KrBGxxV<2;&A zc1*U1XjK{aB35EoXWOW0XwXeq2J@jB?)~kB)u$z2?@I^oYL;goe!B~E3wuDv4v2`!C;MLC>x=?8i`d=cfT1QcWq+ z2TRho*R|Uuwa z#iHViLi2g#_W44I#HQ%!{kTPj6u#7)(h z%zi$y_nBU0xz9Yp`M{@GCw9^jUL%GulvVvuhuh zFsTD^m7DzAIrg7ipJ=iYJ~3SLQz7UROv5~h3Exu`hflDc%5b{I4=U_lM-Qmw5)vJ2 zw;dE17af$E1@^zIq>ylOJi!}G|EWG9$|!mJ(IMD;b&zuIgvHY=-*5jA8P)0>xtoqC zlx5f&d4`t5h#i&9?H^63>GMJ4&a{;N5+L(fcVZdOcT3JO0x<~j$&nKnpMqQ7U zS{m;yQMwqM^e!xa2z2u86O5-2&3wR)r_cTt+)cF{q~|m#bx%P5>ox6Pl zY4gh_yJ5%0Fo)6i6isf%H@KzmS?JL|l=nCwUioZf8|E>5Q~EnOp*dl{(V$y}!~;{r z5SLA#`IHgXe->QRywM4v$YNH+QYY;|wgyyKKu)aGp!`5FQ1gL`wTSN35RI$*q}d&ZemR!( zNoVt$)#BL--~ah>MUyF=@wpFHEC#aBp%c)UFdjCOyA+?vCV6M{+8d#O5j z+Ppep{4pYEB+j=-HweNW&yd7-I<4t_*TL)@7UbaTxLlG#1@w*ya_A*=|ky1-qa`Yf!Zs@u^5`z0v@@%tZsq1A3 zmq4{q9VyeW@;fZ_Vg@Z}irmrkQ#Kc!}N`a|^?Kx9rIBf1b0FaRVZdZpCR`H*$Qd}Pg~Zn;Uxg?Q1T zq8TpEjV;O4pwjj;XbqWUB60}n=Wjxn6B4j?vF8^T&H~t!6)9rA%>WqYb1!8$8u5TI z1LqdiZ1uNq&mZK8n1;#pUjy80@rz-DXBC}Gn75jj5}zTCu&F~zksSj5?Wf3wT18vg zL3g0~V_IN~@9IQdWdO>wXH^w^34=9*RECXo7kuwZh$|J{7%#ORu%C@1df?fGNIPPQ zthufkUC;f@TAU|tMv%537wFbp@#BWVXl5d=k75JFu5Nzf(Ad=3?3PEi>ZG^Uv%eSl zgifT+>wzfMy3JmTt@SeYb9=Bj<}PxVu^$JN8A1ualBVPvmJv3{fL8)_^xNGyo||=N zM1Mm=Sl9$4wicx6SJ#Y1JK*g)fKHnC0+w(W>hj_i56Qa}8^AgJAgce&L^ZuNlvgn7u^^ToY zpFtC%8vZl8*|{MiL=BLiTPSt@X14I-v%AHH8lWS-=4)Yl8(MHaf&sofA|+>k(~95f zhsYiqxm8?cShu+e0RIF6GEYr2EwhKZQJ}OyrXP*fxm76@jUxUIGM?YIz3pyV3a|e1 zkl1^$K#9JhM_FeZq4~GsG|&Ma*~;MH?YQ{H*rQ|C!?G(TDkg*lS`1RsjDZOP(Xa<3 zF>B?*5;xehxXy(Qz;`iNVp7hHo%p}&ZzMt zoX?wJsEVVLlW93NNco1m!yeiWCFErC2EE33Rn+19Zrn%zhJ{)2KY1t<)ASPx4NYLH zSQ8Fn$I$%XnO^`ied-p>1)eo}yl6$@?NnC~Qmr_;_&Cs-siEEw+sTXjFcl>}h;#s7 zwlRmYYPAjxMVOLo|0jUoarf4|xI9BUs>0hpH#CivUG~|c^h~oI{a}JD=dCaf&DfhQ z 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 z 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

  • %lCn7>bd5ct14>7t9jic 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

    *Z7?r<-$v1k*(q|x>xU<W} zv^O4iVe{mOL`H$JNM1my)hxiuD_Ca}g zv6AmW)eD5t*zgsS&Jpo4ijqejkWh?&(*HGK%VG<+Fa>dXw*FN3gr6ZSqTJrjG!gvs zRKfE)Z_#Iw`A?ERSv4Kx2d)-Csw?IBD&-3BHLeP!cLj$`R*{wp7A@Vgf{F;RC z)A=gHib4df{kkXCnqpD$R$N9ArK3D!M-UHop!Oee3I@nVLklHpFxi>gifBqdR}ixr zZEA}QblDmg){$VK`s=xl_KJlu41q=?vgGRxeAZ^R>CT%d(XSY)b2Cj)Cw?vD>U*Re}mDdxiVH22_59C?ib#iqHKRbCUUu zT=3x_4H^p92lvA6VzMP0cy12gQspVOVY_mX^jAikDk{ML#;v=$Lvw4-D-m%eEA%MHF}*2(x7TbR?YPFgX1ztWUc zfk?WiJZBuuYLM?&>!{fnalyD2pVNd+PNyqB7H^34UYf_OSyit+jJemhlKiIp>wDle z+Y;|U&V1@*dSv_J^*=qq|AkuntI;5C`+RFd5Ljs667J9w9tT1jy^Nr;lRswR+v=8} z?D<$MDPGq)!H+e1`Y=!8^L~Hhl|q|O=n0l%E_GT?=(F-JBX$%VK6imx!{R|I*VCbp z4u->38M@e+FA0#DRZXy~g#Ld?bZ3}=1JbY-uFq?;Pw!mNvxIa=D(hc|abI_sx@3~`=AVxjCIokSrNZWA z1vvu<@!V|c1ti&C+pbYAr1O5bWF-_D_FuwX6pvgqCya6(BefgyDj zGv{&k$q{`@J7dU6*=e*ApMb3+qZe0CpyI!)mI}Orn@ii?{VSJOh;R(R!TLbOUq6fR zmW0K91%7peX@;P86PoU!hY7)53fJR z&DGI#lM-)+;orbfiF7c@oEOwb{>;JAw<4q;m!D&*LU)6Hr4Vtfy%F7>P#2f%HG z(Q}N!h4F5W+vB1hXEGLidc^&*yow_S$7h9&Wc+cU8t|C^y!c5PCIZXL1dcw>`q+91 z-2)j$$|WhTxkjNJ^3CJ%Xxf*1Zg1i))bh~nB6&NgL1PAL*HsT)6BvBQ9R5h~XYwsg zC;XVanFLFelig8e%y$Jy2M>@l&=YqseJD&hf&tyF@z&vQtzg=&DR1XLX?Ff9uN%)+ z;N&3Us3GuLNduCpSM`!L%)pN8G?|pMeP_OA0wPE{58kIVxU!4oK0|0ae1O%3|=V81ync8|}| znku;5Y~7}(s~eeAPt9+!+Wo89hPJZxKVcBsxwyt04 ztwHx8#4K^%d{J2T4L&*Li`3;=V-;apT^O_j)d`19Cv}MYHr{r<%NJ{MJLx;FX=Osi znn0=k5G_&r_5)MTgH_%pw21_W`hH@)OPkb^k8$1V{%H#5#m(PNUkn2|KYVgJ=_`dt zl7q!fUsCF}7&`77R}mIo!zgyL4$>W0ToZOb6CvHwY8uadLC!J<(G1v>mBf`R{O?B+ z3V~hot*r7Ns>*{$jzL2SB1&OE`~$J%!3XEKg*aUxN`xk!$Jorxv`n5x2qtO*vA}3H zn1auOre>BX8oJ+_?1Ji08>@igUDFq25s&#dg7$GQ?g=uftPf?lJ0IkDiLC#a0F^0} z+41F&7|v8^N#fx*JRm7lGblCnV5hmDD{0ZajzqKrtQ~9UDh(ec?zJ`>+5IARZTv z?0iMD1-YSemtQuALQA?FP$EKr7PE+HN{Uh2a1f>1Na;D_5NGq$B!?1k+hS)DKD zxosb7t*2jDC-;d%zaTF4%>WV%U`;WjBdQ;#Kc+R<(Qjm?>2L<$3IA3F-5q=HhGb2egh*^*{$uFI`d6X?5G`i7 z`cbmLi&Fk;)x?9=Y1vppSIO2Y#-q5EXda`IfanTxS;4Rbx?nOmR^d@7s~KVu+m$sF7)ffx(cm@vAGT?U0Q2V{Lq)h z>T!VcOAU@+2)vWmIGzYhvLs9)c-^4AA$y(rGSS39=)BK=;ngh&jzN8tx+Hr}P&rJP zE{a$M4lq?eg0Ia#JEcs=T)&)ZZTF8@@tQ?_HB_6hQh^kF z-3Lk}EzG?pu|5zRwo2frHE;X#3ZSSTF1;;mtdM!V%`0dx@}+}7!V&$!^l(0|)s_tfm{QEisjBX%FNCk~IR@FQwpBjz9L@!@pJ2{yi9 z!5SRAB(1&O!I<7S6~roLJV@t*;P_+iZ_tJh!szl$z~n<=gmGH$!9rZclbY9vGEr7P z#Sn~eF$re)kk0XS~sK79?+^9{3UYV=F4P$vqRl1yScEf#Sj*@Wt%lg_$c$z9*b0o0oqY)_9+T+ zjefnuGKd?jC(Jute~EG*`ZYa`sK`~D^Olr8s^3O0n8SNpaUG1w^>OiG!+xMT zIxzw9mL96^8U3>gmu_DLtz|jGretuUmhF2wu3vR?TteFZb>k1RR5mrhmKdeQ1%2GA zR3z6jT{wm;7FIxb&0&MuhdvR5v)q?^k^1#2TH4RI7LDp(yJdPJPcvCPSTM*F{9aGg zQd{=nB>MQEoA;A?#Mh-Tswc)9RbOM; zm3`|itVV8MQxV>Q05qG{0L-@-wqL9&!t!ZN zjzcQZBLr77M7S!+q1;u4Vh}2nnC0en)`hJntGh#JhR^9FlBN}J+ z-zxv&&sv9#S8Pz{SLk<(%kDm%D#_pkA(O<$gybq=T7#?a!Zyn+&3b|7xfrk7l50a7 z!xlAW^DcjFh0TA&wnX%8vP`eKYNs`h)`%PJ)%P`eYqHV*n-Tp+MxO@s(Rml4HE$MM zsD5W^&?~hhY@*d)BfX39m_>zrYQ7rq2Ak!dpUk907UgpL z3*+?B)FeA&Rqw5j^g19H{L}B=HAxmc8>)!!XJY1jFEX@~H3DW3 z&P7^)^BW;~{59|@7rKB*a^;h{M~sFv7z8#9i!W@q8nOi2hVG(V2L&?`8B-N?ig;lT zicSXJ@;PbN+2EG$e34Th8=>=76kFqgIQuZJ5GEV<}(tnBL(K5``K!k{|8@+=w=>Oq6+vds=ws4NFTn#RmgsakM2|OW$shS056Iqg0 zo(<-SG&U1?O5c*Hh4EtUG`??x;$0_X4wAkSvnK26sx*CjudrI-vC0WNW*(RoLU*jqUomF8ko!}AJHt9bX<%lB4@^`=40UWo!*Lw zbPi%g3(;Fyv0{*;D@PfC;#ML9=nf_o885Fogg;F48XBgmGQo0Xp0>@H_vK%z zAJa~NjpcHI0QADh&yW~U-mHi$iHYlOe7C6f1#4fV9sK#SNZO%qPPwhGxoOou_s6h|&y{-xKMSk$@Nn z{XVU&N!Te^T+nEF%#}rBR$r*%E?K{McZH}zP{p?ZC~_UV3El!Ngn}&bDD$pkCM}sF zbRO%*n4bZs!Q}m11iL1Mq4H`#o`DMUxsVo>9l zH&{3dGnix$G1(AUCfL|xVX=vRWiwq|W7CQSotE%vng05y)8x(6F^0z~1D3{)?1wtM zvD5QNI)^ZTHVxF(IfqGNJ~c=NfM{5gNWO)JQ{3vJ6y}7$3QdiIp%si4z$c zbH<`85J3pZZHncT{Zd{U9sp?F)7^#j!S*3-AK^w&SvUMd%*m?b2Wl_y1*w&foasSQ zNP#Yq)sHQR&(#!DO6bg3yi8_KUe~7A6EP^89_|~89??rLX^eEgRE*Bkt`UKjRk4o|C z-RE@Y^v_COGSw6hJ8r73dTTx%B5yBrYGQ3)N}?G*t?%sjgUoDGz`F=GvW@)n>AagZrfj`!#LzGo{(!O>AR^@KHBe34CGwl2JYD^uU%KjUB z=*TQ@3@Y~$g;C=ViKp?I942%PRA{ZElx=n;z#IFI z7EGsTWU17KeNQ{YMKQRGU^!_}v#S37B|GDrDl$DhqgalAgL&d)EBaesWyp$kp zIXTL{w*(`97{dQ7W7mo96*IUEgZz~qwG-PsQ4@FRwA5MTQrKWBOeWTwM8D7vGfOd( z!t49OzlB#7oCDijOn3at&snBFy7oDrjWvc=5+hiQX{bCI75ClDuu-*?k3$0F%Y^0| z+s4-Uc^v7-GH%6XbXaR|7@x&q*pI*Z+GxqKO^Vkw6MrBZg{J}2EAjTWX5Md2fejZi zNF?y05G%xgqI20ubd=6aJomvpMRDlFrPw;2G?*|ZJapHl2?Um=ZE7&O87daE=@c2~ z-xoUh zp*Jj<%Q10}PZyTMLJ2?3e+laQA)ti-Lpt)M8)o}F1&ard2y=a7?&0Y;1qktj3E?WP zpz&HlKr@tLDQqF4H`QmzZzL?5y6Wc=`dt9-C;Oept}#Cc>kl%Vkql$FVvLOE7~?)M zjx>$bpxuZ)tct`(>SJeo90&MsNRWntpE;l&_@jpk=*_zb^aav}nnnPUJ$yeOd>jjp zq`qVAy&-aj@ySayo3*X$oCjn+Qs|cigBT?Aul1x#a{x~-lRW@uMyvdP(%JvTR6q2e zVAq+Adw)R|C7f!OMN*3+K0Gf(gptg!LMUtX>xYi;s`hwEKe^xEzETDmE)aInkrqdE zio9##y74|UO`Y*nK*qY_@b*O7=tN?Gn+GAXRBNqugwA=ca;B*$)h{dX#!v$)} zd9=avZTaM=$MAjx!bkS#JtYJYCe4F5?`M$`Z>nl;wPIW>R1KLpHoN#}&Dy&mb(s{Z zs!d>qsTJ-3NS-Nw{2Uip({X?BZh*K>P%85eX z4iF$6&9PF-BBPl~@vtZ|H>-Y5ls2L?c#j2fI8$|L7Sv!TuVTso7jDngNqA3Bo?3Tu z{H-yhFoB$P>$o41i`djyhD8Zy6Z64TNq{><|5C&nIG?1hV?#_ZE%CA+iXIg4p2MxU zPB?9TsfRO|fe5tHgV)qtsDp_Qf}=PaY)mA>0lGEe(A`I}I$;C}gPc~?zTjzV)Xlk* zz=@ztz-=T#INaLSa7l_RNBD|odpWQ*>(+RLR;rakf79VIk1;WlXeR-fN<$m zaGds_b)Nhl%iXG``U+{dz;(*yMXe@W`n32$qSz6>C0gSPa&)$7^?Oa%d!t8dbDAIn zr|nqWCk!oLc+#@nXMh8kn|M#5D|SZ__Lz>WGg)rU2Wf?cs76sD{FfQ zIAW9tKBbaDH_-rHrhGWIPZ*Mx9Eg{5$Pa%85YHkz3vLaqxyD9`Eo7#!LPWIODKiqd zj$24%-E=ru$|>=jmNy1)BK}#N|Z?<*TZo z(Y;C4n7j~{%cDtH;=PMZ2c<{%I^zGOg#QiGTTt(yaD<$5>FGK*!El>lTNkWM^VVOM8{wPVs{+#-I}0>VQW3u#*QT=$&? zI!do3?S5wwi665!I)(o7`nvjA>w0U}v{$o!8%O%wdOz@82T+ycNj9{tF?yrK&B*-o;baX3SsyxpbW5pt3^w*a@S(a2NFsqD zD$)uZwwT9#n?+pL#3#v!K?841wVV7mw(U^)eiMAIRKeSz!Ev)5SRq!e`JGq!%sW87 zlp617v@9dfCb3l2kx1FsKISwdBuIA^+m*bnC3>>gABlZ&G+Bb*qmv3- z$Vx*2x4Tn!YJ{@R-4fvx7?ZC>{9@jczZ`~)>sCi0SdIF{_P&d^zymUVrfsbLE9R9X zyrXbG`L89U1+2JFG5v%0!@yVl2QR>v8)eZHvdUTVo1ILAJ~=d!@W(&~#zh7Yo8jM> zkE6|o7VtNrfuCkPeOznu!__=btBA0$xg>>S*ftpl{53Oh;2WGS+wND+^26FJXw!&l z&oO>mQb(ItvxT(V<2a_>K+yPJ6k(VTZduEzYk84ae)*Ct$UJu=sI0?S$^O{BSvb)FJC9h@1oWFzO`>N@#vXp2m?R<*y(=1Eo;fxWEwPk@by)i%lsR2Qj;i<|j`eHfZdl-SA}+I?I$5^8gwVP~AM4!5A`qPKWm% zEecGo6$AJRZrN}hl>eEFZSbPIMU1DNiGHuC77}yc6q9Rc?DQYZVd8QN()0yJ85nAm zBE3zpG<<-|-xP}*bxyBrqTu;z?z*`95HR|$dB~4K?P1x--VjJ22Z~3|#*fQR#X4M> zshWu8HCh-Zpq8HRmPg_iSKV?x-zu)xdDK|Q>=`xRJgILrWi?4vY%=~@9mZe=`&cm8 zI5F&_Win8R3b!6$4xfHL%?m$5R06?>Yim9izj;VczWBSS_ExcmjfEe&_K6zeGNIQ* zTm{00m()2IoYkc4< z3%R+BwTSB^&M)?t3JX7i0Ojp-7E{FpIdKE8KC*eJPAP70K`oi)sOetfp45V>^{@AW zHa^Wac*__2vyUXKGJsiWNuFS_zkwgpp04qR<_p~$mu(ZP_v!Zxh(l?Q4ZSg_b!^&g z+U>sfi(IoO5khU8ccPno7PUX+1C(tKX(;vp;NlT|owj}YMhBI2Vz>xnF8#Zc^V1md zlA?)b-lv9ywOP@4XTeAbj_ZEex(d{({!19@vymblxZRzjvJQP9& zLJCG=4de-HH^F{EYNhl^1R)n`Su0Kmkg5n?DcWsI`3^*B%rPDmNCnP(4)Wq=8rm3l zwf&aptvSW&#+cZ#85om`wGuFTy|_AJ`Dr`x2s7WCr*94AEe`(uyBv57O$yo#M6WHKB6!R4wg~V*@N(K`NOY_XS zkd<;u{wx`yt-r%5U^0^cA1L*DIxlagwemh3Huhso1Jmc2j*6d3Y|d0HGVo|XQ?h&r znjp*b@-1n(PO-~XxNOExZ>)<}KZY*pGa$*LuS+RH0W{iV|SQToe= zlJ%P#kM;`stAw&bTD)*lr=3Qs+xsF0O~4sa%bp5w{%cP8dJ&7_WgHD%!Lw{7Re;Ayj32t}B9FnfSg6W-2na50AR!D2AZ{5je z6nPhyOv83#5owcqx#=2oN>BohbDiEQKqge5>34)awOd)Q>RQ)j^m$Or_bk)LU>jL-{f|qOTFS!2KT4!#jYtW@tShyWuRbNYOiI!F6hJrR{^!dVb33V>2te$ zxu%abKAm><#XoaKc!xa}=&^&wxH_ob%Vl|IE{}uehtH2Y-_ocVGEpsPfuZ zG*9Q%oTgiTVdrmjJkq@zzh6`JpC7zgevM^LYgUc@fq&Z;`+3*UDC-tKbavK6q`%xG z_Z5jUaYhEgHn|p6EJnk8O->eo3sSO6j%C#FR{7wAkn^0-6 z>4KCfg`@!nzwf5wv{3-r;p|3B;9aq_^89$8MNPYnHO>50-~p{VVZz`Gk?{)8gai0k zxQ%1fE)E=bLPi55&*vnRx61Ua@nAZ05iz&d$`R#1&R1AMNbEFQB^Ip>>nV&|~J0&HHoP9y+78 zZmARB$=Q+m*QZ^{+ut{3zK>I3wmrtSb-pKK{~3d>TzmFY%_n$v zb7r5%v?)u%%za*1JVF18Ypv+d1R?60&GMU<;=9T!m&(fInY+#ej}4ltz8mo-viBl6 zfu|&+cM9=_k*==oi+rBTl~rb0Qr0>}cxLWOdVWU9=F}H>0DgGJcDXh88SJoV(Rp|? zp67eo1{kF6e+2Wbqo>{ z1jRA;Ea!pa?yjBri{o`P!sP08J#~@9D%I1~HvM($1<`ro+Kr<4uAf}y1?A9&E=e&heMt%5!rc)e8~ip0Yq_;?F` zo<*vReQWOpvAP+dTZ+vFY{FDYHx|E18Js(ZuHw zAnNus$6vZ(ak}FHW1r&K@if|TUwS``uB0UBTbHQBb65Q^Y^Z~ZSxq5 zfQCIPgX+5RVR-0iypZ6JqRciZjpL}iv=D4wmU^Pxn?l=8a~z(NnUDK+|7^(oMR?ek zjH+)kkn}EDPCGzbckl5_YPC0+a$Vl<4r9MS2(hFJP{82aFYsE`R$s#` z6kxxxOBBQ!zlXTLLGe}%$viAk#Q+SBNcrH+6NqP!aUMJDp-}Mc36?$JVH651c13HQ z9;67L*j4&pD;jSfm-av-knC?_Lj-ku{UsbmL6|cCfR#Xr-H&P_l6>5vdl?`vYx+=F z;XI)n`vdkAK%fMlxb{fkVR&&#weZ!WdQl`flkXY5r|PdFAPr%*w?9KNktXHhYNV}Y z;#^82fQDxh`lknQH&z1<)b;I^kbFjy7Lfk)C_C{Ct2~jD3e6thJ*fSPU{tT2Wgke5L-heV#eWqZ=@sqWTw%5QX<% z?@41`a)oa$DKOBCGisf~+2Joo4uBR-E@CbWWYX`%?_Ashf?!WF_)D7PKU?d+M&rPv z&RM<`DvTh@Dml(IAbn{&(`8?`^)YNaJL)XfU$L*W5YR^^NsWr`)wJObrb2k!hNAa2 zysT0`<4wT@)29wXOMHMYol_{H0;_kq)dq^yatA0b0?*7$PELJ9gTlW;A=pk+VS8#z z8^oZG#k$n~X)eZBUmbS*`A#tdl;e#A?wrh9#e5%ue%C|YGKcY|UrGrHKEniA`aG>X zS&(D9+s5B&FnOW3@1AP&Ib3#W9bxDB4|=TI59h6=rKuw$IV<4+sd-X7pd-9HodW^Z z44=`hu3%d`d*{Rc^BMTDvn8j|AN7v4Yl3TLX)9s;@iGz|Z6W9q<8L3(mJ0>>9ux*T z@-7UP=MF*02QSdMK@HPXk>`T%#lF#uKN_#SY#d!ObIBezW*DEr_z#}zM&W)(ipBfz@g`5od*F^L5s+#JxzDrhMn85J3PJB z_7rkt_|)!_e3SN-ASip4ba#v*A_WI5d_Ylas364fSqNYmxX*D5ys|usYA0a(k(RFj zGCMKGD*gp_Ki&XZ58q}MpO_7kMwPwwKQdh||7Nus+Kh2%#AMtoh{3*|g$$b!VLe$E zKK1*6uPW#B9J2R{ycsd3K2Im*D__UOHPSt`0||CJ0o+(c zb^nA6tYn(~+wj4p=j>*1@x4XhH;;>0kBXTnfx*%$kABm8O4S*xpQOMiff|I@1l*&zJA<>;X zJ?^KBWErnR*K*o>)ERRuc?kGHA;b6Y8ldDpftwM7MriM2uV2+oSwwZ7qCDI4u1Px> z>kbF}UPLl4k9Ib?ii_~OEkt*DFURb9k`;JCBVn%8iYf>-_e@U1DmJO*FVoHMLC z{IR5u4QsdYnVi4Xw+}T-E>i!Qt&XwSLt&^_9f;^KUW|-)#dH z)MAEi|Lr(Aa*GblLY-lk`#WGyuDZTgs`K(M|4F+_k$eVI{DH0lUwt?leobG}QKk1m zi%J6%0~b-|R>wNP_-(KGl8IPJyw=iU=}rCrDJjdRrU%XL96#MYqDj^fW*})cUW@anX72ZSa5jpczE&tMPT5UEJ1Q+tq z(UJcZOH{(zSlX5g8=;OM(;&aGvipo(KBbu>vF&BDvQrNXlKE<&%@e?kyK$2N zoDx>v|jgK1JcQ9TyZ3U*9QTANmJ zA4?Tc#aHN9)CJsM+ta0ed3U#8rCrk7X-Il+D1C|+H=l2%dqS^vZ^hm5d#R2yQD$gl?kcF!BSs5SECSWUuY z))FBuTZr#)N(Fu;ATjuuIPrY4CqeCe9ypr?akzgFv}I5*p%!N@W`{Z^*A7v`s#SoB zk@dVP={xkXf;|H;jvh)rMvphJH4W5=5cpFoYl-WSu8D-XeHz@~_Sk2_-v%JVuaQ}m z>dFKk{AF*n8n#noo~^XhP!_kFS!Dhad#=c_C@1#&G#$x-@7aN_nUD|LAJ?ir)|WT; z=?u4ZOQErkuk|vu%v#g?k(c&+^-V~&cmNM|lSZj4lQsDZuoh&>LwENzn_3+7`>V=G8hOil}^xEEzTx-T2l7Kk>9a z(_omBBw+ef_?AHH{5^8ld^J1IPyIHq{N8g_(@rvrhem{-7r{>Kg(m#kPpS~w0vhW_ zQK2)(__7`ydW*_5ITr2g;l=wK{Pe}R_edv8U$cSI%5h-zHp%}_z^ZGv#NME4?MIp+ zgYzBdXISSnBZp`<0XOvTaM%;P6|z2-$kvK6`Dfu#uV;$x@O-)GBgxp8{z628%L>%= zW}TY*Xg`rumDl{Y(n(-WE=`~2n0zjH+hu0i3qh6~<@E_s4CH2Vr^8;I|8K4ymyaS3 zZ0V4~?$kSz^NE`GsnFBC+oV88B z&ZwB{8*RGN_+c>k-{}{MHz|5&Pp{IyomE%xqGQd6iE7q?in^i@zfKgj+D zua3>G{*m17*8BLk18#s#)*5w$$(oO?M54{g$*PR0>*fgl8#L~cEJx<|rpIRFY(~HU zx6hJ?!~xfs(yeX$4&&1MwCXbBAN+o)=waOIAN@-#!EptRbD{{CVQ#yzBnGph^9)D} zFP%E8992z%km<5h9r9QMY4#H*)G+Ta10uI*{A!Jgze31%V30()3eVsPeFuiwZZ#-2 z;Erfc#g>oEtsQJ0p7VPke|(ACnM?t>n;QCZj1TDHkw(Oz7o=`P0-j0d z!|?46WmJvcQWD{QCz`kOm-g*rSkb-HQBk(^Fx@NfjuURZfW|-_4 zo5~#Di4Lj%P+wTmbGtI*`Sm(7#cB3r>WZ{ymcM3A9~J5J!__EEgn~CGkIKRAsL^l+lUM5?#Xfw7-iquzK*e%vb zzSZB|Js$KD%YWT`s{4huhYA@w56rtQR-->Ji{4Z7j>@&IQFWilVn3NVHjA!E%!b*o zKr(S#5yD`GM1p};lVIUAIUZC`^gv*yeQeO0us)5YM;Y@zSQRG@+nc>Ym5bdDVv<8S zVD%&NMxdqFzg`7a9Y9J3?U(u`S@CYl{D3t%M?V9Lzt-lM3OBa{N5Q*+nD8p>7Ld+O z{zFE0qzT+o4#sZw()SupAEX{pU;nX>96C)yS8PxB*a(u=$W)lgQn(;IZJ11u(W2To zo$OLMo)E;~S1E~~C7P;;=hCnNLl>IwcXany9igmjyncq$Hv-D*XKVgMWcN(_^40BA zPWkROKB5P6chH=Mb&>P5jtea3)dQrqUNqI-Zk|N}rxr7#ifi8>mA^Q1OGePTVgHyi zniLSFQ7PtEa5uh_8$Jwbo+otWTlE!_OKnmg3fXK@92n%(Va{%J<>ODnTU4jDvgTLk zzghXXEn4#*-GqLfjG&zX$15Tl>)~K`HRe&~_YApM8DtW@f+W{vUAVxOo34mnuJ~9k@G0~x@S?7KP~WZ3=bo!vlE3}+ z@wlkZEIT~ioPQFt^A^C9>%7HkQ#6{AqH(rZXvgP2W?WwPJHrcpA*<_yHkb7b`;}q* zsC9>^F)(DP$ng@jh!d>9hM5YW@DsNcn-BrCAk2&rW z415Ybpt$D@oh6F3e>Ya7;uPzpUnwIH>sNf#axbPeY}o*E0|!W)zFX-0qX zH{I80dPq!1-qzF($g4AHXI0@T$710(9mI9oW0HK1Q$RB6aC4r1WBG9)vV2Ebp8grJ zg=3-eA$h4lTf5cyGv=r5j&V3NXznuq^;A$KcySfGxbyESa;(a+7y*-?N2PpNG3I9O zRPUnkYu<*{cAZ%ED~mS%U(f=f3Ru#6rRayKnW`L}ywH zi|>!lo0YD`Tyn=2zn^-|LA3!h0G)#tnrrWilO-SeL9A@2Tpxy>SYuJ2bBniPX&ZTDG5cvk zJY;S7wO(;jsf}+^<`-OW~RMm>qha zJkRNk`Bu5RD&MwvGuD3r?x)U$zg#*Mg$~RNa(9i9S@LrpPGc5brx^3K<|TbM4^q{Y ztHS;^FV)#_3vNgXcYVa`F9|d83cG;jOYD73CrNkQFt=^Hp4%9zd@bb%X5{%hR$T5N z^SdjsKhmAgJia9K<-J7=ZaNRep=0wB2OgsKZG^1-OXnyLknH3Ayxil! z%eOz^TrB^%ia7k~!S|M6RaWo!vhGtT;c`gUYP^_G8l&UJ2)sZ8-aa5Y>2I+Sk)3>d zeot{)jh)h63Kvm3JP{xG%u8M&v0Nx11zNlpsAB%KAZlIK*@s~9 zQYQvso9*I*V__R|C9HR;yCl%b%6%kbCZF^m#iy`b$2{F!PiRJfa3p(#>sIM?VLEp6 zSqXpdw<3iTAVJ*y@w`?x(t+ODPhaQV#2p{1FIf)5SqYgb-4Vae^Aj!PHjWl}0>a1p zP_}6>1CKfVy@5ORppX%MEheyHiJ5vUpVdLOcyhj!pD`tV%N=-kPdMZR_}kPf-0L_} z0aNoYCKcKXE#T#kZ<+7k9=qPhvM-{5^>RNY=aIAwEsk!}%Ukh;M|}#Oh|K)vXe=5x zrG}H=c5mGWzwPSX?N=4L&Z)A?$B29>?r2dKeLZI98H#6_yNNQFI@Z6<^)IwUIHB2kCnCd4}Cv@Ldf94+oc!9gLH zATGK1n{D!ywhv31SE9ErIHj3iCk!1$?y^A9lmSoYopO9G4=GEpok@>jj_y5NpPGBa zd_F1l@Zu@)S~yzR@j)zIx<~0LsLG-N4*T5hvYUD0ho}?9?9hty!EcO3F zfFwOa_aJ-lY@ot<|y#GNaS7PmD2?&#grV;zQ0b(nqF6zxI&AV=CNXc;Iu++t8AE?wUQa~i|yXS6qeOkQ63_}If1bJXlQ4> zar;DHMU1etQQ5+vqnzz@)>@HMWwZUt3pwyZ6sG!(1lkvTlL6<)#$zSMs!Guho5l+G z(I2guKZ8QflFdN%@KI{$Trfmwg+d;(;78&ZXiHpgOc%KmJR@GS#BU^4~L8I}z} z$I^C=E3UTGtyndZ`T5hv07}g zSK39Nmtnjt-EnF0>6Y60Adc=cQ;$wP(o%wVXx}N?ENj6Vi}<7m-WfZ2jOLVE(`YT$ zuybrHh`GOzlf(Q2LI3sKf>Y>Or06g8+=4IY9BiZic@NZsh0o?GOK;v>9~^JO^2T$p_(k9mg8v6%gs-Hb!YioA-&s%{Lk zdc4Rn_^9;1a2!6Y{7=CSG?w$F9qL$&-h^M|KX*Jz2C;RTH5LmvlpXX22|iW1S+A{i z9?)Co98b9XvDFVqTlLoBY8)-T_BV_@4x+yYmql;O>u$M#`0TSov_Rk*zee}ulTOu* z-*Q9R ze6y|6*}pqS@MZN~;ER1h=qvi90C*%W0&&ra&r^&VH7ebxPgbnI-iGP>-~F*=g4113 z*DR|W-_2?19z6^Pw%Ncf(ovs3I=%Vk=ycxsf7ZpQj(%uooC(Zi{y{517Y-zU)z`M&Ym>kM$aa?!o?`NIzVq~@@h z?(^%cyyA?Ut%|KQ#pe>-c4q{d8FaEdv$RUZAcJL`5SztM# zX9vBhc24o~mMd--wn-14yP%KTKV%m^^?uRy0E;A8EV1R5+oZF9e{TB2S?76yba_)& zYsa>{v~Prgz;7N(O>$y?sH8~zx(~KE7-g;AKHD7)T>wTboIY3&o`rw zPw+2^^NrQ|Y2o%Gv3T{pI%g>S>;1y-0Tv(6?p*A##~(@G{?74f$k4$yg1CKiErezv z!>g~2n5|*&h6YCT!CiOxkQNi&?FIdOl97cI&1sX32d2T#JSF+@5b5Xs=S!lAH(qdF z%0mbz9QSP<(>Wk7ylH{oC{axFyyMwNlZ6Uv=yL)*4gbJv_oe@P@H9_E2dsHeI#{0) z@Vuf)YUjSY`KjJNJoZ~Zxy!uu`3=9MPhNEQO(_;ttk`Wui3skC3Vn0xx)-kTO|5@Df2C)|!}a!w5BJ+s zH`~@o{~3O}Z(?nNMjy{Y9TlCa4n`h*hd{vf0*cL$q(=fOI8gNh8#tCZ!DKMdc-il+K{wedsxbt>s z$Tuk0+Yy!nExa;~_S{?yy%ZJ}J|H*}5g^b7h`XYoAT+=T5Q^z4L_kW|3$Aq5o?yjt zTmya3I#g5uh8@8N_O1#<^Tc)6_*B}O8} zG&nT03QTy!y*3c|WjX3Vwo@?cB0S2j68bf79F3#%W4vOx_zG3C zLrsf@ae5a;J~PD|jnH-2_*c?}%9HHhOdBVB_?4Py7jo`bz-AdQvJP02|C+~z+t1ZP z$bNKx$?b($ehuA2W|42@giy5?`P^7wq7wQW--aNkFl_2CLMZ*Eo?GOjYP{g9Xd62- zJlYs9xoi}i-J<=WRkFX$MOpp19ipmiX)6*{v&LaF^#-ql8*!L~%_|P`+r5P6v4wKz z=1ufnt0`Fq=Nj_vE1;qd$A=0K7qO@cJopF(UXBTquROnDco85NO-PvO*cL5WW@04!ZNp@ z4O)|mezwK>(o?7n4El_Zhwh`YC%d8QFL}N*Gt&gUvPyvrZarRdf04iJLp-b|a4XnN zr9EO#Mb%$a@52aw)DJpH$ap@@Bmu?$)GfxbSY@y5$5tGQQ+(bAz~-}cp3iOk^nvfC zans&XOw>Dlb>na9VTK*jy|3M!8^CDVh=&~QpKb>=&o}gb#Pk!BZ|2>7oH=fJqDjs`mP~z$Rt@K*n>+?{{7c7lqZ6? z*?i+o*Xd%?Krfu2g4d+-bazS9b)%%{UtsJHI`B~2_N|kS^AkNRhB)u97yITpuVsDk z;rr5Ae>g)r{Yy8oCtK%p|MHJCV4d~!9p&58bt`~KmClf-F7>sKm6&pX{D7`cHh6?!gJCEe?QlX z4;u84KY_tQnQQ)ag<*W^;~W2bOd2`zHJ6uKYANq|>%_OdbDZ!x|J-xuyLtwwa;?le@Bp!i&*3Lkg-IY8GoWsfhW(Cf8!`7_uWj%%ZE&| zs`hVUQ)d@h5AX)MsZ*!w6NT;5Lk~URg$sOcZcV+N?SvDLX|eE=F@4yfpGt4PJuY2& zRpV_EJMFlepPVPoZeHLzFQ>3b`hSi(!tz;|@!K>0oIbYazKNKM#LZ_?dCS+l&KZnc zZ=X3-nQL;~P-ZW=uEh-qZk_scU)6JE_l|MW*GI1yRK-tlz3sJe8} zlfZ?U_Yxcm`Y8-R_r7|!zGHu;ax>D0`t6Yp(_LsHNQ57scVHCeuII#5GD${o0c z{i>VuSP6c?*~(d}t;PVizghynS*pcT(d2(4+HUlU1T45(U+DE?Zs7#x?h$twbJ~o_ z>7kJi_@*$Fd^Tgb&hgaViCZ>aag6Mhy7jRg(>cUeDg6KZxaZCLGwXj&3-tP=-d$Ow zr`OoF(?p*8NFiZdWX%Gka?u*!Q>O*Vxh^2yN`F@i1$JX1?P%jAIwQ8~@Os z+#{8*j;-YAZ^nv#2#(RcH%0h7^JqS{&?bx(+9Wp*Q~@v}6-%ndisa=EU(YSk5|#h$ zD~^@8Gun$nJ-5)S=wu{1R!;OO`mcV?{)&7)#?l>yZXbi|z88IzY=bTM^?32|0&n75 zd%fv+G2iDcxxJWM<>L~I*0C7JOZfz+l=PaO$XRKnmAps-*vl`!mq(&LXmnhreR5Wf|Ig*&9}v?yZT0qZ;8Ua!d|m3Aio{0q-j zizFzQbpQSTDcJ;HQZIdi<@pz$ooBzQ26ubmej)fcvc@aNxr?0s?F3L0+JuaCMJCVvcKwNXS5Yt$r zrr1sLjjt`Qj71r;f`J*_f+o&4R0ly5uZXX+{ZN<~`O3!$plRS0XNlQn@Ze*971JE^ z6*=(8I$KZiH5aQ1d8XH1g~m01SR*mppU>@q%sF41axu=ey>5}z+P_@KiTQ*BV)90tDaHan!%SL>htcK%-+a|2`1>E{(& zKl9Af>FR4P2Q=Sl&?663H?{c;Ad9Ux*?6;xep7wUfQ1(r;-OxK44oP^6%)?PP! zdCmEZ0#~J~RHKPYbL=fI-;9HM&(SzHjf0_yLkUfc@tQ;4RN+8I z7pLwSezzA&^jm86JV}Z!%nLg;D?6Ae6MeP_%golnS$M<@jEr%TtY5@7VSm1!m|@fl z0sbgyeCG^vPy}2TX#>g@nIKkS1KFU>nSu*_V5y$OE3zPEgU)1~kDTdH)_kJMMd4V4 z4Uu$55{3kMVFMPdu-`1fiDc{?H&W>!2w=YP7ns^Yhu-250gGVxC&S6`hmH=cvz!R1 z;UZi!3;Uq64fb>J*4D{=n~Rh33x6gva>zuCC7Frx*?yp)jmJle%R-Be6?)_XJG(&{uiUQm z0>DrBGN|+w+Yb{fgZ07Dor0{A?a$K6SV5}CkXVL)gba_0URlO!i}t4;0%2v|5SuE? zhd#zig%CW=-k8R3r`O`mKpA)i2hSryc51JB5?*?Z`5;LBX(tvE`JB{1qp4m9()SA+ z9G$l5v%No+F<76Gd02}t_U^yGtqLZA&nwv?wMm`yW(%jHvJ25Zc23l0KdAs-)~6Kg zI{PalgJyn0%(%7_e*qVPj~7kM%vN^9iEUxyr@Nvy7K|ZYkrXcuhX! zpZ=VEwP10WxTvj4`@65?u|gYi3~-`CKdK7IeTixlIb)3)^Kh=y&aLdeDs+{~u?1UP zX)#fN-K@tJ!9b)=XzqErFIRn~B{S(NWGU;Bn)|*PASOhqPPW%`i~V7@<6_*F;~@J9 zr@Q^BYxI@Y?awj7{-vGCQgRl~Y6o_1z()JKJ~qY)dS&0oxdmHFEEf7;Q_guG`dU@@ zZS)S4TvLyiIu^_Q<-ZY&P1nU*5{pB5b5`_SeG*Kcxj*)y6_B$4iJ>#$qO4WHx2-!knI>S!eBa(`i5XrJoGr$*jBYz9Vg>SCsbFD{q?< z*C$#eTsM!@ER(19`L*xRxYWW$_vX~0ecZ$b#^(#Ze%u%JDTTe$h8u38MI4_`2OoHN zI{K@h)8{-!rqfP8HFfLOtsAmW1uN-OpZKgV z`VQBp5uSMRF+bVE1*|%KFdq2lH9q4*xdfK^^m3o81&28 zB`$!L)QmGf{i@K_`^Cotr9U+v*P5+cRF9?2Hq`k=$ODRBW;xfC`abV-u+uVj@wr8b z-K)7*6FG5^W1k$~b6tX<%}IN*)wxEVvqj@vJ}-&9A|*1^MMedP1q_5Zr_C_Vlc@I= z6r(DWNmLniDp%)P0F6Lpv;9I6zarlm6{^@Rvo(!*zy_i08v>p4xeG|dgCQeMe!{aR zva&&kD_s=6Au6;!cM3UX8S+E~t_o%soG6PK(-C@+0!bMGY#iC3p>mdM{?M2R2GU=7 zwuV+hW~S-Hze>c*@GI9EKru{vV!ooK<3GtS>iBU3`i$_1mD#&Jm1)Gz0@i7f_dx5L zx3}N>>y5B>Nj{kgp-6>>)(G3<6nHq z1=V7RiYRBMO>6n&Kj(1m+n4*PyisB^y%FyIifmrz3>9LXSzB*-a zPpAL<$2vxpBiNi>@J?xFOxGR#rt^;JDw8_ob6pnnu#lg{LM8p<;tTwM0ShYl?8Z(z z?wTG_U;gg*zgbWg%6;SP{avb8CZm{ixq+kx(ZS<|vCo;~Rx56!&u`rC33Onu#;PbG zrRT;D^;5u`uCRG}==BFY=^VKBA$}V8AJ1Ii8?GbX9_IOz8;DFuzL6;YB@q&^>W{={ zIez=duPnb;*IsGM-rJ4kxZegGI zj(Niet!LhRMsHzB=|g=#ss#*#EpHcnZlJ9`V>5KjGxk3VC-@E?uM-PjS!weszFMli zaCDMj9Mu%FZJ>01R=kovU9(%?k9Zs-XqQ!Xvz%wg4zWMVLLUdUc3b$z?QUP$8{xWe zqT3@*HgaFfehr$yM^TrxcW>cjMpg7JVr@L1444#LNWoYMY=n}B#TOKRm`VWTS zf*kfoF56&ekyBWzeTC$6D`nURla^y8c)HTn@U=`CWf|Hy2**bT1Q)o$A3NQ9iW9&S zB0Ow=9xGlvA{aG%%h7F}#hN4Zrp@{bllI5|&0_@>T8Ht97`Z<2UWy0z6Okv264 zc#N7jD!rw?-Kkxt^v6ekpC-+il-j8??xD{yy`nLdy`1r-gIJ>;<7(3MN$I%TzoIv$ zOx7EZ*7ib)Ky2d$6y(=iZo~BanCJWyCZA#=*_F=4rrBRC+z3mGzf>aYo!W*yKEXt# zYP`@kZVw?lU+UT89okDdvkjjHMuxdU2*zd`@}u(vem%Fy|9QMDj&sX<5r^@4C3;)) zvBf^4OXYr8jqTF0>2~y4rReH$Y@x$8jxDZkb!>rSp@M} zdT5!z=t@Y-2Zt=fIH^!kL?^mN?ROpCusEn_i*7NJe~M(gIAZ{_c&qI#b`EBn(E zd~Sm8`tr2P2`7HF`kw3h>u>a)Sjek!x%flcNQ)hK!vk-xAdS{*b=O;O!_>8FS3iB$ zx9@6cg%x@wo?s*KCWwCeo&87NV3`u%faUWZ+v~Fmm+Sk-FTVJ^;d9$eoH#+B7I`^! z>eM-%apwQI{lVW_pZ@?(+H%Wn6F1Jkbo6Hu7r2&NZh1X1_c_flZ=tF83#SJb*JJ6z>Frvpd3k_E zolXQg#Ox8UC}Np4b|H3jSP!mJ6$Uyde1oGdu8Y9ZREizvaLpH5{voq`X9$`2SCwK> z!CPNPqb9BkW&B_x3d*pucI4t*O9E_SF*nnPOmG`~RFzY}xvqnLR z_0S(_b-k^;vlg;W)*EblbX>kEUe*HTNweOQ*&TP@ zYJ=A3zoz%Eyb>`qh3&W7IrZziS~~Y{e@ethC3V$eW)`Xv|MMet>eMN%(6d+C`(yj1 zOD>)B6aIW^uOw*JUw6aACjv>lO^#TdPpOqOuXBciSMQe$4{&bFIU{}MlplQC3+7u} z&bcpdIxJ~^XbNuGck9+&pPgK%I=|-pf;9A5-TzbCL<=Q&8%kMh%{jq9jjJ(Z-b_FJ z*$@5pJ3iOJ8(Dg4T<{>k!kXH@7m6`ol)Ft#rA!vwlpU!HFx#)Zvu-GL^i%EY_uSCp z%Dl$+<#$>2L+MK!ACvAJe!FqFDg5GFFQoBP^J;m`K3-MH1$I$$6RG8FG}CX5;KuP5 z`t-(0Tb+`I=mzmtS|qW8KCv-+(x~+0=qEfmuDARK=}>((qqAP6zVoWPSr=xz2upI& z%q=P1rB}P}-TwgHc;3seVxO+hgm7bw&xPFg>OF^$}S2V$l9GqZgpK#;bk4mfFH++RsT{KiahhBvWKu&ND zZs-@m8k4>*i>o4@s6_A30LhWa6-w0;4bfJHsRo&Vj0`k5(0&e*HTzF@(+6x|#pjM@Cn2QyZE&VT4(6b!t1~c0aJl|@!8nQ`3u*?#KW3nvE zG7W=<@RE9A<343!+d9ST+rn2_MCjLq2%m{lC#73nx-sq9f1mWdZGM!V)xx3;dv2_D zZJVxn?n+^|N!zTnUHZx<$EHEAKa_rc|BusyBk%LLV;u1Ym8p7yeqiq{6#Pxr8(OYc z-|v!svGecDT@(d-}y}A9DD1R)7#Vas$PsCsgY=>2VT8Dy}tHH z$=|+`vuUr*vz#08g79G2yPe586@|kPL0ELFWt8hMU?sZDNnj8OMD^ zP@hmmEv4KS;1hKoFoOGLx-dvZKDHL^>}t8gb;eOaz|a|KVSn6__o+~ZAyp}FW;a&C ze%RUCEFYe5EuCGmc2+dA;#EWy_#X zC^LNgu(Zyy>!wc*_>4XuGa+re@{Z;io0(daalcliAC>l7<3OE2^-nA7tu2hPlA-5(MsVW+#8+( zN}tqL{;TH}9{}ttx#<0m!#GGuT4QW;JkIkV?V@TR?%H57F=`Gs6&os@)Pg>?M8ifL zLdATJ6^xY-Z?Ws;=jeO#cpk6eebtg7Bv}Gtu_xYmB<;HDN7H7#w$`V@`e*_5i{7uM&uL6h z3^Qod134B8r*_mEuuj0mbL#M+c}WV6Fjee_1ef+eF1j&-9BP_ zcpYz@7HtnK>BrJVyY&`F?Kz(#HrISboUK3p3BBVSEs8D9HE{ztPD0E9P8GX*?jvZ- zJhg|j&t2oBQk0p^Qd~z2TT1MlYpNZwGYZ1Tdb%cPT!Buy@x^_D>?O+x zTR<+9qBkFdX0g8^A9?bLcD{C=eWjvkP`r2!yFmpJFmU}Dmg_7Em;?(iv<81>8b58k zt{Fb0g%X>kuWjC?KM(tzdG_x0}ojJOR^<|#I+BVPW2@DwlWE#f?UMZ6qL zXMfEfx;ib|9$>L43lhF~)G=BJ(a*8Wfd?F#Mvs0YJ@)t@8^`!NTyKjQH}0);9*T$Nn2>4Hw&pRzVt$) zar2q+`$*G**Z1n2p|u`$dC~I#3m3lq%~Sjkz(e{pALk4u@u@yO*TN@c_S3oGcfWt4 z`tl=Q>@Y8y!lU*6yZS`r)mQ&Bb?MSI?VvxD z9iQ8#wbvft^W!mN;tll`@o&La2bQAY$X{(jC@x=4w z8;{5L<#}DG2#35mIGy>(FSU5#6Y0bK_V8ag>GEeU@l7@8ctgd3YaXIS41zGl=RDof0{nK{uk0FS|9=4h_{EQONLyaH)d#s7y3BG zB(7@1V(JDv2MdDRj)I+U78suxK=KPKklr-KqUA;cn#s2q0Te|W@BsKOQ4K9<3@Im@Z+ z2f@tPM=H9wMu@i4RmcgPf*rWP8oCw_0%cLdboYXkE*yMb>ZDJ{?6C4qX{GKfYw^T{ zbkX4R)9u4RlR>uh`$ zTTIh9L@pCAujFL`5NVo%UwDEuJ?Yi1QhbIk+!#kR_Kj*zzyH+q#f`u2C-ITPXK()S z*qMHsUq!b^v7K@xBr1iYl!>+q`@{G6nZ(Y0g&gfd7m)B=O)Y3DV*|K=#0dqfd|(xy z2W^(-eqriR$DF`7vGk8UK{?%ou|Tp0%EB`^W%=%+HZ1y0Wn<61|z4Zj;UXZ8JddQ-}?T1DQ&b!f>OUCw{{ob(aBNoDgDw{m|ka>Fk(HFhUzHM-^{R91hv z>bcAG_M#)xM>Ov+#|(Q`3ng-Uh2S{RG(9xMR4avIx$S@pR<)N3_KV=*M{vn&_F$lZ zPp73#s89mGo?GyTJW>3X$4d+p`6$Dq&j}OfF&2RPZ_%1t-tRc9EaGwhs(cmRqsNhR z;4+@h002M$Nkl<|7L%h0H>C|s>=9}y^k#bGLd$1C8}|36YEISIW>}W2^Ag;iJ#T(b`B7=-AQ+l#t#y zwiGSu@q#C!nZma*qB;KJY1L`Zv{uJr^v9$p;@;9*68|q9wB`}1-_on=skpw5<6qE| zbN?KAVSGMPcbR%KJtHbrVj31;|Umf9U-Za5Ci+RoIfC1}S zhsl#CRZsU^bn*Fmt3?0wu|4eS#-}=(6Hgp9KXuexXJ5?W(+$mdb$;$1 zDE{RFVsoP1%R-6E{&`XQl3t@rJN`y*2q~$wbt#uUZF9=0C#B<${Z`s-*AMG6E_``P#Tc%5$P>+|YY+%))yUMtPQn}M5dkq$Y0UoFIWyAo6E ztpIgqq4&U&dMsV&8)ivWka&g@cqKRw z)&fYDuPiENMC%X03=m9R#U*EhAUKE||Jc6>2+}YLI&hU-RRk4!*`W%sz{{9b8HdtZk#@PcRl;<%Z`5}Wnj+LB+N zI5OQa{N{A;h&waWpswO&y|s;Ni1!dLzjD24tcz^2kBe>DCL`3FMb-m+O5>!Hzu}mR zh0DBkZOD+p>HmK9|9oQ?!?xUFo3!exebYJT{xMBz`drz&HM+!K|Gw>JKY4%D=a2Rx zW@4^?UCV>9De*Z27GRGVJEjt|pyvz~qdK!ldZ77SY~2Ct`@9iD4%R~g&1uvduX~|H zd%YotbJMnM+qrsvXqx$u=ltQh=ZEUNa$@?#5ufowBF-WI-%o#FRQf6D;YYNnEGNd$ zFMjpYbj(+dPsbd6ypI2E5;{S%u%8#SS$4VJWj-nPRQpx?_45f<1(;1{t6y*EiH@r3 zrnfjUd61aCy67o(zAHb@-%tfA1l@%7q-n&Nse8wz{ON#+x|w8BZ6Y|xldGU5STH48 zg9AGy^AgXFdV56|-3)%quT+9o7qdDk`$R3YfHucl+|$ajK|`J|GQ&Z2 zT|0F1D*p-P#v0UFAy1glgDAZ`&nru6EBhQis4lAJvKs9V4Gd?bn~r-pt$uPZ(V~UWvY>{qLRZ?xx`-^~ zg|6+zyK}p4deaJTcd!`m;m&vHxsVaQvUQf*MK^5u9`5)lx_JygOBTLh=n9Qt+SpDr zR!ghCjcydv?$fy#rojPTG+ovYwKBsl?YnvWjMrif#*zDq?JhC}#2EJ#2+6X+W`nI+ zxfos;3qzIQH?@`cl(vG8akOoW5$wXZvY4)!TmI+9une4feBfZPa0_VTe^tW2^+0 zeTP3v`{(!hx#{qg|DkMfw*A1H+TT*D_6Hqbh0sR(i--Lm{q3e>ADU&nhyqg4Dx*XX zU8>{KUVt!Ji{+@ZB~ASW)E=Fe(HIyXua^czz~F=4&Hf6W-Sn1-_8LdexAOn=N5TT-n3^M zTLz^X1mD|>xueZ_tk8x=RVH`^X``>gyhw>Q4gR!Uh|6;;e2fb=wWy-4+us#t-54u@ zRUIoz`+vZ53*Kn>i@q(Zu|c-b*TY{jb`E1Zd>|$n7a!Pffa>w$o)O2#hL4n!f0;9* z#y+O&$anAbyruA>0hZKQjJUpA2gO5rYHq4x`{r0|`OYio$++*O+lJkkZhYzLv}~uI zX$+t1OIj=~ItHm*LD}#ju!zMj_{6mUofr>uN{*H1RM`s7f`pe}e6ba@WpRG4KeVKn zeW`Qj&iedCr}Wlayk@y&;`O0?2IGx4M)_h-%i4EV;)$B0zkF=^pU)qW#=ZSkg7@pM z&;E6yzEGuO$((L>^J>&(dMv9?b-b~_dM&?v&op+-nAytWyUDaE3q|Vm{&=9*3cb_F z*I!#;=6pV5f?n_ZPR1FZeW4$|AMHE0e$~ER`_#Ehm-pliEeq_pn!!9hFu#3tNk5j( z(~&j8`|1JuX@6ZuB}MEQ@kkZBYc6ZPj^tPdWKK4zb5>ggn}jkfaB$2Hj*{!Ojo1lZ z0R`?92*zVm&UJjgkdYeaI-CLIxC;5YIpuSLe6GW_S-|iKwjtN&Sn#Hba|d`(&L<+- zilDI(tztK7=5Sp^tb(z2E$x>S0ZQy_J;AXQ_K>L*nGDV6`l<>4Q;9Cv)i`%@9ac1- zJK=xugb&ZcKdzyLRM)9KFyRcMO85b&cGS71AlnA21(4GK6W5Z7bF#>rk8r!_nmUXo zPGd1&XvFzQ&(1v+FMr?h@(nLu?a#rFo-|t5wt2`m^n*va*3le0->hqw@5OwN+I9Ni zJwW_4T?>#WP15z=|5D=ofcT0xSa5@xL`-$z1(&C5ue~b$`LAcqqRBfwXPDnPe-=SC zV3GF#=fkZR#=l#mIES1%Wl9=9A%6uzjJ|Q)xBV8p&wjq;VvQn$F-3p<|Lna9w02op z-+8`|qL2ca=c$0AfB=Gsih&4%L>rYc2ttU8i%3i_Z96Va_cG~~*y&EMWrprFcDE#1 zaY!8EgbNL*D5x=_0U^u?$gBtg0tH1)U-kd@|3A+@=e_rSLw)zF`i9!)-uIlnpW*)u zd+)RN+3$Pb`{~UGewufp>rJ`;u=V56-zee53KK`>FwbQ*cX_g6PW$|IdZYHbOlY34 zyg6DM<*Y;`^tr1wQ8CHcJDv3rPfu*jbUMt@rvf7(BC_x_3wr^I9CJVpoq7h3RQQ1Y# zIwZuxjRh8QN7qX}%kh@h8lW}(uEmI-n2Ox?Yz*7tnT2tF$I2xpx=wbVomwf+y0>hb7Wh{B=E$ ziAUG+^*XTmkc3y?D$90xZCT>Qi|Z%=pbI2pah9W~Ix({Q1${umHj0#7p}SG0I&!75 zgAA_0+XC=g)y5EZC(Zw&#_e2!QaH7-lKd+XHgdwTB53_q4DFLCs${J6$A{8jYX8zX z*;pZk-TsAG24WAI`QTNYWYYPRZQpO4S_zOJb{pTUdu(uXUK4 zP-HI>A`MKQgQMr8DOi_p;=hwsVekTGN^~ zR2?4odh$!$l*5ERqlA2!Zp1P8ZU{5Sj+!?bITkr2hS~Yyo~3zGqe_C1@l>b zYaI8+(IdxNOkK1NKK%TNtNvVl8#(=)!dk3#&&MkpoX6Yb>y146_D>P2XXZmJNh;U{@UhD9DE4mcn4pTI*;=s1KW+rQ}y_2ZD3w~^^Nl(m=pCY zJ^;l3=$^-gm4Tc4z4XFr&GR%GJu77Gl;;H= zI=%NYj0yDS*-277|#bM z%LmT~dp~4-t6Sa5-$wV_zw=uMs-MYch64>u;suj|GxZ?}5^~TpcVHG~S^95!YyuML=3G6QBp!&^@{CB_5@-&0|>ZV>V0*OMcYzVMG~ zwvQ|r2|r zlPyIbBKD#IJ?Mj1rLK2OJzoQ!jbnTWKE5P=&^s7iiQj=*DJ(nGesdMMRaR|~U4sP% zKZ!*IFRY@J_|-PDm0ZR1;KsiZzrk>${f>QHT*1Xt-TETqMl$Rol!)pYwQ%!>p1H*k zSAD|Xc)?N%pb6Y*QQ5Hpq$4)Ve^V5-1SKU~ictd2l|`bowts)#)rta>?r48jtU-Yr z`}iSpiJyF|#J|ps)d0|e-voWCV`a^i)dWDU@Q)%NhEZvB3em%ko#W=p5Y7}L4bi@d zBpP|_e5zj2yA8ByYgu>nl^5y8ZVk{l%4e1AmK@!&D`MNXPk4t6PX?8vHcSZq`&_} zx5U`%sJ%!;vd*uk5>>QHl8x+(Tuv$|6IYTBP(wB7cdkw{Uf4inO5TMJh~Uy{5^` z&D1v}>#x0PdK`j)WIpo;ADHBrcm){UyfN;-=qw}HwJj7QYQuh`6hF|mPy`$w)O@mH zjlb}aAO5Q%7bG13M=4{DUt(;X9TWH(75QuZ(gMJXhmHX(9SLytS$mTmEAzSkN>5@X zEnM=i_@$TljpEpBDK3gg4O=)Lc--H6^A|{8(RGAj)0CAQCu-W{Bq3S z9DqL@m494w{LsMW+He#o8w?m?7vV-2EBJW4T;(q#aZKJhILbNJTqzR?MpESEfUzRi zE0hFEc*5I`mBdTXv@TcK?6E=_TJ`Dn7fd8MT8DPQ*h$9#!yho!44eApsiX#NKWweAb{%qYbN+WY zJrZTyFD%Y(h1HJRsIr_Ib$VXP^IR5t(M=a?*~?2WpE)AeCBU1Vn<1CoZ|1gkKk3vT zH2a8b&OK$Aj`=U&>2~^Ph4p}9MGH_Tn?PH4Qw&6x`)Mg)ECG2hYngr@TdLr%KTzVt zPduO6zF%5Js85L$?ad+p_tGhu_AkXo91>hZ`bmEkBS_A2o@Lh3kG=r-vuXF@|c@mNW`**u9@|&IZMvE}c z$MLtPz_Y&~lJr01qi`Nh&BwH#_K7ck4-PQR+)nlV6A$^&e;%z4jM*oZih~(Q=t(29 z{@C2q#WLWjX%%KfiB>9Q7=`x*hV)EUR-V@i2baQjn_2wipVCh5H+6FtkDyp<{nUw* z59dI>psIrvi`;47@MA&6jgF4Yz~-5mxF3}R$5(>qb)!dm1dxMJ=o{0r0_}N;$-@a< zOi=EkdecI2R5u!-Ks!=vPUDD&WLda)9bsvLhfT?gR-8h>lX9-Y8NH)$#0Qr1vh{eD zTm1noU_v3_#(xr4+p#X9)$83){6wAR%ar2D_H&OaYwI;gsiz<2O9cBJh2lbsG!9h+ zuKHA_&cbVQDH?#K+^L`2xLI`7_;ggfG#=l>E+tqf21^jSKBsM+YBijFI{6dp$ZlHg z4)yPJ?V<=0mj3!y=-6$c_F!zp`e_q2^Ra5V@if9u+7gMWz8;Wc0YEZW=$!%+COJNv zxpb(~PsKdNlZ?_V^XDMuXU-p8gIpLwtKjLT&#keQJD2fz*jV@S{KmZT?+a)}TI39z zQrll$h|yI%MT0M=0v(&kxX`5YhxF(4JS34R zMyXAuPIxhzD zSDEllVfe!;$Y6+I-X6HjjMzePHqu;;Uz2!bVQKu|vGY9Bw=2rHtE;v6-3pmLg*G&5 z{5HGtbA6jbPnp1cyCt=m%S7mRGm9U-F0?>7O=zd)a zv-<|EKTXD^;MMO|0?^Oj%I8i$BsRUTYe`TrvIJ7o%O4yo z0!xqg!W~iE2));=`YK3`w^?t`p@SKnqeYFS#(H*GWS>sGclXa;>m|^d#2=#BFq{O) zY(RuVgks-Ga3dD~uxS1LGE^_Go_1hE#!|NlxSDKNKwR-jG1b)1_!eAGtwm~W&Ea6* zyB9GV#O6O1^FfK+O!RynFl39jxzkKmWrV7HOod&3q_taJz0A{}94;=(!9xY#+W>K_BY)1k4<1q^bT0t*bC&$X-Bb@&5X=g}wFuwDX)2Nfrbn|LP%FJkU28mnVzpKN4?lam5 zo(MYkIcI8=v&pQ2-QS9iV4^u+e8mKOB#f$VHYu0?h~S4t%VXyGgF($KZdWa{#A`m4 zN0`^d6rsNwx#TX3iAt`%ofpsjm_#D*x1qom?h>6?q2RBJ23A5+tvs03c`{xTqmnI{ z#PKAeKU6{D^a#J|00(ddutg_o&ZzbKp->0=#m!^3ul2P}8Fd$olMc_HL&zABke=4B z2i=~(!z$@Kt@mDCG@=tTgK=Oj_>U7H7PFCpCIVph&tZN_qmkv%q^7?S3cRM!{s{vl zqAR_fxggFUui#TJ`h0b}%`R&Oa&Eldyrc|69{1?)6_xZ{N!*upTKR)#I)cl1!V4}ZB1$7O7iU8_OHv0U=y3Z3*p@Ce^3 zc7)3-Dv+q**7+JoP5Ytp#Z`M>yae+Qo!lJbLciAjC6mk>#2~4k*A%yf85r-@_*ovMM&KK&31QY$M9zx`dL_d(sB9ak1 zW*)XGOSsu^_f!Epzrk7tS@=0p1m=Z~XoQ+FQn2OPESoe??7W`jTcNIOdRJ1+&PWes zy<#3&@2aeQeurmERQ#z2i|0&L{l1!SYp`Ep_$`H7c2fXz|3_ZHv*Oce&prpyq_hDp z-Z}x-hqv{&F{+|RD4X+1uScNih!xh@hf(_1pQQ3x_z4rT?@#kjW0T6u{iK+jKL3hT z)Hn+8#w(v6AOY~U>$Q7&3j=dmG=G0kzo^=c1ip0)NR_Dq>@aR|`3#!l^GL!6&lJuE3Z7(faL5iKlubdLMz~0*JL`@T2zH@p5U*(e6%XZFMxlgu*H@q3VZhKIA&nwglVo za;d0)5%bXu6dBugqKwiZm{ZGKmG$aUbWN?~7Mm(e%Ja^EB=;ygQXf5yD0XMVZ`o54 z#lI)1>gKoU_Auu&qdk!(aGF5tIR#5Bceh*d#;=V+=iV$=)NjRE8)*ryjt;xpo;U6A zQSJDXzWrX?n-amtmu3zsZ~6OS!kn$<%F2IIdtEKqWE!W<{#8i*tDIuB=u^qj6ZP&L zn^jKr?Ah~5U7|ZvtS<0e{+Q;@7{OoGlt3qsZ@e&($CnizQZD%w1mr5rx-X6Y*%Nr~ zJqsXRcJM$#ANP6hn4|vbKtmUDEFrZvs#)>e)Rv3LHxIG9b+V8p7&TC3iaGW(z;@qp zD51{xQzDcbg>UgI7l@!XExT7^(;!6PE(lY$24axy-3Dddgu(l#*y3HFew3R~sc{+6 z6TIj-!Up#5!{R2b;0g2O;9{M-E?-ld?bRLEggpLWV9Ya0yyoRM0xrrz6U3}&> z!4Kpt#52;Px~7Tu8%{vOY$i+8Cak$lf!bRphYnCSL2})#3S>2>C?E@VO=OYt2Gbil3%SMGqHjaR3kzNCU?yt18Es)20 z61kR_RZf+rrnhh_oJs~HGdVe9W2Dk&`8OI354jryjd*4Yxp|?BYxRpy&+b2=P+M=~ z3}4ohUt$2{9CX_c>qoVFHUaZ0o2l=_W5(TKaJIUDbJpUStdH0avYczX0@uQenoys8ix`inGGuQi%Rj!ZQ z(WXQ^zhK(ID7r*;qQpmp6a(hbD-K9I-I~+6AAp9=jQiP z=vLrEIxgP>|~4)pg+}|@ji!lw%g(& zKy}M~p|>)*hG&)=_J4*I6YQwI&@Eg;jiC;b)o2hp+okD^aPhWk^NskbEt#?|q6ILx zZz^$$kr?w8+`g%UA5A)&C2Oa$GA%;v33_vdsx(`j?V+TfuHT+c&mY*_N?-p&(?X`* zvH>Z^WP4JVIEJA1=6MdMqs=-UpN%F-P5}5L^J$D6^O~=}d){{)!J_D7>}Lg=Lh(Z{ zFMXFX*q7bBIIQy3b`YQRA>WJoHJjzcUx(8dvX>zC9I5jROU&tJ&uVo8wWVojt)DmU zmSYD*X#XYKG9Wztuc|cXo=E5D&mvlwSE$zn4$W$Aa03~J8q!%TKp5ZR83v*Ghs7UlV zgvOv}K)PXYrQTMGAPtO}#7i(KWn3XWFg zuGrZKQ-Z&K15jz?x8$2vjqcmY7QNrn-XV&m61xuDss8Zo-78&J6C&H6VG?RdIGI_Q z@~H4&_Vj@e6GrUONM7b^eq2$s>G!zix3!*81FS*!B!d%rlsi`Rft^CEbmNRUpEK6@&wVTbUgzh=9U)3#&o|2xb z3s`D?c(j6Ku&JZK|JWtRHSlY-hSo!t=CFHR~K+<>|M5djt!tm`)Mo zv8X%gc}J^u3<(CTn6`-~{7-fzGpO-!T}~xeUz#5)7;SF43Zy^%%7+NT{PJ#^;4YUsiylWU@C%&S!?h_ zVfryLW)+9yIP;+hjbx#(#VOp05#ihF3S$Xsk#M=$P&N7>-K z^8Q%obB%*gX6Z%7rQlf}sj#W-|G;1$d3au;)*s4WPI(O>m7bqKfyW$iTa38j0Qp9`%hgd`aaP)!rP3KmO% z&@ou@+jW9~CqZE`nVSPmVw$%wntFE-q>vfnGm7FOf&#UH4X6;|;q?75yRQLPB>?=* zE#dC=iUT<`+68Y9Iligk68i&$qvQ|fU!lwptF~aia9cC@^V4GAE8BJzoKZks5p+Sk z6!ycMCIG^H1QauX$~1?-#qbY@*2W_c`wp{RXh|eabyGI7iKdpPlDW-HtC5uxx76 z{-1K~A0i^B8}05^L)3m(ez9r5Jac@Pj>%S?P2r_(^XUUfMEcCH5Xt-E)cwSBIWcRc zu?S4DO}IKIfy7RYJ%p%46qam1+B3D3$H!t^o9jc-JdBR3w9mup+0C)nJrK=AF2@`U zPBYyKMe?zDd;~?o^cowLaPZhe4WoL%U0Lc}(I2e)SmRW5$hTkihxdb6W4MujW4gx!%*kRN>_0 z<01xsUVt!_?cPn9RA#JKOgDXL!-|GhEH~9nw4fuccRlsM-^Wnux*UUrPbqxx^Ccm6 z#?pa0sKNC+{g(|f=p-=QV`{q`(^UPAPZR9mhy3BkrG71Vb5^p=7R*oaQa?^s4=2fj z3xjjTn(9IYdgdh>;8` zE`Dz+sS**)#HYvS)A56ixCk-HI5s8sUZYe#4gWLDbxT-S`v-uL+BDkwVg_yB%ppZA}e+-T=SQDLRy(Es8_-iqQS>@VH z#Da|%Zzo;lBBd{2bY6%`?qBWZk}sTUxYtmQt6=m-3MIXQNzC$nv{p|3qeWHBA?v=_ zQ@mds5oE_3r2c^_pE#m*0>G1ul`P(BR%%BiL}=WCxsQ@#&P+zbF$QCOAJ-iPblc>g zfDMLsBf3yoGs=>#;Idl;m(1Xi270bR%bzI-75uzsre#IIw*ZQB7nw)(a(-pFArx2C zM+O&;D6WkV)kXA{2^byJK2g5rId$=O9SkS!iw)cGm7if5JqEUcYjIS4H3j{3>;t%s zMR(Z_P(dz_5w30HZ#nv@IfL9yzoL$1syBixbp zx%&7Y1mkO+i6l?_awXWBWF2=&i@k?oyiuYfwyk&m+2}wBWqE-hb2%y1qbhYTVj5(3 zKOgS}M3T01N{c@L382N)&{z&T2YDYKLvQt@<5UhZ(9hkOJ)P$cW5Dg1MJysZ_ca)p zg{WSKAkG4GKWF)I(cT={6(JY&z6@l2S9yj6ihv*b@t;_7@@(z=)gALLmH#7H{{LN_ z$gOtFD1i4+%W>x~&<`OEPveN{e>_?{IVc|c5HSuuIsXxLqd#>2UqJgGxcx8CJuut1 zwjQu*2`;k#?KYAA8qz5jH>-DrECe*TDdU~S)}k2S*YH|7+hW(iChrml^z#<83bx!?i$#hYr1#)Y0Ecn= z8Pgwpy&I+48J^jQ^Zt#JwcC(l+J((eCcQ@e)w5rf=4=`h>t`Sr z>k+Zo=SnAFurzhioBS8xye9NBbheD@A)dw1KGim$DwOGfp-tr5a|K$s^r;ldO@+4M z1TanZiNTU(y+iJuC8%4oXKIQ;0DV*Yt){Nm}?ta0Go5L70_`2K0NIXM%N*kK) zW4x#WbwvTCf!114@|}sWNOz^)Pe}~G5rlV-;Px7*i4i!wH8 z<>P5iJeb%@56#UivTgpg5EPCSS zyGzd-W!ByBZAT+>*2*9_@{}hRhRY>L+gx*7-^7xMPvdUPm0lp9j!b?lr-CiJO@J80 zIIHxWteA@4R`<$0&W@XPM!6^p^5=G}Sp|yHXT986Zllkfz)gvGEA!2|)qE5aofffK zj!0Z-F3xk&I{8$x67v`iHyJs`?X+B|XV@U?%JY-~lG6qJ<#jdpjdy@*dOdHp-OcE1 z-u}%gc6^WFePP3xM|Lpo>A^^fxG+l*ZT43TrtyfAk{|1#-B9tAqWhb=3HXRM^pfSx#55ni_~ z@=ontTxpj`kIqgui_MKDhk!y8)3JS2hy_7;E*L<6)=jKK3TdzpSe!z}>}r`cdds$*8l9;}GskmgEX(lc&-me5lDeL8u4!DKh>R-m3e@?cvy2{%EqqpC zu1+r*-F%Q#!JcM+*xBGvHG=N=3?B=nqhMYkS^5Sf!k?cA4kmU7>EZV(a=6z&y@gRR z>kl=1&+%lK3Wei>5^AyLZ$)=ddKkX3I4$goxi$D1N=3IRScv-T>h0;>Mg11G+uPRyPTY89&Q|xOC|VWXH-iVB4=^1lG=TAXk**HRhBHSmqq$y`PRn?-G2(%$45Tc@ zlX`|_3X~>4&dQstK(z3&c*6Gme^{If3xW1ur{YD|x84*uTf}JmTR%Sro%(1k?MoOlVwi@OfyP7as#(3tF=&_n*|L6gnxqPIrV%fFLRI?e>Oh4v9_Ml-rM@L(l-g+@P>(RM1;bpq`QkFew)7?!bDL~icK?Hf z#X;fQUk9eAI&STA^Nzl+gYT6F!jD?b*!L`Juq@bS^NGC!et}>_=cGnrA`|dV5#{QQ zX4MK9wecPO>Hm3Ae5hS&T{FCCmP#{{7;yZVFTGjkZ-iIozo67VfQp}mXp9`{%w4<6 zYpFvk-5pqPA4b_wV7TJ2d~>T&{q`3$L9**_WTR^h!Ny-&PcImoM4YNQ7e3>~_8UJ= z`y6nAda-ufY92)bW4yd+;3>b=li;Umw^wzH*Q-dMm>x;8z+V_e{F(i`gl(e-9pCd% zfoE80)$phfdxa&%wlby3d7;_<9A(Uz6-wk9L5O&seSZT!NN0W!)9qHmf6F!QOBFK5 zCsvIG#oi6@%9{z(W&@QfXrrv2FZ#>;{3o&JL4+pz*DootF9|TjbjOk9|6z`IV8)@i zfA7XmeaQ38kopLHGGX`oAyNgL2|IslX!DFN0HZ2t;vz)}m^Ty~S_IJ3MsfO>EH8e5 zKY4fyQ&Y{wB)bY(Gy9}QT>L!t9L^O}Y$3cMiO{L^=P}fbb?Hs!dyac5TaoR^S7fmW^9i!c(& z{PNb=gy%LuEc&z5?#0y%1gT}ZNWPIk19OoB=KVJ;9_2>mCJfi%cyr2siHWPz@793#TKTB}Y)~>HJLE1Mp<(-YezX(2a--2|xf& zzUNKv#d+ApezUD$kdQaa-x;diAfU~dv)wFoQ1oZq(BHO8Ci2CU!CKdnd@Vm^RMI}1 z6~N|PwALC>>ACI*igKCdkw(6YbaqEZh3}*N3Dsjs2}Tpdr34XHdjL^{+IL#x31O1i z@7BvEtFA;9f9u7W)vrQoW7bE+$T)IV>l@Q1OC%qS=4yJ1&yG>GM$+~Z2u@5?!ryt7 ztt?+M$F4+;h2I|ZE2;17C-t#RPf&%*6GQ04QjY!tfJZx*;8E{!0h~iCnAFa9*BvZS z_y><><-?>wvJd>-y8@3$o66O7|4Ttnpv~%R?^z@9`8rSEn=KGDD*R|%oLZz9-fy%` z@U^xbUt=bN;z;j2wt9H;?9lpu)mJ-q7J;AY^6wgmEoln#05vPOu9r0Rv|v3F=j9nt zN?|)1GP}~Tf!2NJxsg`(B_c^}HJ|M_c|BeDk}A-TwPrIfF?B_)@aN0bzGyhEO$ zHtWrBW6Ujs^Ld*c;qL0!VIa7U*y}mPc+tM*bO`8ac3~q9%N#o5q&lqumHioXlsegs5L|P9X*3ifub*sVa5E&x_ODxHtx#ayn#ac-)d)o-MIbkd%Iw7E3@ta6>Vd zV>*g}v%5&Sy;9z&PAi8ok;OVE=H1wAGyLpm|`rs>!K!|>o}$HH@avw!LTG*C#7Vc zl>&oU_Dog&Zh;X|5D;iDOnsyL#&(7L@hZdzm?QSJ+P^!x;IP6|c$in?T0c*z@L;!z zzb7!~R8rOD`oGOjcbwLu%)H~R?kwt}#voe2N7v%mv_C92zy8#E0Y_0zaC%1-a=vU1 z<%G*h{2mijk_GUn9~@As^B!v~kfEAAYL2St-pG1kNnmF1mz!<`NfKQu$Px4?b7WMp zyUa9uBDneJRz!r;?jYL=X`31buSRvrry64B;-Y!1%>qWHXSfQ!wnqbrJ1-I*_5=us zSXvNc|KRC3cW7;ru|WD`AY|bxGqGRqRD9)tAGP=`LD$8i=Zb9y_L#rpdMOLK4=0;% z7%CMKTHBs=D9#&sT1vw&a|xr_!6X zIOXq271s?H0n5e6L$YwJdJ#0AO=j47TJsikGF=tF(47dyzWZc26Ma4Hyb>+kobM-9 zWQao?YlhpdogAwKBpyuTGi>YcsJ63CRQ_lPUZ44RK-ybfdx0y#?b$*}A0i^`ZWQ0n z_6_u7nt}fhpmO5f z9x`1-4JS6+ZatC}6qQMfac>GW2_qqz8bl5)wT(4dSo&;eW{|D;lm!KLLvxoQ7Md44 zPeMEibmdNz9vt(I18NwBw zF!Og7f@M>Td1#*-OM2Kv%I_Jts%Z^>h|X6$mZs2)FJ?L1uF66gn?D*Fe%aQP{u>HH zy`4wE$5n*7(K;W12Q$j_oh< z`WL7wZ^ZVPBBlW~cZeOxSj4`)zKq*ku_$k};@2z82|K|on}uaq2S~0EsqE04L9ln~ zXvTZ164BW0S+I+{T9L8BR9}rnIpEM+UcQN|1PWe2V(N5S62xwrg^VQV=H;f^OCQ^W zqJ=1!K(y8S!=D>&Q~>hZB?Uk?mX*70at;%ZfYP_Smm)N|@4RE4dZVaVO)Rf-iuX1b zwaH^@lO(BPNxMZ7^yOZ{GN?|*?w zgP0{x@amMF7}+q{k5OBPu{-MHqJ=Ww?XVw`_tDP1iGK`Y=mKcD29rqdUtE6YrZwy6 z+5LYBB~Qldb?jU3JhKZO+u1F@lIJ9IutfucMf)j1C2q-)JCih{7vY59(rkn7H?J>e z%~hv@H}>(V^8>G7U4qkah8$KOx=9gYy>PYhrwq1PEm1uND~joGsqeMpTSZ5^iVb`R1u>_iV*23-Q^Mbgmu z1ip4{$T1xhbLo9DY8e<)ydXZP*S^ZP8n|or+~9FSBzr!TAlP8Qh9#Va=@2k9#Imi{ z$o5oRAo;soP^^N^e2)F>=Cnawt#vLFZb|tZG%lV?fZr?Pt=}``c7P-5vV)rkr#g&ktNlc?s3{iT_A*&O zSU;)j4Mn-X&iksGV?4goSxvV3YD|;=jEL)oZ$si6#s7Lkfeta)y|N1Nl=!aGp!-Q) zX9L(_`>ZaW$rtA4jvo4m>0ntLspwuM1-~|7;sVPXs>H$_-aIBLOO*G)cG!@ZQrAUH<%U$KpBcQ7 zmx3*ky%i|bCf^RYFmg+Ga}2%Eyi7nQrC)~=if=2Q=Sho=Y!>{5jKkvz_)}ZgJTa~* zy2X(;L^>bxPWkSq*LAw>Rz!DDFi-Tr2QDUo(?L0I8)~@S27uBLO92xvIA!;)omd(w zV5)n8Psm8j!QV;jC+80Vu8w$v)M?xgfIaoV!!cUJ6`R`qID!c6{nAVOt(I|uc;g@` zr?KFRPW~hOg}ttnLi;Dc%;syPW(>cVym3WG?+=_GZ+|JFYDZ({-ER1C5!`!ao~q_v z0P3Cl(tn}ksI zKQ4{7AB#Fw&dz6!QG>nX>Vy63(bvoGEXYdi!|72@qEPTtG!OeyN z&ikoH_}d}Kr<|@ae^h1^ZbW_AcsplCDiEaT(EGC$NIca)LB!UM|O-) zpOCx%cGUa${I2m(+!1`^xhDvJ{*SZmUrt$Xgva)dyuw>hVVJ__v)JZF(rJ=Qz1#Yd zpxwVp%QHhspS4hQkFRQl&=i~TMaSwqEYk>~?i%w$LH9&;Z0&urGYN{ScV}kPb0U`7l^qI!_Ay4Cuw%1PdChaxK=$~GE}ZzhX;S@apX)$~pST7*3%um1 z$$g{I8NvG&|0KKPSP^m^nLP6oOJiT?EUMo@c@PO@Bvt`V zc6m+N4y3at@n%F>>7jP5#Q2gf1)}>bmf{p-?@Tgr9pfmx*9x?KRhv$dLsg)~`rva^ z=I7{D_GL7Hpbs>-#AeTqOoSqSVeIKBa z>F_o*OFXX1+Z0DJYOMX7`kvl9UUv00sJ&89&z>L4Z2>AiAf(vV&2yuW3YSW=;g|l0 z6A$5M9cLF=qtF=O62c7S47nA^P1K_%2h?0mn)d_+E$Ea_Eu_@ubWV=E(EnE-V)9SO#7m`5r-tB& zB183P;hoeCsaOlm`Olg5(o41zn_S?wrH6|&hR}x3de8xL*}KSXqug-?Yc|7X-e}Yj zYnLSSc<`gvfi7401EauC_r1|fcSGS5O9xbDJM+0BU;kM)xPIp>*BG87y(zNNi1#6o z63Zi{E>aZgHP4l=sq;oJ5zmWDVByxej~~jiA2MvY5(IxsJdoZ`zRa@mE$e}@OpN|H zV*kF*C?MSA3}n@>#Ou*{2W46jE~jrao8f1$ezd(f@aqDx{#W}{KF?Z8_}DtmgDQMs zL%y_$>WHPe4+YCIDxaxt@1w3_#|l5~A@me}=ai51 z$c*Bd?Eaq7Gt_}}A}o|KBK*%|Ry3)8{69m++rigG+N4eBG(mERxK#W;;CgWq|H^k2 zjbMY{#^1@_eDPJyJ_fJ%bD}_ocl&2L7>VK`Zb%d!o@`8xwa$lOET@taaD>uZh!q_+ zF<$Qf#l1-HCcZiGcYlH(rx#is*NbN|F%GKlxYyq4_=uj8SYB}K9DinjO)$x-Se+OY zqVO9r0h;f%G()F01@GMvZ{|gvXx#yK(^vFL_&_Fc*{^2tnpnpfdJ<9F6f!)rEfJCF z*jWp7z@}h(KJ+jO-7Yk_+gt*H0n_1#)CV|=JwCu+sEzGtM8po|p)r~Z2r5d+Cx2`f z81C^`CDO^Ju;sMA3bz%}6S?e7aE|Zx9s0 zRjyFr4INV$m+fj1ILRRRP{8L48v9xW+e^kWBO8fVOUo9!ZJINpBQIyoB6;@HZz)q~ zMn@cT(ev!k#Ri;!$0;!J<;YD)TX6L1gy#8^#YRMH07$OxN#SqG*J$Az$68jadwYYX z3e?AIot&Fn`@R>ix{$XN2BCmI?#ftJjG|CJ{a&>sGUcU&p zwjp{r9{y^1$F(c{rtEHxf8$i)mXuu`>hqL)V9?h|IcDIz-chV1XgGEFKi}HF90=8D zcRkmu1balYvKO?Tz^_}f`|S}HPD4#1hl79r#;#_82EAmY!qe|_Y%gNZJt(lrlH5$I z$jmL30{?U3jC-P^=kg=yeXF68Som_4Sx&}7E)!|#TJ$L5s~I6%s9Z9f9_~v z0i^e+?hv5MgXG&ur8IMUu7zw4aoF&$4*HOFypICCe2~q`%mNDEk_|dd9)4{O>v)$;Gcy0MYeyNeUPRad&3*=@B zMVykwiqy8PboA!$%(+6n8>U9OkYhz{;K!{MXv(WW+gGDcWH25`M!T_#lOI2>jRv3P z`JB!=Zu=L{^`~YFQH^(hfstEf*BlxRIEg5q60hn4lS@8=*()+{s-1aTY-tx_Hg{F` zLH$9?Wlm80#yWpV*+WagAz=Lb83_s3;q$(H-v#|#e17oISa>OPMf$K7xufr-*GA2A zar8oDzF-HwUd*egS=y#U0P*AtCaBH2cfZK@M9suw9R-3dDqhGCb}i}Gw}!nm|N8?C z-?$DF!w3v6P=L3m!-##4XRWnMN`*&z*`V5w)~s}a3VNPmmgVMRMU3_jrj1zMnE7^R9}fQW29aorlnmo^2?huEs(+QbGeHbOzYr zQpu-Kg2G#4OJYK!pl1_!NQ=v#b!C!D{=;*l=Y*Q(!(;%R;FJ?@}px{=UD1UxB@BO}G#=IDRr zNFLJSV2A;QDW|RE=pWzS**;R7%#Y`CBd-e?QA^?H>fQI=iT`e1#y@`VrGKE&n222% zA*5?&mJ~21JH&{}dIF)Oc4IU$Gs+Yn(pR-8JPjvjC&v5fopDlK60v;z+UgBD_(Sw` z1-{3-N6U$#CTH<@s#zU}pYah^2&ExnmaL>1t}X4ac+Y&a14M2C6P|SWMK=qWle`nS zZ3hM2IZN|z1>3Z)io^?GrkXR4uIU87lH3c0VtMg3Sb1M>7T>hq!<24j z*9tHMG7t7L>JH(~`;<6(m1l(>L^ZOz^m(@0VtY2IW`g(B-F%5c`1qI4poq8kng{A- z9Pmci>T)Z+4`lX{!eR~1pjV`CSJq?MPs)yl`OD-I{KYGOwy9WG56WI?x-0k4KlJ>kpsA#uo0%72C`|;<|Y7EgHa6)e)S(4 ziX`Kt%WdNj5if%_;EU1PA=nh>sYu3GmL)Is&^slq3=U1_dG=}2qY13h*9bA}X+)`} z1O^9n7FFe{ji0C1HgMI$0TcMmb|XbJGA$UAoertdh^o$Q$Eo=cpQ7tz{s`+Q&!X#( z?=AOku>@sR+0~2r+Uid~4aLzV1nl!X3Jk(VZn3%0% zifr|_?5vUBM5QplK(ja%=VYDT;k_r)qVq(W_=zfo_k6h@_L}&P(MUPmIrjc=jm9_< z-17V{7mU+)?mk4KRq2`6@5?oMKkBtfX0sqGvsp$P)YFKRHWcXApJ8-=B}9M%e5w(3 z@`%3N8o>q@1)W$;uQr+}^&duNajaqDAiwu+USoQ#natXJrafV9DI#cuN1Fwk1fzVm z{kAgHDA*acJo-vZ0{#ZZj$=SFk4lj+EaE`@5u=56gsvn++`Gq3U5E(dL^d+g8OJd< zmFi1r5Q4IGVMCNVl)#GCZ5|To8+wtGX+fce9e*n+@T)+0@7)BtejvI$%u@D@$T5b^ zA!uAlj44IrVi~P=X|0y~J`CfZfKP&+&5no~0@e<}jVCZ9Ntmfu5T#Z`52HuOV`a4Y zmMXM1Nbz$ZgVgHIU`tT#@Bw11~df8=2Kl4d0SsDN>EBGnfR zJ@`5jc-^RziWCuROrti^n<`xeV@X{Q{B>GIzp!}w^TVjO@Kt)0d_@nslyRJ_L3xnX zRD3T_cD(OVm)}77n23Qyc)EX{iIkPe_HesbgGI`Ar+Iz9<>|AELf9oUJ$hyDh4ARZ&~3Xlu5L+O5`4?W)=% zMr{#$6RQ+ORgGGqR$C+Xme{j)%^+6n7(pZw$>V=L>s4Nyob%$ou5*9R{r#*}RpGBm z8aJL)HY4WLSLc?44flclLuUuWx2UOT{5`KLT>93FJUQuJtp%#H$YZeZ^{4O7uV)&a zNu!y*K5tH8C=ci23#@8NuSBO(gf-grVp*edtqxh4zo%dSB+!gD(IAFb91Hjg^$$0t z2Dsgcr$|l1up^&d*&78T8rBRMbpOY7MG$Px7Z_`{|B`mfit1fbYo72O6)TE}_5hRx z(>?xk9~Eqa5;>{Ql)w6Kh#YWha8Z?O*wyl1{sC$F;51yj?|??>%B1hr)?AE{>DM|F zKx$h0k-dUON6o$*DE+@J{(l2mZQAw2=Gm5(^K%oBz}xOcA!asY;?}&C1mvx4*hIxwnPw$K1Bq@cprtnZ82zhnc@{rou7> z2)&QNVxn7f!iCEOTcaN5k6#3o33rwoC<@i9XyWoweYGP&F6a-XjXqp*7= zW}yA``>?=4w_B>qT=0rc>bKB<#F6hFw?%J!aq9=oR?IXwl_{ze^0SIO$XNN$%4X=d zyGSMOE#rBkiZVM3_s5Aw<0l|2vGLga`$)4czE38Q7!VV%DQ6zlRQa zxuy0lw3xHqMRl>@(b9b;26%y-oQdTL2%Pd?XHBz^kk1(>y9d7K;YUkP6DW3i^@gC= z?;m<2@<*ppp||1ycekK_6Oy>B|D%4)@*&x80q}vVNBLFZE%Djyo3~I-F=ofv@gYrb zfys7OcjIk^y*zoTc5!v`@s6zUH)uw*vkB28uEQfo%dWRN4T@V#Sfe$K)~S5bm^M#o z;CRj|qG4s+uL<$4t6vsYY{&s_#puR0Kus3~-NZ*(;e)oyVYp-;lns=k; zA*pa$Xfxh@Y#;j3LZW=;x>RDBYG1s`C?84QsN<^$VX^GxJc6{6jGLH<7+N41#WkF$ zFHXu?mzxAmkp`%MT<}L{9)4G!aT}+M0H1zTy1GOSJP^}a;0|rt{Q5bTuT~CtsRL#( z6chO5A=n_dNS$Lls8DKaW+ZRqS7vr~qsHxS^+9d$t_555`yGq2-Up>+{US6oHomOQ z-^kkm|6Wy9_GeQ0KJ)8Kxc+XoiA$?Z|HfN>fks&6O= zl+t$ccI)EjA(kv$6xQPnGf$fb3P51y^4qeSJzL z))`@S<>L?2Uk|P94SHS%{QyC=EK7tYj089?V@^1iLdo6<(|R^yMh=_*H&^2SC^O4H z@&`XMo2~MjT`1;ltY5Y{&Z%eKbCL*sgUWu0A({|wq}0J6Z}d~IVcI^7EX38$XlEY5 zzRGp&I#N;gFFbbje={+f2R{XtVW~Etz_;v)cafeKnZsDP%rNqIh-e+uqRKDvDT>Tyuz>(}tH zrv3ThS-?f&uom(ZEPjaFFu&nm7XbR&m&E#xwG`eX2jkMjXjeYF_^hDf6}Yc-H5LS) zV>9B?$G+d8rilkx80gVsjpPTjW$Q&BdGO>63(S7C{js5T1KSzzG=Gb6KFU3GaD&0R zL-k>yb)B!Kl_)DrI``cUJ;i^9Bw1{%fVIF-T(RJ+{1Yp}15ttnR*XFcZP4FnbeQvr zzqN}KO9e{SMy395?n#2}y51*ZVOjnD$7xHuEl*cfn{Vk7M_zj2V zT{pGp&WKOe{0P{8o~FFMv+5Gb@L6MXj6H~yf|7>~Y0)w@uXm?IVPmtR=S>@V!_-h* z2WFS4P19~$k2){+hIx%iK3EYS1`ZAEvE;3{2suq3ZdE=TMHwCj_j-*~yRvBFgk{@;}!)s8%Fkw#1>A zM@V&zXl@sA%Cekt!caVGF3<@cV=ugjp zpR?O8JL)FAakNx0iQP%X3ul>+bDSp_rKC%h1}uubEcJ{_rbOKC8bsunx4@qW%F8?E zmZGnkur-W-zn{k+9;hRN0muROmyW-ycaiZmnfh)!MH| z6q?*D@7Ac}6|uOYSh>&IZAZnHxTb6x)_X%Imy&~BaZ9V40X8|uLT#10W-(U^)q;pC zN17?!r2n_HyCK1+N{{_JV1RFp2Bry02fTpx#l42}si5`J`v2^txK6EA)@wkfS2}qW z^DuHDoT3+fWw5Je66EB>`l_eB9@u>Md!hF6Nszn4%A^)w6>+*>IV`Xj3Jbw6ZdJYz z&|ThAJ~xLE;A9vof~n07->pKtM8%TvWQRp+<&{^%#vypS427kg(cxASE_WDAYDZdC z!Y=+u*`93P#GsP#L#S67N&$d5*?Q-3-pZfxl<&E~VRlm)i%5f|CEQjpbk~&=^l98J8XVcagOo@9|cFvelkdLo=*^OaS9x* zh1=r`Wnp3Xb$@v6Ahi|9x6E8j1#hPUC;l5F;xHHh2~S}!bbRF~comu&+6JAhUFqf{ z2@Xpe1KQh;bwDP|#B|wQNe%Y&8>GLoE^ zI+Ry-BbJm;nfgum(HQ^V#6QlHHeJ?P&m~x=@&X{jdr>r?DQZEh$Go*UVLyOh)7&?D zkKbh11wM#&^gIrj9Yw+gVa}p2YVO>49GmjKhmZKp!%b`$Edg8i+DmY6U))S@WabbP zQzMGUY$IRoS?2K2`*XsuG`GIc=UsaRs(DMtHoddl8rnh>jNbA`xi-PyZWv zPE;$X^qu|jOZufxR-X!}NDGr3p3Zw*nwij>S{)Up~3#mtb zB#lboTf!SRULUjtIJwAlLNhUhSZRLb|0 z%109^^x@;D%n!0|xZawRsC4)vWukV;1ke^$JW-2CC#q9vXMFgK#J+!je7$vh`K008 zG|vMf9OxdnC5*hT`EO|SmG`hWA2H+{iM$+e&1fX`f~D4Mw$jy+XHSO(vka_AR$^AD zS(U&=rYmpGK6OS$`&qH)2lry6Vep_{X~zr`r^JTnIooqh)43-Een8=y^Or*sx&mVb z+ZLEy_I{Hg_Up}sQ^gsLs8@OZrws%6y z`wI@c2P`ZPc@9E-bmMs?cj(H~loBLt79$_}E;9JSrjM@BmUqkjCNFk8 zRziZ9En#MLvS19UX3}iiMv$IlI7nsuoI&hqr`u8$e)(Q9=;nhHyW%;J~@MGUh%oo*W(3 z^mO4u+kWf7AKs5Shn<71NZoput<`dbX)s#jqGJSUF5bNH4K*a9qN4K1v*eqSr^8M6 zBo6D)tBvk5v9Nr!-A|a=s@(CoJ4nlCX4fiKBi8b_qU-LO^tX-BDtE((dIMg`ivC*1 z8PDKZ-JiigVa3D3xBhNjJtfyoy>0loZn7|O$zROh$E_ZQ&Llci@aR({XSU^0z90CR zL1pbbmxX4?c*s|FWLU#%hC!}%dNv>3fy~`lbv!qPD^1C#2Xs_jU#o~e-RHZzb*m*s z6j>LAMGgI2_WrEs*ud$5P)O*}GcXDt>~@(I-+sQ<-%k`jZyIS&mw*$Do%IevhlA6@ zq|90_LRZidvkF(@t-@b2u%9)g_%0rx9G<~s4Q0Jc1p9an5audVeWk1eer%>AIY zi?sEqJLU7RJwarxMKHR4xPI2MRqD4%`Ov%SM2e>XOvc}Dw?&Mz~%ld5p_I7`+Tfqe6d z*h62W`@ZaNlUrkSe?$&B)-?L{iD_HB(lkcLW$xw_>=yOI#zIsBoF%Bk|Z1w z|8v(FY-k8F0ig3VCsD#S-=m%0zV2@EF7zT&#m`O9ic?9j@!&|LSP*eeIQP}o?8S9` zOSS?U|DHpv`rW*JUt+wUPH6xF_i0NHwZN|ZGgkjW{D{o&KXyHl=vkA%aUO9%Uf6tX zx}F6-4wbt5TCS)Vu>7}J1$LT9whf$swp-(S&xz{o&A|wiGgFArBSPQM5-4;GHFzF6 zgvl@tb-^#sUcJxXjNwj!$Wrph!0lY#O;Gtgm?r-BIk-jTVP|$vXt}Z-`7=S9?^{5b z@~zeG8|vwY0XQu-<>$vRJ-F=0$iDk>ItOV=Nb__4so?!{PT0;&V8Uj@Tx}PeQDgwZdPD)GSlis0m za4cU@G<#%3FmUDrvhw~{;e6=)4@ z3o5HYwcif!&WBcSt9Lw#Ub+42zRWr8+MUoIC}tacrQAe1vIc}yx5_vRf2e`qTI&`9 z*lVBr9Zc7>%V9^w*mukg7iQ6mU9sWH#Caw$m5a>`aWYB|Y<#Qc^{8OT@kBzR6Br12 zaXuzyl63eag`%zBco5SvRdLw1NHX$2%6>TL)4MCIq|MLAvrkd2V6~Ehs+o#Yompt^ z^RwvCy-399jMC+8{Y7~>W1d~vhmRS@OWpzXZnOBa>8WGX( zlZxS!JhBgb=kh34$u_V~rhC)#f+Jw`1m+xwl?8VPwBrONxUHE2j{v4ukU&Vj_#y5A zFqtikeNA3NEV~z|EM9qMWyjkOd_k9L^C~7Jq8*>*GJdp?k1@mraGPT;_;Ar2&L5fc zYVkA2N^?${&WwKf(yS6lqL#S7Q=fbQw5qNZdOt{T+TNYr^M8eVtTt<|Nhv;y+CocZ%rA|bJx1Uehx@U)O@!&GVgj)aYf1` z?ECWk)R(L~E;s4>D$>2ouFCnAOzAk6ku!_=^h4#es_GG@=Y`=cNrmm@AGg-L#nk}s zRdcrMy?b2K{sFJtc21I~l*eh~evd%>mr!Qo{;%4&Q%7ao6u^ z?DKK?q`CMh14wDLF6kq^gnA^5;B@qO*We4jP)N( zk)7XkDLxaD-SiV;5PI0o>_bR6tZLh4mayV2*4wf4Ib|C@4BKeDEP;+l7CQMg6B(Jz z@-FkY@DeC!8}?+FO9dN)azvi-rH@%$Iv-OxPY!DqQv( z5*ybjPCi~zsSi1l;xjq;1*SQItB?S<_RfYc-Ti;Vb$1FOgj!VnMaFe#5E*J65V#f! zX;VDxl&~NrlP{7pL@M#+B+NNP40M6p%LqndVZ+6Z!5v<`(-6xr(vnI$aWoc?s$prC zv9x-BSc(@Xds=b=Fs+;h>_w4l4=>I;c92|cp?ENo2$qltn)4qb<+^oG)dYy{=CH7_ z_e7~0F_)ZgC^+T$3jC+4KLwTPdP35qt7KqFKYv_0$Bi}(V{GEPn{~t* zw*`ZHY2Z2Q=EpuaQUHr}N{9)KDpBi6l4&&mI<7uT>8GsOKEoTI5a!}4&hqX?OYOA9 z&q$a^=}+|x;vb7kJ+*U{kcT%VcDd=^k6(Lkz)Ji%3c`Pj54blA`YktHS?J1|U3Hvu zC-T?y+OuMKmBcjzy5T+R?$1xa%atSoxcxXbBSR6>dMU=()DK?>=s-)H00zk<-UfAj0s$U{Cz8h>9~3yql}iKwPl{JK_HX zU(F5H`;oVi8~yB+tzLM+(4#eDBsm_1R745qvV~9%%Q0iwD=#BIhPek8f3(7Whj=W0 z4l!CkAqStpCyjqB*#}m`OuORNERN-j@Ka|SQAKItFNq~$4=-<1mHU?a*u`%*sJc%X zKRJM%&n3xI7>j;^O?v&DU~*zYq<$qN;lc=9f=3lVkmk!Uw|%ZrnFp;gud6OTU27PB zw?0Jk47;*pY$v!*A@sC}57ZxDD9waQf>v|VTO@7T@#!chE}d(NKG+=K(aM>Nu!?SH}Y*d+55)xZ}hvpyiB=m$?V~<&@kJg;@Y2vz(Kflaoy81F| zVi-9NZ*H>STf^^9Lrhf$3`i-prORZlbZGOKfe#su#KcJuKOJ5|gOJb*=njND4o88) zni7?LP7C$$p5SXc(}&<`%->;1t)d3s^Oo+4gC>hWbQ;N+SLLJ<@pn4rja6S^CX2z|BY3D!js$j_vEOnD6?nqlD}!j*!BX&gF&{|Ybo((_m|l*=V~9+2S{Xt-k8Qgn`Ptsx4Za&Z+r#E+o1lbs{{|P!noAVK zy8kn=ecf64nP2A5X_7e5bm)KtL7udE!w#3*&7EpmbDGZ;q)tW=j+=jTazI6EY&uz1s~kbx{7T?K!LD%wlJz4cKGR!Rp$!xB^M|b*RR~Xw9zM9 zeF;}4j$ChJZYoz(&1>&0<^5fD4tai|1rmjafB05{b&cN`EPtXW!R+jUYtGrHCjm_N#h51yhJM!X1G|M4pf)VfYa;5JKATM}!g3$h^xhTLcGLdkAiu z-L2aneqMpifD@ZT^^SK+AueJjZ^Cfhyi4v)dk5VP@rEBjZ_MMU@98ODtd3o<2qWBT zEB01>K>@uleP>&j3zrP^{3b>j@vG;EE!feZA9micIj4bKB&@sy1eaAbxPbpfUc@RB zm;Dxx`&$;#9;6H4;94)bAt>||4Bm$mdmaKwWZ2nR!&Y9fG@Bfl&?-Q5ptC|Ex-ko^ z=*>@K!M`VPAL*beVN>SFM_~Y0KHN$xq85S=36=TSIO_0amY>ODcC6U-ouQ@h2m6KY zG1*q&@n8IHZ}&?0R`upSz8P~dwy&Xn>Da>C@^|Ta$={75HsxGu}=9rlM)Jj-WUC}L?^VUN5@Y zogbcdlQfyIbdeITPU>J(d9u zSa>C5)j+B)zxzneu5L4EMbVPF4Fx1GFwRI{lZ6B~)h_>OSdHP5*(6;``IC#Ar+E%M z)JOVBC80;J4}oQoQ}~f2P(H(u1{%dNf zu`=vH$qgyzd5xwYG`VS$%tvPaTq z;5{JwWl+sjg}Z0PkVRnq#R@gG&|PW8dVEk+kCr<*zTpt-Kk1sJdz#w17``S&K?w`2 zU+`}fGc_~i-D!B4Lo)HK0T(fa^%Kf#eyXr`P(w)V5x50 zD3;iT1VEmz^v&~~Ip0d68PoTKNabl5TVqkywHHfScKbepFMY$8WP<%b!vljI) zh|3mVTJuA%NghDnA#;T+<(%rG%m2{HexqAAN|8lC^ z>DOgD{Y3@-SMpiyaqW{o!uYL({t%;Vepr5-$LU@RBT&sD{Dd|1KkLjdg(*jX%PFvt z$^^@U26n+mZ!NE5^r-oX=Z!Kw#y55z2f}qaSa&$9?w9O6Hwf*0@}L{2=9x=<&9shj zj!CIgSy+Hnd0k2->Ot^L~f zV&gv!QaszfbMJX)@+0kv4BCz!TvGT+ZHVTiF_or5&aTJ`LfE0ajyqmlIV-~YNI!FX z@#z~=pZ^Mw?~7ixo4IC~8?ZMARKfR|VfHK3ZbAa`-PUd@|0=;Amid&<83l)m?VVdO z7u+LS3+~zIWyaa&+=jqXp2ItDBp;qDw=Tk!NSk`@T;+{6gyKHx(Y@rQ^+QCvUpq*_ zy|Wr^4Gb@Az~zkGFXjF>Y7&qotD$(>m;B+xYBDTj;r=qcPrh=gk3X;>AAb7O&Jxly zk;@RA-MHs0`UAdv^LOp!T1{_;v)u|)(a5AYClJJ}j=d3?b`0i>Xqm*F&bU^~6QwzN51@Zn<DJ!YSCsE5lp z_85Qv)e)8=`$uDXhmx^2L@@f**XFFnwly90R=5c)evk6m?_^Imjf#O3Y;X>}8@Ksn z(7_HhBv=q%SmnMtk{_f~XR3*(&bEH~VnM3N0L zLHH{GD@ziG$nNJyJ}Pg64~esNxKCr?AMCf2ry4)O&vK!S=8MF1v>`Mg%3TyRfqT>8 zYIP<7EX{QvhmjJY4Sd|hrG`VEgN@l8+pU(pN<_n=S6N@Gf^c4dDq;B*a_0Q=Igl^l zP@M|-9!W)NV~@_O(4!4kw`TsVCTukuJSw+UcetI(8d8X>hmwqkDIE=zENf9lv%+%G zBQnTEk86!fTiC1bgy3}9hatpNz8Twp7YqvS`NE$n->!I5kA;pVXk*f#Vfqki%SNTG zc?mcFWpZWA61juAQCMY%Z-I*4VqE#8S47B=|Vi#AUEeSn=TYzDplPB$FsfAfOsFwQ+UhZ zxqbf~A`ZjOv;9^=`Br9C&Q%xwQXG)K`fY%iKu8r_@bc+V%xrrzu(Clfp9d4Vp1thG z1o~(_(cXxMhyGocjuG?ChR^GOCP*6SU&sM7{nnpLL}Vk}ofI;h{hThpE#+g-@xNQ^ zHi?)HU%W-je}?~jU(MTiS?%4)6M5!u!x%-8DeH3Z6aQsv+lu{oe|bu4J;3tKuRLSb zl+C7wHTwFaiMK~X)-zq1$c z^A=r!{Rmfx=Tq_RljlO&pOQi?ZGWoI1KQfR|fc%?_TJKZRJ{@jJIwsszB{%UBcp1`eWGNYWVlXAX3G*&p}A4--p%u~HQfjro$YQM&Xz#h5H2gYs1fnXY?NY)eN{36;S70h-!gd` zkT&X3C9=uS#^g@^PK8Qkbs2X47-`%(424o48W8TYFl?g4?8r8IgTjITmeu}V;*#HV zA6lR$@NBom;U49exasBp0dRE^_A?e^46EYt-q&x42qd8En6nb;9e;(6vR}p;vAS*}8}=r+NLg^jQ!VP>l3#NvWcLy( zfLs^$=V;7p*pgZ(*#qrnzjymH7nX{?%C1c5EhDju!Ty0l`N^F~Sm~u2gae2Aq2kH~ zZLQw;tbr%i2xio?^APtNRwk){v5Ed}P$XFgofmX*zLE-e49$nAo^R1wVY;_y>WY-i z^ca!;v((#(tiiiFEV1QIhmEArGdx;+ARI_mWDTlF;#vYhj8{59)Y0$y^^$ zm7hCb2CydDx{FV~_;HUhN`hi@`+wU5n(<-7f<4je*BBA{Y}!t?k!) zzkdo@W3^~2=!iO?SKO+0VlQKO-7oxy0(i{4C@E?MnpikHx&XAIa76Nb?aVK)o9{f* ze=fPpMWw0w?h(`L&yl)6eSY2x-jb)G&!aT{jEjGr!r4@u=OR1~D})Sv(h3%GE3kyp ziBFWu?@RJ)T|QL&O_lJ*fMoVlE&0T^){m~;xtQ*y?4EE$Is@}31HUb4AP?v#2h=7T zHx#Yrnk3k;n`OKI(7Z5jE@MV4Ba>umV)62hgWB;p4`x0Jv`>P%2fIa!0o*L8ry56a+ zoBP~NFX;mJ*GK%GvAdn9i43cW~EA z-_}TMzkg&g6kRaTmLEmyGcZxGp|BTnl**Uyv_g+L42lY_JF7n;A9N!N7#LLkIW*wW z(uDR`AYyY|RX$*W*Q1b{Aa)0OF`?2(Cjrj~RxrFdY(fNwkjSHPNH@sEx;i4)Up_xK zY{D6xs>#A;6_g_Wb!HY}04veaqFd0ZdwgI>fE64&=S1mV`0ZGf{7eGMJmzQ?l)up& zvV%fPfr-(+N@qU}7E05E=D=#%bTD_&ZtvUn_VMs1Jz=I9|4HLOEr2g}3EX=Pf}ljZ z1jItkNmX%B)U1H;iKLvH{fQ)eNh@Fn-F`9|RR)^+Z#}5dNYi4$W_r2eHr10{rG{}w zLwkAsQ_{7(u9pfaTi#7{A7G2H2a~^Hkq5N|+I``ZYvwEp4{583Lie%Bb_v9_lU9*F z)}^w~+6!+Lx4d(?2b{fpdCY$S>V!-H)9reDbt2anm1!xs+8*} zyU6nEL~Xh1)>#rt+pYe@avV&Cg>CBD!mD5OWR5d-NDEb8Vij;DWLff|D|+cLwDpX1 zoXq6R6tvR4aMrk7k{h)97~OtINcL-UKfpFB?f+?fuwUIT<}f#4yNy^Tfntsy)5@41 zeIPe)<*k=`TjdLHgMJFb!;Xg`3_hZ^p5B=r8!54}dCN$D&_^>g*+#b-2j&h8H)~qcijAxLiX4BIAIFJhQ_us zG@N`L4Oc$RYv^WFXhwr~r}%)7i@*J%#G`Je6Jg1@M<-{XkX}g{Slc!PGBql{r@aOB zZ{L&KtYDD{M$zRcpVg&aO&J@ts#cnR`khT?sK9wbj$SQWoK8V5w>8_TdR6KWqyeYqWAIqvc3uFtl&aa5Gdxb^OvSA)zQB}@SWdXE|^>B2WEGU8t~UfO>3|G zaI^f0)sr-~uBiNP#Ud_nBi0NRE=6QmzHmmC(dd#ouFXf%2j+KoQHN`ubO8 zky1JextkS0y}%1QgnfqPW@AhHmL;G2IUE_q<^AM_EQBVsuy3f6pcz!g!G3Eg^#_bZja2endj&S(G|V&n>#(bR8Su)q3cDE(-|@*jfdhuyloB*Ya8y zOD_qQ$iguzVy7M(nEd^)p?7U-@XM`$_uvTkXHxsQu%i!38X;d~WcKwzai5p1w8ySG z(@H*vy(ao^@$Mwv!GHPBwRMl>el+#Y6cAmk zx#&#a2ore0NzVU{GN(?Bb{^1CFnw|J#RMgZF{wvgwb_2R{MjZGEREg|Uf}YhV`4CV z_RH&@mF{lY_zI~Df5ODIqAq6Mi+N7w_YQvinf{F`K~x59E)xhW;ud8WeP40Hr|8j~ zitq2APy=suuwLlkbvsAWqE-2$DsgRlF83B$sxBu513xi^q zG)1S&xey8?7cHx;?_^!=I^QF;Hw|uB?Xxq7sb_Osh$Jumqkxqt8udI*XX6&05SElG zD*_tG!){OmY$R^It-syBAGs;T{8A_4T|Msw{Y$4uxmT@iOqVQOuG@BNxqjiYP9hU_ z(*#;fj{&A4lJRrPS}0YsOlOdfj+<6zXNNM6Sd{h!!x_iJkFC&fdo`bTriUV@uG=(^ zV}u`{^1Yy@mQU;8beNk*5pG1^SaU(Ixd7N4GAM|aOr&1C+b5%(T|FHW=yE9NpV_u{Z(hNz zrVwrN*Kqyz8d=5iNcbddQVjBkAxNPCE#r`CHC6J3VHiO13V+X;b)#HEyy0)*F|!*B zO{bmpw+Q;S0zICwC4dD$IZ+L8j|t7oK@n`TR(5p?TrXg1EkL zVm%LjqE|(9;{fDQUes)oW+_;d)c!?AILWdx-Bi~QUqe-}D(Wn$&WGGoh1>ToX z2CV3WxI*=EC5-Sb#k&dBhRO%t6Q1II`1i`4kEaiuBBx)XesM5N`i^IBK}J<7bD?@V zcScPEj1+bvSx#drxppqBE!+Ffyzp{oR8rFD-z3{_(wiNLmN!80+pEbz7kL1t{=JwZ z%lfL5bG`8pJ*eQ4b3Ye7bQ1jnK2a(abi`t(u)m^nr$bj6|B(Hdc4Fsf_%&GhcIvTokQ1Lq5^5H_WzS05LUZGv=TGsoo!sc{U1pq<@aP6`Tr3XcTu;}9mdV&yMXb`(BqG0*ernH8#2oLRYXQ~w92uHof!=ATcwHaoi)bufug0q7Ssj&G3#!Aj! zi|5>$9H$RH7tB7@Qm!L*H^!&^M|N6sl`S@i&r84gYCksAl=-Io4XIbFE!Rq}^5jnJ zLmfDC$C`0pY+#DuTs-<&1vJ*`Vf!Dgs8N?Mv&u}OlMGhNr!orV5_4*F63+q*JshUa ziL2_|GK>ExplyYa}Q_Si$-p{<;@vD8aA?O;dsh6KJvy2Ho9M_xcV`99B|py zQvDR{3lD4Kl+g@m!mM;zt3?VxgS4#&XhW)%xmQ*q-pYb}yEA5UBz8PlpScHqy~>Op zA4EFCID7_A%*qx!RE2R}N~>MN;@YbDBs8Rwx#bS2ZF?-p?1h5&Xv+(Q<1wpWCeN#- zM4yeP#(?+zHDf+vUZwE=NTFolRYhZGgKRs6a5LNv{471)sSire;{ROp?eWv{b$dbm zve=;i)3Vp&2S@Ru>pS72H^1o)`K0qP^1sRb1AI0^7vk~q?UQP2aoRRb(cZZ~E!wId zBQ^}kKPvnr*p-6J8H*wx16f;%x0sV7>4aHav}ge4?vryXLCmf9DDC#biET#BJ|2M| zAM|bV=a9eYmCU|%EBE4hzB(oR>4-nSt2yDc;nt^InI(?5DH0WJ%g+nE%nMp}&zSx` zpG7qDoNN^W_ew7IuYn*h&bkb$V8kco2dT~qj}JZW8FF|9z1&;f{9ruy>0`cekB-^G zJ0{&Vk?Y?ZPy_ePVY|TTTako~$LjgDX?=~lvD6x7LaG0Jy-JZas~p7d0-&nbiY-t# zl_tr^WadG0(zXvkM7E-%6(WpeMpB#Zv5f%%MFodJ5Gk1G7b& zcSE>@LdmN}V=n%S$D^bVefnU$ot@M&g+KTaXQsK0D{>F1iqc$Gjn2AzvH1z5q}GkNy?hEfJQBVh@N7?51#i<@VWr=aYZa)#QxhXe z)#)ojGxaRc1%eDZ5!MnDZPAOx@1cZbB$WY2ZS2HC<>I4`|6#;jS^B3I1o%k)XjAg( zhtSdWa%@RsTLG|UP>2Fwobk^Af4$4`^~?!(n(*@I9UUelfz*f)45AWQrAZF<3f{Py zl;@Th-y|QLt6vQAvQ-%gy0xD*pc$aSscfB_jmGU*LG*sD@H3-NVLhfZ6yy`sSZl7R zc}>WGD)9Y|4b5enDu|#sEp18uclOkPOVTOBn~LpaaAu!rn&0$JUjX{}B}i{-tKNBU z=AZXY9m7=z4kmn4V%Wk}GZdN!{=X9B8wFXPt$XLsFUuQ;G)lM2bgr zK$1H`@7A|F{H(Wabbn_1ls`wkI$T_HO>&s->@xdHG>*VO8#?!Odq;1uPk7TiaRQG} zaq(n&oMUSKGIGx#4mQI-es9K>DJOVz9(KJgS0*_xFnuP2b!I9jd!)$CjK7>ViFxaV zMHv3CFu6I#9Mm4Bk|wLUXatHTpk6j#?d{h+wJjVKJvuB8mh* zzmQcrZhaLzj|Kp(T7lKU<^g!sVc5Kp?0I6jT8mu6^iA_dE?}7530GbZpWA4-S@)j; zj_9ZkkANH4nFb2{;ZX<$aYi!E|(c3ihV4jgReyu;S&0idrIL;;7gsRca-L?c2f_<10Y0(Up6o;# zB*@5b#|2}S02Gx0v}r9*DSCCki7BnaYXBjED-=qR?@9gow{JFQe!eM98PkG%_lNTl zV7^fG^S@WK9_PpZ==59?PT4*ypaU|nX?F1Oxq;esAz7!!g^QWxQ;*}dx)Y%6ye?P3 z=$Xde75!MzSXJkDXn9a3`-|Hix@ZZ>{!uzM$KAT(M1Ul+xZPXxwM|j655(^V?a`>G z`mDdrc5kS-qdVJD=GrI{#baUaVSB(8s`$Ge@u5S-dE=oz?ENzAMoyijK^Vgy8nH?I zyYWZ-^+09g4t0BHk$hvzv>EX_;&;=^oq}!|(zRdQcv^Q6U7AcVs)akDF=SjnmJ8ow z^Q;ycT}o&9g>v}2etJoi@aneH%cc&ogRjXN{=z-_n^!DV`LTtwiK@Bm6pa9vzGT48 zEaC}iZ1eVYL)9PXL+o3tx>8C@;h@F$@>M_Q$tF=My6g(6#Bu= z_a}vSJtls}Md#*^NqCAQgAt*pLU90%#y}tx=+0uXn&W*ehYqPnGdvd$Ig&keO-L7Y z+57X9w+TUkc)V+XLUplg?Zn->nEu(Dut3Kc=-29YEEu#tq0_Ga;PYMp1=WtZTfHM; zDsuhu?xq!DL)z(snzQSb>ayBXzA&&37N%_t)d5Lo1~JKDQH#KNy%$A9^l7dx%N z&MndSls%!}y=h)&;bstGu{c4(HG9t>L;=)dZdXXQUm)@=EW;c}d;hvI$e)7hmJj?0 z7lhxxVCzW=_$ihU_sGKwOxD(C$m`NqR8!!sWJ!0V_f5@oV zuEKAc*U7?2Bfygp84xt+ieB~X=c#>gTD|Xr>G+T2RH%MKnzOqv4nHle$-5s=kSz2JYPA=n*M-J|f!ngJw-NMU+lT~OolNe0<&wiu@rR@pP zIFJ5nt$tVH$MX+n_pfvH4VMZVET4N%ZJ$wRgMT+<`>6feUc^V#4`mo!8+cy(?z{BCl6&JeLL!ZFVnvMIWojZ}+R4 zM5)c}irTouloJkH>Rv+DRo!rB$-JAjR}rF6c7IGNCyM4gwU@ai28njTq3}%&`|0sK zH!X{u-f7BxTdaV-Nj%ps{$B1iQ|llW}2nL z&(ed8_xi8>slsk9^xfs|YnN8N!1@(S%=m*KLRCv>S(_?UFFxz@I!&k=9J1|5_CMHE zfeU9|zmvd>+Qv0cWwtPfn2XU(pF^+4pQm@3_XV?PmRt7fk9{}F765(Mcn1QXwz34- zF!D7GiH$esS*tSC#$T;A9j*T0IwCzgzy+S5yfOyR?hVCpjm`_Kzd0W(c!;pB-5LSc z7PF!}`519UD?zx{1PfsoTN}#X9rrpr>o<2^GrPX}$L{I3&4o>!y7cq<=kIe1|FrL0 z?z9DfdRe?V{UiQNCr0zJrKX%K z?{dmmii&0+#Y5eWUnO3^5H^>#o*6A%<)w>cw{&NeHg=4KxI<#@xJK zh}7ygX@gE&TI0TbZRPFU_^u)VGJ_xA=tJHwqesX8rpq3(h7(}PSjQ%QQu=UXP!`XM zqUGu?^RI{PqWJhb!Y}iU9i0lTz~n`(7LRH2Hw2&ZQnYEs%xz?uV>HD+B=P(Q+++L- z2rTh4{ETDe9tU0364qk4@+EYMj9=bI0x=0l`oenre$EnAqtOM?{?i1O)tiUE8s|Nw z+)M1f^N-DIwZQ5<#>aZQ_tf*c4m-XTNZ$e&mY!vm>1U3&IBMVFnXbA%5R<`9M9J5S zug4GrF+b1m^x7Sc5cJzlPj5tU1~9O4ygj$h(Jk%xx6aN0KVKE>jG6;@)nDZ@?)iYq zVdtR#IF32yEgoL4q{=fMK1QvxO7IGK%=3lOz+cfGo?b&Sq?L=B7aOiKy1GXuLb*mz z4G9ZG%q;xtM5m-Ke+Ex_PQ%XTqO^;X?{b?^o4+eWkXDxO?0iETk}ivQYnpX2h0!@h z3RQNGHHi}XGKh&igEu><&I-5t@%0%wmJ2?w1s&}$zD~r@YGlb#aiX_$dZqJE$9NiO zK+J=^BOg^AxlZ@aCT9Dd6@H3@kLJd_jMmXl{krXW zE%oL6Lj6?q5yalM>GjNYsljTg4xQdXydQm$hsKtyTo5_%b2!h0HiU_~%JqN=)OnRL zZJViGZ!s@;e@ypYZNB@Ik5Ujk9Gb}CRC?4ljxc3|uh*3ga52{4@}*(4koVSn zhB7#awM=KhgT*#8J1VW4(2?)>FZOL(j7Xi#aRuUS*UbcQ>f9>_zV57HwZrEO474rE zb}eQ8goC6jj~W9TUKa&+%^M?|-`h)RgirH+|62UaK)UuI4mO4fK4NZQTz#r`<_&G; zx94uHT3+*`n@5X(HtzhrCNSK7`mh8n{=0rwvsJmjo|W4q7-AgqKJ@xn%)ad_YUJ%W zA3uW+Bc5|zHe0-(f)}arIc(ju{}2nZA2i|-Aj(Dn}99RP_vYdCLUSRgAN5h#hay3)LCdkFCvz!M-8$ZE03MsoP6+%%n36ZtL0~$0|7W#5nXtbO49iw2l%?O_+DgF zH$8ABst=q!UqyPe1=BR1v^C^8lO4@LCCnIT(Srt-#qyZKsnRJ!(Gepy(rNY`ZOD4eAnw|h>h-%+1Y;n9yy?k zZ$4W?=$_EMpOFvqtjG5g9wM8vA{(^JKRxhSuV?r5yB$gwuxRH4u+}{^!@vEH6Z^v(C18eHB)fd5aKff%e9`(1I#dv8!hFyqRcJ8=$DugJMp(3~SJ7bEX#R|s~rl{8eMx1}B zXEmw#S{&=FG?I7fL|!mAq$3m&su3s|LiDo*rQuVM;g*DxZ?61OcDY_f5o&gVA!U}= z9$C`10xDHhuaJW~pllw{OaZmE3FutXtGuA8SI+YGr(CNE}bZ z3R|^(0veSd22-NuZ9mQcAgjsdapaZk)l=$Bm)EC&hmV7-Uqy$OYE5}p%hqD6(k#%d zpuMcRCu-=4okFcvxhv`)P3*B2J9ejf3~g;A^~BU`V~)#wMw`mf16;6F{DA>jv-g7! zwl@rrtagfBVGIR`Dn)^`!Cx^-`<&&Pm@`tju(szN@+9HKs5;d`us6D*u|s$CQ=r;G zD(4?c!0UBMdBS}qn%^4mklVr)n6qcLwNcLa#m~(>RC!#ne|k9bIj91RI=xrkexoU6 ze1qTKLS6;Af7{mDehx&}10y=(3ncgqRi)@rdCn%j9T!M zwbMpS^FsO@)^Fx`nZ68Nyq5{R()_-c{xY#?9cqG&NklCAaY`nV*C4!k`2Mnf8Ng2q zoIzV$rQHBIKtIjV+oZ(UF35x_e{7qaHNUiJ+cCCeu%s`{6a9{zWw{e)_0=iu@Tzt#up<_jGkAY^WUcR9-;FpEZe0hOO!c45?bfLp z&(QsoW#Ll%owlyQ7&1R^;E&8Rm%?!$wRJ_=^mqQ_h;EBf{QFPXcfN+L-x~%F_@pj_ z^^>K|K>;^)E=n+~n^UHp|NY&!&0%ZdG{o6#R91a`MsWrK2)x-5>;41n-*34c9p)ys6OR zjR-hx@Yy9hLKONgAa@ce4Y8Z`bjlc z-VZk58xDmJrD7T(4KF@@eI<3j(?4Xkt>>=2_vp%A4L3}wS0%B>U8onwMX~OT-7&V# z*ad6S%5YcU?IMwvX@>Q_i$@b;bmxy6e?F4phYr;p`H!3Bdz5zR6i@G>4U8EH5IFmS z{p{+q+d|4~`v$mh?(w^G`llZ0)Mu_^>^|>zo81zXL$g7KfWX-LLD1sr^T^6PEFg1J z_#s4@n`h(HDPy%!=3_mm9+p@TPVauIZV6290|H%#i&YNeASdp zLnGceJ^5#Mxh4CR4OtED9tWY}wElafLMX;8#XN?Yy!jy{k$o4$W*}_hDa`SfDS|Pi z1(cjGOfZ*p0E(X2@VE0Sl>%;zOC+bEf@qghFohV(7#Ec29^yOGOIh)#f;D#^o=*8F z%F0)E3E{;SHoQx989zz81isA-YTMRz-(>Im{-5<^+4t@DPC^(&(s`r@qn=hoR^cKh z9o{323MM3`e|*+#7&D^TNEZmv*^1J$4?FMgSgk%@^R*hnL~f_E4|9rRmhGn1ug7Y= zv~e?I<<|~@B7BctzSr;nmBeM|JbWJD^W@kI;agV&}lzk^2BLwDh4m5Y^WYPXPTG0UB9X3=^ zK5YY6c66OQHSc_mK~qL|PDJJXY}W4%>bk6t&o(}6y#_oIm5PSs64j${Ws}owXxIg8 zdC>yE<_WScmrLh}u+VvM%R5$bb$AmrH@wqU^NTisUj>qW{MIiqjdpgzTOzBAAGb;O z|4f97#<6r8o$#^>iogK*9Kx<~t@JJ#BM#nFl*evO14pJ;3wpJpB$n2OP|q-@}es~otAzfFZBcU#dgbc#l{7u9u5U2%(M zX}>MIA;qs??H~J*_#E!N9d`f`Q>1KWciknHzWmSSQdKsMy@S7>^+qBzXFh zVjxjbm42I6cfb9jV{7p&6tuD+xZPO}%4c*j(U&Cin067m+OS_&tiud%6wr<~>ANKH z#N*gu)TRA#Cs40W^8wH=?I!X?_^z$R<{UD>Mlw_Rt+-ILBla2Rt|Rp#wbaS~@EH=@ zbB=?ZxX7o!0w}iQpFl4ejfs*2Rre;Rs`_1x*L^FHG zs+imDJN$BfgRWcHNnWr-_s^9n22`ZzU@h7tX{Qv?*{5-5D3aJV&bub=vz6awKqw9l z6OmcWcQF|JY`9xDVH1+=`pzf$A||E_21W-V&{h8g?Q{s{H5m zV@Td;9JS2_yd7@1#^^9Y*?;|A`SStC|Gx>wo<;S~Q z&i(R0-TB8*;KUtz&I$NZ12XY7sHWvNvzo)n8kSEAFW{zm)W>edV07+L9B!9vH{xOm zIK$!H(KXG5+{oK67wuGCR@BJ`+BEGrkZ55!TWm?IshF+o+~)E8(`U8PUF2KjbNClj z&wNKe0_$A~vaGFpVf>s4oPm^{9p!W4unBY2_2l8vy_hu0m~Hut3G!Og0A_WhD;cgP`F zvn`{cb~5|LCEuWUhOfCTW4(>gC2G8Ju84o4eZ*7$<5{=y29GIKeF0C``j|Z>hQg%D zT(IhlXSKd|LimP(^Jl?`ICCE`-gn?9&?0P6@~yI1|7!dkm3QUnmxsitrt8{};XhLC zc^*%Fk(A20c*-8`6Ude0^B*$Qrst_oLscwYZ5gr(6_o7DT+;d)2@@;0P7m2|jNSVq zW+cc4T~RU#6b#-+y?u+kX#$Es@LnX-;xNU`I6V-1j{gUbd20KYeyC2k@o?Mi<=EHHgn`UU=;+svj*gX_Gl) zFW(^DlJz{ep3M;ZY1PKSS8KU7{CYC!x4`|w=9ih$-Di7ev(HV&$Ext_=0%R;&Zir& zmu{pv_-Y0dKJVqR+(rROO6&FbVst=Y#Xl^>+6ZaF|o#4#j$tD zu&ocxi1w5JJaeAIQ%1MmqHB_Dg$nvY-V}-V%ipBxXLv~HVg(vfv3GU0zlenLJ4G35 zk8b$&vm4g?0i-3y_-asY6-o~VVzA66IpjKjI;>>Jj6pwqDZ~wFKd}anAaui#D8xXX z_tL&PAId4i!(P{YkaGANjTCR7#abLgE841Q?@GV_?hQG4&a)E+I*qMDm7pp|MM`4@ zZDSn`T>6X~Gu%s=aN&MG9x^++@{(kFOa+x%=-IXPD|W62tL}#(rsUFo(uaPR5B{Va za=&{|!!}LY603~1cS?~0O=Xr_e^ovTjmG6)tbzfRkLx6#;WY;Rh?X1xqT7Cp}n%-nHAN(I3rHS$)w z#;iY>Xdt1b{KujSa9ntuJg$!ZSbZ7Lno`32L*o6<`40Cn-6I8})pBM6y3H|NM0MAb zMG~|82QcD8$OUg4=_OKImv{7npCDi1S#DD}5lQ_GFh25(#BzEEB$kKZDWuUu>#V_6 zUdc%ideIBXUjiaU`M{*Y<&KPj9&p{8=>c$bJ?fG@-eYK@SBf(-DMg?zNhGDGO?>&8 z_ZjIBC>2lj5Bcz?jN12*qEM+f?1NKQ)n$&9@L`XXn%V~ceDGVpAQe6^tMMD(Be|ZL zSA7ag7}gb35WiXDlY-wc>9oQ_ij-%N{EG5z)}y@mlu3S)%T{X`4~h^S2piY)V9nsH z8XG#NpmPZ(m60#u#ASt@{LQeGr5ZKIq%9;Kp6hDx)7hde#nCf8)F5#PQGRg{<8~3q zYWWht_=Q6Dhl4Vor74odLfs#7PhzGI=x3`K=CR)7U!R=18pO5Dj`zmBCwxvX%r8`OQXTc5S7?1DOs#QS=f zuYM*9c0g*yS&zf&+TC0DXaM z$6?lnMx2KQ5D+jbXlF6CS3K*enj2U?YHB0sR3x6OfUp38;qeVZBcC?L@@Weev%W2s zHqH{0iQK6UD$cB1lq!)v##42jjs)E!xgWBl2T{4dAC0ux)d-3X1{AgbLmeUy@jKXf z7;NDYKUp^W@*~tkoKjaMMljpZ1`*d<1jCHRX)z5v)X>Svfy`e0Ruz;{E4;TN264k# zgNEdAAN_ohOMVpYYoBNfaI#~NOG~-%K?#?&pw>fQ`PFMhz@wA$=dJ$HoQO6|hj`$0 zPI zr$IoC^1LIWT;OBBEf#>bV`kaW4NAOhqIWsynSGP2nieI`n{shnNgM*`A&>ynwad}} z?lFc@*{4#VHl-^pqpgzZZ=qHx6Z+>vbq4?S>{!)cDz~D+rjlZmbdGql7i|%5+^jYf zQ&6bB4$97wyp&7+zHVzQD?yJTSdC=nsRGqX13WQkj>VFOj!tg8)U�dt=B}&q2t~P9%t22ZLnY4>Inl&| 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

    vt>(md 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 wet#xtvb4Dij=cl;S4LRRa!L#i%b=41@aQ>dB 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 se!BA0)<{};rP)u-`iNU0)MF Date: Mon, 20 Jul 2026 16:09:39 +0000 Subject: [PATCH 25/28] Add iperf3 traffic generator for DC<->Campus gold VRF path Host containers sit idle otherwise, leaving IPFabric ARP/MAC tables and Grafana throughput graphs empty until someone manually generates traffic. Refs #55 --- scripts/README.md | 30 +++++++++++++ scripts/generate_traffic.sh | 85 +++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100755 scripts/generate_traffic.sh diff --git a/scripts/README.md b/scripts/README.md index 878dc76..1867a9b 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -133,3 +133,33 @@ default layout. data for any VTEP node — likely an Arista internal-vs-front-panel VLAN translation gap. Only affects that one decorative tooltip metric, not node/link status or traffic coloring. Tracked in #44. + +# scripts/generate_traffic.sh + +Generates real DC↔Campus traffic over VRF `gold` using `iperf3` (bundled +in the `network-multitool` image every host container runs), with a live +bandwidth dashboard. Without this, host containers sit idle and IPFabric +ARP/MAC tables, Grafana throughput graphs, and the weathermap panel stay +empty until someone manually generates traffic (see #55). + +## Quickstart + +```bash +./scripts/generate_traffic.sh +``` + +## How it works + +- Starts `iperf3 -s` on the DC gold-VRF servers: `dc-server2` + (10.34.34.102), `dc-server4` (10.78.78.104). +- Runs `iperf3 -c` from the paired campus gold-VRF hosts: `campus-host1` + → dc-server2, `campus-host2` → dc-server4 — exercising the full + DC→Core→Campus stitched EVPN Type-5 path end to end. +- Redraws a terminal dashboard every second for the run duration: server + list, and live Mbits/sec per client session parsed from `iperf3 -i 1` + output. +- On exit (duration end or Ctrl-C), kills the client processes and stops + the `iperf3 -s` processes on the DC servers — no leftover state. + +`dc-server1`/`dc-server3` (VLAN 40, VRF default, no gateway) are out of +scope — this script only exercises the routed gold VRF path. diff --git a/scripts/generate_traffic.sh b/scripts/generate_traffic.sh new file mode 100755 index 0000000..75fd9fc --- /dev/null +++ b/scripts/generate_traffic.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +# Generates DC<->Campus traffic over VRF gold using iperf3 (bundled in the +# network-multitool image every host container runs), with a live +# server/client bandwidth dashboard. Refs #55. +set -euo pipefail + +DURATION="${1:?Usage: $0 }" +if ! [[ "$DURATION" =~ ^[0-9]+$ ]] || [[ "$DURATION" -lt 1 ]]; then + echo "Duration must be a positive integer (seconds)" >&2 + exit 1 +fi + +LAB_PREFIX="clab-arista-evpn-fabric" +PORT=5301 + +# server_name:server_ip:client_name — gold VRF pairs, stitched EVPN +# Type-5 path DC -> Core -> Campus (see README Host Addressing table) +PAIRS=( + "dc-server2:10.34.34.102:campus-host1" + "dc-server4:10.78.78.104:campus-host2" +) + +WORKDIR="$(mktemp -d)" +CLIENT_PIDS=() + +cleanup() { + for pid in "${CLIENT_PIDS[@]:-}"; do + kill "$pid" >/dev/null 2>&1 || true + done + for pair in "${PAIRS[@]}"; do + IFS=':' read -r server _ _ <<<"$pair" + docker exec "${LAB_PREFIX}-${server}" pkill -f "iperf3 -s -p ${PORT}" >/dev/null 2>&1 || true + done + rm -rf "$WORKDIR" +} +trap cleanup EXIT INT TERM + +echo "Starting iperf3 servers..." +for pair in "${PAIRS[@]}"; do + IFS=':' read -r server server_ip _ <<<"$pair" + docker exec -d "${LAB_PREFIX}-${server}" iperf3 -s -p "$PORT" +done +sleep 1 + +echo "Starting iperf3 clients for ${DURATION}s..." +for pair in "${PAIRS[@]}"; do + IFS=':' read -r server server_ip client <<<"$pair" + logfile="${WORKDIR}/${client}.log" + docker exec "${LAB_PREFIX}-${client}" iperf3 -c "$server_ip" -p "$PORT" \ + -t "$DURATION" -i 1 --forceflush -f m >"$logfile" 2>&1 & + CLIENT_PIDS+=("$!") +done + +for ((elapsed = 0; elapsed <= DURATION; elapsed++)); do + clear + echo "EVPN/VXLAN lab traffic generator — ${elapsed}/${DURATION}s" + echo + echo "Servers (iperf3 -s):" + for pair in "${PAIRS[@]}"; do + IFS=':' read -r server server_ip _ <<<"$pair" + echo " ${server} (${server_ip}:${PORT})" + done + echo + echo "Clients (live bandwidth):" + for pair in "${PAIRS[@]}"; do + IFS=':' read -r server server_ip client <<<"$pair" + logfile="${WORKDIR}/${client}.log" + last_line="$(grep -E 'Mbits/sec' "$logfile" 2>/dev/null | tail -1 || true)" + bw="$(sed -E 's/.*[[:space:]]([0-9.]+ Mbits\/sec).*/\1/' <<<"$last_line")" + [[ -z "$last_line" ]] && bw="waiting..." + printf " %-13s -> %-13s : %s\n" "$client" "$server" "$bw" + done + sleep 1 +done + +wait "${CLIENT_PIDS[@]}" 2>/dev/null || true + +echo +echo "Done. Summary:" +for pair in "${PAIRS[@]}"; do + IFS=':' read -r server _ client <<<"$pair" + logfile="${WORKDIR}/${client}.log" + summary="$(grep -E 'receiver' "$logfile" 2>/dev/null || true)" + echo " ${client} -> ${server}: ${summary:-no data}" +done From 08124c8a1c5ea93c55180497b343772c728c00e2 Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Mon, 20 Jul 2026 16:31:33 +0000 Subject: [PATCH 26/28] Fix weathermap links to show both traffic directions Z side queried z_host's rx, which measures the same A->Z flow as A side's tx (same traffic, counted at each end) -- the Z->A direction was never queried by either side. Use z_host's own tx instead, so each side surfaces its own (opposite) direction. Confirmed against the iperf3 traffic generator: DC access-leaf links read ~500Kbps (ACK-only) before the fix despite ~18-20Mbps of real downstream traffic to dc-server2/4, because that flow ran leaf->access (Z->A), the unqueried direction. Campus links looked correct only by coincidence -- campus hosts are the iperf3 clients, so their upload traffic happens to run access->leaf (A->Z), the direction that was queried. Refs #57 --- configs/grafana/weathermap-dashboard.json | 4275 ++++++++++----------- scripts/generate_weathermap.py | 15 +- 2 files changed, 2141 insertions(+), 2149 deletions(-) diff --git a/configs/grafana/weathermap-dashboard.json b/configs/grafana/weathermap-dashboard.json index 34c9ea7..513c83c 100644 --- a/configs/grafana/weathermap-dashboard.json +++ b/configs/grafana/weathermap-dashboard.json @@ -73,7 +73,7 @@ "targets": [ { "refId": "A", - "expr": "min by (device) (interfaces_interface_state_oper_status{device=~\"campus-spine1|dc-spine1|dc-spine2|campus-spine2|campus-border-leaf1|dc-leaf1|campus-border-leaf2|dc-leaf4|dc-leaf3|dc-leaf5|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-leaf8|dc-leaf7|dc-access4|dc-access3|dc-border-leaf2|dc-leaf2|campus-leaf1|campus-access1|campus-leaf2|campus-leaf3|campus-access2|campus-leaf4|core1|core2\"}) * (min by (device) (network_instances_network_instance_protocols_protocol_bgp_neighbors_neighbor_state_session_state{network_instance_name=\"default\", device=~\"campus-spine1|dc-spine1|dc-spine2|campus-spine2|campus-border-leaf1|dc-leaf1|campus-border-leaf2|dc-leaf4|dc-leaf3|dc-leaf5|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-leaf8|dc-leaf7|dc-access4|dc-access3|dc-border-leaf2|dc-leaf2|campus-leaf1|campus-access1|campus-leaf2|campus-leaf3|campus-access2|campus-leaf4|core1|core2\"}) or (min by (device) (interfaces_interface_state_oper_status{device=~\"campus-spine1|dc-spine1|dc-spine2|campus-spine2|campus-border-leaf1|dc-leaf1|campus-border-leaf2|dc-leaf4|dc-leaf3|dc-leaf5|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-leaf8|dc-leaf7|dc-access4|dc-access3|dc-border-leaf2|dc-leaf2|campus-leaf1|campus-access1|campus-leaf2|campus-leaf3|campus-access2|campus-leaf4|core1|core2\"}) * 0 + 1))", + "expr": "min by (device) (interfaces_interface_state_oper_status{device=~\"dc-spine1|dc-spine2|campus-border-leaf1|campus-spine2|campus-border-leaf2|campus-spine1|dc-leaf1|dc-leaf3|dc-leaf4|dc-leaf5|dc-leaf7|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-access4|dc-access3|dc-leaf8|dc-border-leaf2|dc-leaf2|campus-access2|campus-leaf1|campus-leaf3|campus-access1|campus-leaf4|campus-leaf2|core1|core2\"}) * (min by (device) (network_instances_network_instance_protocols_protocol_bgp_neighbors_neighbor_state_session_state{network_instance_name=\"default\", device=~\"dc-spine1|dc-spine2|campus-border-leaf1|campus-spine2|campus-border-leaf2|campus-spine1|dc-leaf1|dc-leaf3|dc-leaf4|dc-leaf5|dc-leaf7|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-access4|dc-access3|dc-leaf8|dc-border-leaf2|dc-leaf2|campus-access2|campus-leaf1|campus-leaf3|campus-access1|campus-leaf4|campus-leaf2|core1|core2\"}) or (min by (device) (interfaces_interface_state_oper_status{device=~\"dc-spine1|dc-spine2|campus-border-leaf1|campus-spine2|campus-border-leaf2|campus-spine1|dc-leaf1|dc-leaf3|dc-leaf4|dc-leaf5|dc-leaf7|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-access4|dc-access3|dc-leaf8|dc-border-leaf2|dc-leaf2|campus-access2|campus-leaf1|campus-leaf3|campus-access1|campus-leaf4|campus-leaf2|core1|core2\"}) * 0 + 1))", "legendFormat": "STATUS {{device}}", "datasource": { "type": "prometheus", @@ -82,22 +82,13 @@ }, { "refId": "B", - "expr": "rate(interfaces_interface_state_counters_out_octets{device=~\"campus-spine1|dc-spine1|dc-spine2|campus-spine2|campus-border-leaf1|dc-leaf1|campus-border-leaf2|dc-leaf4|dc-leaf3|dc-leaf5|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-leaf8|dc-leaf7|dc-access4|dc-access3|dc-border-leaf2|dc-leaf2|campus-leaf1|campus-access1|campus-leaf2|campus-leaf3|campus-access2|campus-leaf4|core1|core2\", interface=~\"Ethernet1|Ethernet10|Ethernet11|Ethernet12|Ethernet13|Ethernet14|Ethernet2|Ethernet3|Ethernet4|Ethernet5|Ethernet6|Ethernet7|Ethernet8|Ethernet9\"}[5m]) * 8", + "expr": "rate(interfaces_interface_state_counters_out_octets{device=~\"dc-spine1|dc-spine2|campus-border-leaf1|campus-spine2|campus-border-leaf2|campus-spine1|dc-leaf1|dc-leaf3|dc-leaf4|dc-leaf5|dc-leaf7|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-access4|dc-access3|dc-leaf8|dc-border-leaf2|dc-leaf2|campus-access2|campus-leaf1|campus-leaf3|campus-access1|campus-leaf4|campus-leaf2|core1|core2\", interface=~\"Ethernet1|Ethernet10|Ethernet11|Ethernet12|Ethernet13|Ethernet14|Ethernet2|Ethernet3|Ethernet4|Ethernet5|Ethernet6|Ethernet7|Ethernet8|Ethernet9\"}[5m]) * 8", "legendFormat": "{{device}} {{interface}} tx", "datasource": { "type": "prometheus", "uid": "cfrlusac89se8a" } }, - { - "refId": "C", - "expr": "rate(interfaces_interface_state_counters_in_octets{device=~\"campus-spine1|dc-spine1|dc-spine2|campus-spine2|campus-border-leaf1|dc-leaf1|campus-border-leaf2|dc-leaf4|dc-leaf3|dc-leaf5|dc-border-leaf1|dc-leaf6|dc-access1|dc-access2|dc-leaf8|dc-leaf7|dc-access4|dc-access3|dc-border-leaf2|dc-leaf2|campus-leaf1|campus-access1|campus-leaf2|campus-leaf3|campus-access2|campus-leaf4|core1|core2\", interface=~\"Ethernet1|Ethernet10|Ethernet11|Ethernet12|Ethernet13|Ethernet14|Ethernet2|Ethernet3|Ethernet4|Ethernet5|Ethernet6|Ethernet7|Ethernet8|Ethernet9\"}[5m]) * 8", - "legendFormat": "{{device}} {{interface}} rx", - "datasource": { - "type": "prometheus", - "uid": "cfrlusac89se8a" - } - }, { "refId": "D", "expr": "count by (device, vlan) (network_instances_network_instance_fdb_mac_table_entries_entry_vlan{device=~\"campus-leaf1|campus-leaf2|campus-leaf3|campus-leaf4|dc-leaf1|dc-leaf2|dc-leaf5|dc-leaf6\"})\n* on(device, vlan) group_left(vlan_to_vni_state_vni)\nmax by (device, vlan) (interfaces_interface_arista_vxlan_vlan_to_vnis_vlan_to_vni_state_vni{device=~\"campus-leaf1|campus-leaf2|campus-leaf3|campus-leaf4|dc-leaf1|dc-leaf2|dc-leaf5|dc-leaf6\"})", @@ -113,62 +104,6 @@ "version": 14, "id": "evpn-vxlan-fabric-weathermap", "nodes": [ - { - "id": "campus-spine1", - "label": "campus-spine1", - "position": [ - 1600, - 80 - ], - "isConnection": false, - "useConstantSpacing": false, - "compactVerticalLinks": true, - "padding": { - "horizontal": 12, - "vertical": 6 - }, - "colors": { - "font": "#ffffff", - "background": "#22252b", - "border": "#5794F2", - "statusDown": "#F2495C" - }, - "nodeIcon": null, - "statusQuery": "STATUS campus-spine1", - "nodeStatusColorTarget": "border", - "statusValueMappings": [ - { - "value": 0, - "color": "#F2495C" - }, - { - "value": 1, - "color": "#73BF69" - } - ], - "anchors": { - "0": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "1": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "2": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "3": { - "numLinks": 6, - "numFilledLinks": 0 - }, - "4": { - "numLinks": 0, - "numFilledLinks": 0 - } - } - }, { "id": "dc-spine1", "label": "dc-spine1", @@ -281,6 +216,62 @@ } } }, + { + "id": "campus-border-leaf1", + "label": "campus-border-leaf1", + "position": [ + 1450, + 260 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": true, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "STATUS campus-border-leaf1", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 5, + "numFilledLinks": 0 + } + } + }, { "id": "campus-spine2", "label": "campus-spine2", @@ -338,10 +329,10 @@ } }, { - "id": "campus-border-leaf1", - "label": "campus-border-leaf1", + "id": "campus-border-leaf2", + "label": "campus-border-leaf2", "position": [ - 1450, + 1555, 260 ], "isConnection": false, @@ -358,7 +349,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "STATUS campus-border-leaf1", + "statusQuery": "STATUS campus-border-leaf2", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -384,11 +375,67 @@ "numFilledLinks": 0 }, "3": { - "numLinks": 0, + "numLinks": 1, "numFilledLinks": 0 }, "4": { - "numLinks": 5, + "numLinks": 4, + "numFilledLinks": 0 + } + } + }, + { + "id": "campus-spine1", + "label": "campus-spine1", + "position": [ + 1600, + 80 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": true, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "STATUS campus-spine1", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 6, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 0, "numFilledLinks": 0 } } @@ -457,10 +504,10 @@ ] }, { - "id": "campus-border-leaf2", - "label": "campus-border-leaf2", + "id": "dc-leaf3", + "label": "dc-leaf3", "position": [ - 1555, + 290, 260 ], "isConnection": false, @@ -477,7 +524,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "STATUS campus-border-leaf2", + "statusQuery": "STATUS dc-leaf3", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -507,7 +554,7 @@ "numFilledLinks": 0 }, "4": { - "numLinks": 4, + "numLinks": 3, "numFilledLinks": 0 } } @@ -568,62 +615,6 @@ } } }, - { - "id": "dc-leaf3", - "label": "dc-leaf3", - "position": [ - 290, - 260 - ], - "isConnection": false, - "useConstantSpacing": false, - "compactVerticalLinks": true, - "padding": { - "horizontal": 12, - "vertical": 6 - }, - "colors": { - "font": "#ffffff", - "background": "#22252b", - "border": "#5794F2", - "statusDown": "#F2495C" - }, - "nodeIcon": null, - "statusQuery": "STATUS dc-leaf3", - "nodeStatusColorTarget": "border", - "statusValueMappings": [ - { - "value": 0, - "color": "#F2495C" - }, - { - "value": 1, - "color": "#73BF69" - } - ], - "anchors": { - "0": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "1": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "2": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "3": { - "numLinks": 1, - "numFilledLinks": 0 - }, - "4": { - "numLinks": 3, - "numFilledLinks": 0 - } - } - }, { "id": "dc-leaf5", "label": "dc-leaf5", @@ -687,6 +678,62 @@ } ] }, + { + "id": "dc-leaf7", + "label": "dc-leaf7", + "position": [ + 710, + 260 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": true, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "STATUS dc-leaf7", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 1, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 3, + "numFilledLinks": 0 + } + } + }, { "id": "dc-border-leaf1", "label": "dc-border-leaf1", @@ -918,118 +965,6 @@ } } }, - { - "id": "dc-leaf8", - "label": "dc-leaf8", - "position": [ - 815, - 260 - ], - "isConnection": false, - "useConstantSpacing": false, - "compactVerticalLinks": true, - "padding": { - "horizontal": 12, - "vertical": 6 - }, - "colors": { - "font": "#ffffff", - "background": "#22252b", - "border": "#5794F2", - "statusDown": "#F2495C" - }, - "nodeIcon": null, - "statusQuery": "STATUS dc-leaf8", - "nodeStatusColorTarget": "border", - "statusValueMappings": [ - { - "value": 0, - "color": "#F2495C" - }, - { - "value": 1, - "color": "#73BF69" - } - ], - "anchors": { - "0": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "1": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "2": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "3": { - "numLinks": 2, - "numFilledLinks": 0 - }, - "4": { - "numLinks": 2, - "numFilledLinks": 0 - } - } - }, - { - "id": "dc-leaf7", - "label": "dc-leaf7", - "position": [ - 710, - 260 - ], - "isConnection": false, - "useConstantSpacing": false, - "compactVerticalLinks": true, - "padding": { - "horizontal": 12, - "vertical": 6 - }, - "colors": { - "font": "#ffffff", - "background": "#22252b", - "border": "#5794F2", - "statusDown": "#F2495C" - }, - "nodeIcon": null, - "statusQuery": "STATUS dc-leaf7", - "nodeStatusColorTarget": "border", - "statusValueMappings": [ - { - "value": 0, - "color": "#F2495C" - }, - { - "value": 1, - "color": "#73BF69" - } - ], - "anchors": { - "0": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "1": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "2": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "3": { - "numLinks": 1, - "numFilledLinks": 0 - }, - "4": { - "numLinks": 3, - "numFilledLinks": 0 - } - } - }, { "id": "dc-access4", "label": "dc-access4", @@ -1142,6 +1077,62 @@ } } }, + { + "id": "dc-leaf8", + "label": "dc-leaf8", + "position": [ + 815, + 260 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": true, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "STATUS dc-leaf8", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 2, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + } + }, { "id": "dc-border-leaf2", "label": "dc-border-leaf2", @@ -1261,6 +1252,62 @@ } ] }, + { + "id": "campus-access2", + "label": "campus-access2", + "position": [ + 1922, + 440 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": true, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "STATUS campus-access2", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + } + }, { "id": "campus-leaf1", "label": "campus-leaf1", @@ -1324,125 +1371,6 @@ } ] }, - { - "id": "campus-access1", - "label": "campus-access1", - "position": [ - 1712, - 440 - ], - "isConnection": false, - "useConstantSpacing": false, - "compactVerticalLinks": true, - "padding": { - "horizontal": 12, - "vertical": 6 - }, - "colors": { - "font": "#ffffff", - "background": "#22252b", - "border": "#5794F2", - "statusDown": "#F2495C" - }, - "nodeIcon": null, - "statusQuery": "STATUS campus-access1", - "nodeStatusColorTarget": "border", - "statusValueMappings": [ - { - "value": 0, - "color": "#F2495C" - }, - { - "value": 1, - "color": "#73BF69" - } - ], - "anchors": { - "0": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "1": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "2": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "3": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "4": { - "numLinks": 2, - "numFilledLinks": 0 - } - } - }, - { - "id": "campus-leaf2", - "label": "campus-leaf2", - "position": [ - 1765, - 260 - ], - "isConnection": false, - "useConstantSpacing": false, - "compactVerticalLinks": true, - "padding": { - "horizontal": 12, - "vertical": 6 - }, - "colors": { - "font": "#ffffff", - "background": "#22252b", - "border": "#5794F2", - "statusDown": "#F2495C" - }, - "nodeIcon": null, - "statusQuery": "STATUS campus-leaf2", - "nodeStatusColorTarget": "border", - "statusValueMappings": [ - { - "value": 0, - "color": "#F2495C" - }, - { - "value": 1, - "color": "#73BF69" - } - ], - "anchors": { - "0": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "1": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "2": { - "numLinks": 0, - "numFilledLinks": 0 - }, - "3": { - "numLinks": 2, - "numFilledLinks": 0 - }, - "4": { - "numLinks": 2, - "numFilledLinks": 0 - } - }, - "tooltipMetrics": [ - { - "label": "VNI campus-leaf2 50", - "query": "VNI campus-leaf2 50", - "units": "MACs" - } - ] - }, { "id": "campus-leaf3", "label": "campus-leaf3", @@ -1507,10 +1435,10 @@ ] }, { - "id": "campus-access2", - "label": "campus-access2", + "id": "campus-access1", + "label": "campus-access1", "position": [ - 1922, + 1712, 440 ], "isConnection": false, @@ -1527,7 +1455,7 @@ "statusDown": "#F2495C" }, "nodeIcon": null, - "statusQuery": "STATUS campus-access2", + "statusQuery": "STATUS campus-access1", "nodeStatusColorTarget": "border", "statusValueMappings": [ { @@ -1625,6 +1553,69 @@ } ] }, + { + "id": "campus-leaf2", + "label": "campus-leaf2", + "position": [ + 1765, + 260 + ], + "isConnection": false, + "useConstantSpacing": false, + "compactVerticalLinks": true, + "padding": { + "horizontal": 12, + "vertical": 6 + }, + "colors": { + "font": "#ffffff", + "background": "#22252b", + "border": "#5794F2", + "statusDown": "#F2495C" + }, + "nodeIcon": null, + "statusQuery": "STATUS campus-leaf2", + "nodeStatusColorTarget": "border", + "statusValueMappings": [ + { + "value": 0, + "color": "#F2495C" + }, + { + "value": 1, + "color": "#73BF69" + } + ], + "anchors": { + "0": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "1": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "2": { + "numLinks": 0, + "numFilledLinks": 0 + }, + "3": { + "numLinks": 2, + "numFilledLinks": 0 + }, + "4": { + "numLinks": 2, + "numFilledLinks": 0 + } + }, + "tooltipMetrics": [ + { + "label": "VNI campus-leaf2 50", + "query": "VNI campus-leaf2 50", + "units": "MACs" + } + ] + }, { "id": "core1", "label": "core1", @@ -1740,621 +1731,26 @@ ], "links": [ { - "id": "campus-border-leaf2-Ethernet11--campus-spine1-Ethernet6", - "nodes": [ - { - "id": "campus-border-leaf2" - }, - { - "id": "campus-spine1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "campus-border-leaf2 Ethernet11 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "campus-spine1 Ethernet6 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "campus-leaf1-Ethernet11--campus-spine1-Ethernet1", - "nodes": [ - { - "id": "campus-leaf1" - }, - { - "id": "campus-spine1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "campus-leaf1 Ethernet11 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "campus-spine1 Ethernet1 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "campus-leaf2-Ethernet11--campus-spine1-Ethernet2", - "nodes": [ - { - "id": "campus-leaf2" - }, - { - "id": "campus-spine1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "campus-leaf2 Ethernet11 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "campus-spine1 Ethernet2 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "campus-leaf3-Ethernet11--campus-spine1-Ethernet3", - "nodes": [ - { - "id": "campus-leaf3" - }, - { - "id": "campus-spine1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "campus-leaf3 Ethernet11 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "campus-spine1 Ethernet3 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "campus-leaf4-Ethernet11--campus-spine1-Ethernet4", - "nodes": [ - { - "id": "campus-leaf4" - }, - { - "id": "campus-spine1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "campus-leaf4 Ethernet11 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "campus-spine1 Ethernet4 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf1-Ethernet11--dc-spine1-Ethernet1", - "nodes": [ - { - "id": "dc-leaf1" - }, - { - "id": "dc-spine1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf1 Ethernet11 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine1 Ethernet1 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf4-Ethernet11--dc-spine1-Ethernet4", - "nodes": [ - { - "id": "dc-leaf4" - }, - { - "id": "dc-spine1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf4 Ethernet11 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine1 Ethernet4 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf3-Ethernet11--dc-spine1-Ethernet3", - "nodes": [ - { - "id": "dc-leaf3" - }, - { - "id": "dc-spine1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf3 Ethernet11 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine1 Ethernet3 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf5-Ethernet11--dc-spine1-Ethernet5", - "nodes": [ - { - "id": "dc-leaf5" - }, - { - "id": "dc-spine1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf5 Ethernet11 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine1 Ethernet5 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-border-leaf1-Ethernet11--dc-spine1-Ethernet9", - "nodes": [ - { - "id": "dc-border-leaf1" - }, - { - "id": "dc-spine1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-border-leaf1 Ethernet11 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine1 Ethernet9 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf6-Ethernet11--dc-spine1-Ethernet6", + "id": "dc-leaf6-Ethernet12--dc-spine2-Ethernet6", "nodes": [ { "id": "dc-leaf6" }, { - "id": "dc-spine1" + "id": "dc-spine2" } ], "sides": { "A": { "bandwidth": 1000000000, - "query": "dc-leaf6 Ethernet11 tx", + "query": "dc-leaf6 Ethernet12 tx", "labelOffset": 55, "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, - "query": "dc-spine1 Ethernet6 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf7-Ethernet11--dc-spine1-Ethernet7", - "nodes": [ - { - "id": "dc-leaf7" - }, - { - "id": "dc-spine1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf7 Ethernet11 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine1 Ethernet7 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-border-leaf2-Ethernet11--dc-spine1-Ethernet10", - "nodes": [ - { - "id": "dc-border-leaf2" - }, - { - "id": "dc-spine1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-border-leaf2 Ethernet11 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine1 Ethernet10 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf2-Ethernet11--dc-spine1-Ethernet2", - "nodes": [ - { - "id": "dc-leaf2" - }, - { - "id": "dc-spine1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf2 Ethernet11 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine1 Ethernet2 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "campus-leaf1-Ethernet12--campus-spine2-Ethernet1", - "nodes": [ - { - "id": "campus-leaf1" - }, - { - "id": "campus-spine2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "campus-leaf1 Ethernet12 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "campus-spine2 Ethernet1 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "campus-leaf2-Ethernet12--campus-spine2-Ethernet2", - "nodes": [ - { - "id": "campus-leaf2" - }, - { - "id": "campus-spine2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "campus-leaf2 Ethernet12 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "campus-spine2 Ethernet2 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "campus-border-leaf1-Ethernet11--campus-spine1-Ethernet5", - "nodes": [ - { - "id": "campus-border-leaf1" - }, - { - "id": "campus-spine1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "campus-border-leaf1 Ethernet11 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "campus-spine1 Ethernet5 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "campus-border-leaf1-Ethernet12--campus-spine2-Ethernet5", - "nodes": [ - { - "id": "campus-border-leaf1" - }, - { - "id": "campus-spine2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "campus-border-leaf1 Ethernet12 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "campus-spine2 Ethernet5 rx", + "query": "dc-spine2 Ethernet6 tx", "labelOffset": 55, "anchor": 3, "dashboardLink": "" @@ -2389,7 +1785,7 @@ }, "Z": { "bandwidth": 1000000000, - "query": "campus-border-leaf2 Ethernet10 rx", + "query": "campus-border-leaf2 Ethernet10 tx", "labelOffset": 55, "anchor": 3, "dashboardLink": "" @@ -2405,26 +1801,26 @@ "showThroughputPercentage": false }, { - "id": "campus-border-leaf1-Ethernet13--core1-Ethernet3", + "id": "campus-border-leaf1-Ethernet11--campus-spine1-Ethernet5", "nodes": [ { "id": "campus-border-leaf1" }, { - "id": "core1" + "id": "campus-spine1" } ], "sides": { "A": { "bandwidth": 1000000000, - "query": "campus-border-leaf1 Ethernet13 tx", + "query": "campus-border-leaf1 Ethernet11 tx", "labelOffset": 55, "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, - "query": "core1 Ethernet3 rx", + "query": "campus-spine1 Ethernet5 tx", "labelOffset": 55, "anchor": 3, "dashboardLink": "" @@ -2440,131 +1836,26 @@ "showThroughputPercentage": false }, { - "id": "campus-border-leaf1-Ethernet14--core2-Ethernet3", + "id": "campus-border-leaf1-Ethernet12--campus-spine2-Ethernet5", "nodes": [ { "id": "campus-border-leaf1" }, { - "id": "core2" + "id": "campus-spine2" } ], "sides": { "A": { "bandwidth": 1000000000, - "query": "campus-border-leaf1 Ethernet14 tx", + "query": "campus-border-leaf1 Ethernet12 tx", "labelOffset": 55, "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, - "query": "core2 Ethernet3 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf1-Ethernet12--dc-spine2-Ethernet1", - "nodes": [ - { - "id": "dc-leaf1" - }, - { - "id": "dc-spine2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf1 Ethernet12 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine2 Ethernet1 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-access1-Ethernet1--dc-leaf1-Ethernet1", - "nodes": [ - { - "id": "dc-access1" - }, - { - "id": "dc-leaf1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-access1 Ethernet1 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-leaf1 Ethernet1 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf1-Ethernet10--dc-leaf2-Ethernet10", - "nodes": [ - { - "id": "dc-leaf1" - }, - { - "id": "dc-leaf2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf1 Ethernet10 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-leaf2 Ethernet10 rx", + "query": "campus-spine2 Ethernet5 tx", "labelOffset": 55, "anchor": 3, "dashboardLink": "" @@ -2599,1022 +1890,7 @@ }, "Z": { "bandwidth": 1000000000, - "query": "campus-spine2 Ethernet6 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "campus-border-leaf2-Ethernet13--core1-Ethernet4", - "nodes": [ - { - "id": "campus-border-leaf2" - }, - { - "id": "core1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "campus-border-leaf2 Ethernet13 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "core1 Ethernet4 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "campus-border-leaf2-Ethernet14--core2-Ethernet4", - "nodes": [ - { - "id": "campus-border-leaf2" - }, - { - "id": "core2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "campus-border-leaf2 Ethernet14 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "core2 Ethernet4 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf4-Ethernet12--dc-spine2-Ethernet4", - "nodes": [ - { - "id": "dc-leaf4" - }, - { - "id": "dc-spine2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf4 Ethernet12 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine2 Ethernet4 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf3-Ethernet10--dc-leaf4-Ethernet10", - "nodes": [ - { - "id": "dc-leaf3" - }, - { - "id": "dc-leaf4" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf3 Ethernet10 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-leaf4 Ethernet10 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf3-Ethernet12--dc-spine2-Ethernet3", - "nodes": [ - { - "id": "dc-leaf3" - }, - { - "id": "dc-spine2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf3 Ethernet12 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine2 Ethernet3 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf5-Ethernet12--dc-spine2-Ethernet5", - "nodes": [ - { - "id": "dc-leaf5" - }, - { - "id": "dc-spine2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf5 Ethernet12 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine2 Ethernet5 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf5-Ethernet10--dc-leaf6-Ethernet10", - "nodes": [ - { - "id": "dc-leaf5" - }, - { - "id": "dc-leaf6" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf5 Ethernet10 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-leaf6 Ethernet10 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-access3-Ethernet1--dc-leaf5-Ethernet1", - "nodes": [ - { - "id": "dc-access3" - }, - { - "id": "dc-leaf5" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-access3 Ethernet1 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-leaf5 Ethernet1 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-border-leaf1-Ethernet12--dc-spine2-Ethernet9", - "nodes": [ - { - "id": "dc-border-leaf1" - }, - { - "id": "dc-spine2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-border-leaf1 Ethernet12 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine2 Ethernet9 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "core1-Ethernet1--dc-border-leaf1-Ethernet13", - "nodes": [ - { - "id": "core1" - }, - { - "id": "dc-border-leaf1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "core1 Ethernet1 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-border-leaf1 Ethernet13 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf6-Ethernet12--dc-spine2-Ethernet6", - "nodes": [ - { - "id": "dc-leaf6" - }, - { - "id": "dc-spine2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf6 Ethernet12 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine2 Ethernet6 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-access1-Ethernet2--dc-leaf2-Ethernet1", - "nodes": [ - { - "id": "dc-access1" - }, - { - "id": "dc-leaf2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-access1 Ethernet2 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-leaf2 Ethernet1 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-access2-Ethernet2--dc-leaf4-Ethernet1", - "nodes": [ - { - "id": "dc-access2" - }, - { - "id": "dc-leaf4" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-access2 Ethernet2 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-leaf4 Ethernet1 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-access2-Ethernet1--dc-leaf3-Ethernet1", - "nodes": [ - { - "id": "dc-access2" - }, - { - "id": "dc-leaf3" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-access2 Ethernet1 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-leaf3 Ethernet1 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf8-Ethernet11--dc-spine1-Ethernet8", - "nodes": [ - { - "id": "dc-leaf8" - }, - { - "id": "dc-spine1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf8 Ethernet11 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine1 Ethernet8 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf8-Ethernet12--dc-spine2-Ethernet8", - "nodes": [ - { - "id": "dc-leaf8" - }, - { - "id": "dc-spine2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf8 Ethernet12 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine2 Ethernet8 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf7-Ethernet10--dc-leaf8-Ethernet10", - "nodes": [ - { - "id": "dc-leaf7" - }, - { - "id": "dc-leaf8" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf7 Ethernet10 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-leaf8 Ethernet10 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-access4-Ethernet2--dc-leaf8-Ethernet1", - "nodes": [ - { - "id": "dc-access4" - }, - { - "id": "dc-leaf8" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-access4 Ethernet2 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-leaf8 Ethernet1 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf7-Ethernet12--dc-spine2-Ethernet7", - "nodes": [ - { - "id": "dc-leaf7" - }, - { - "id": "dc-spine2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf7 Ethernet12 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine2 Ethernet7 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-access4-Ethernet1--dc-leaf7-Ethernet1", - "nodes": [ - { - "id": "dc-access4" - }, - { - "id": "dc-leaf7" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-access4 Ethernet1 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-leaf7 Ethernet1 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-access3-Ethernet2--dc-leaf6-Ethernet1", - "nodes": [ - { - "id": "dc-access3" - }, - { - "id": "dc-leaf6" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-access3 Ethernet2 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-leaf6 Ethernet1 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-border-leaf2-Ethernet12--dc-spine2-Ethernet10", - "nodes": [ - { - "id": "dc-border-leaf2" - }, - { - "id": "dc-spine2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-border-leaf2 Ethernet12 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine2 Ethernet10 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-border-leaf1-Ethernet10--dc-border-leaf2-Ethernet10", - "nodes": [ - { - "id": "dc-border-leaf1" - }, - { - "id": "dc-border-leaf2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-border-leaf1 Ethernet10 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-border-leaf2 Ethernet10 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "core1-Ethernet2--dc-border-leaf2-Ethernet13", - "nodes": [ - { - "id": "core1" - }, - { - "id": "dc-border-leaf2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "core1 Ethernet2 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-border-leaf2 Ethernet13 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "core2-Ethernet2--dc-border-leaf2-Ethernet14", - "nodes": [ - { - "id": "core2" - }, - { - "id": "dc-border-leaf2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "core2 Ethernet2 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-border-leaf2 Ethernet14 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "dc-leaf2-Ethernet12--dc-spine2-Ethernet2", - "nodes": [ - { - "id": "dc-leaf2" - }, - { - "id": "dc-spine2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "dc-leaf2 Ethernet12 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "dc-spine2 Ethernet2 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "campus-access1-Ethernet1--campus-leaf1-Ethernet1", - "nodes": [ - { - "id": "campus-access1" - }, - { - "id": "campus-leaf1" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "campus-access1 Ethernet1 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "campus-leaf1 Ethernet1 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "campus-access1-Ethernet2--campus-leaf2-Ethernet1", - "nodes": [ - { - "id": "campus-access1" - }, - { - "id": "campus-leaf2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "campus-access1 Ethernet2 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "campus-leaf2 Ethernet1 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "campus-leaf1-Ethernet10--campus-leaf2-Ethernet10", - "nodes": [ - { - "id": "campus-leaf1" - }, - { - "id": "campus-leaf2" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "campus-leaf1 Ethernet10 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "campus-leaf2 Ethernet10 rx", + "query": "campus-spine2 Ethernet6 tx", "labelOffset": 55, "anchor": 3, "dashboardLink": "" @@ -3649,42 +1925,7 @@ }, "Z": { "bandwidth": 1000000000, - "query": "campus-spine2 Ethernet3 rx", - "labelOffset": 55, - "anchor": 3, - "dashboardLink": "" - } - }, - "units": "bps", - "arrows": { - "width": 8, - "height": 10, - "offset": 2 - }, - "stroke": 5, - "showThroughputPercentage": false - }, - { - "id": "campus-access2-Ethernet1--campus-leaf3-Ethernet1", - "nodes": [ - { - "id": "campus-access2" - }, - { - "id": "campus-leaf3" - } - ], - "sides": { - "A": { - "bandwidth": 1000000000, - "query": "campus-access2 Ethernet1 tx", - "labelOffset": 55, - "anchor": 4, - "dashboardLink": "" - }, - "Z": { - "bandwidth": 1000000000, - "query": "campus-leaf3 Ethernet1 rx", + "query": "campus-spine2 Ethernet3 tx", "labelOffset": 55, "anchor": 3, "dashboardLink": "" @@ -3719,7 +1960,1407 @@ }, "Z": { "bandwidth": 1000000000, - "query": "campus-spine2 Ethernet4 rx", + "query": "campus-spine2 Ethernet4 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf2-Ethernet12--campus-spine2-Ethernet2", + "nodes": [ + { + "id": "campus-leaf2" + }, + { + "id": "campus-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf2 Ethernet12 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine2 Ethernet2 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-border-leaf2-Ethernet11--campus-spine1-Ethernet6", + "nodes": [ + { + "id": "campus-border-leaf2" + }, + { + "id": "campus-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-border-leaf2 Ethernet11 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine1 Ethernet6 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf1-Ethernet11--dc-spine1-Ethernet1", + "nodes": [ + { + "id": "dc-leaf1" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf1 Ethernet11 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet1 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf1-Ethernet12--dc-spine2-Ethernet1", + "nodes": [ + { + "id": "dc-leaf1" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf1 Ethernet12 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet1 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf3-Ethernet11--dc-spine1-Ethernet3", + "nodes": [ + { + "id": "dc-leaf3" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf3 Ethernet11 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet3 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf3-Ethernet12--dc-spine2-Ethernet3", + "nodes": [ + { + "id": "dc-leaf3" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf3 Ethernet12 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet3 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf3-Ethernet10--dc-leaf4-Ethernet10", + "nodes": [ + { + "id": "dc-leaf3" + }, + { + "id": "dc-leaf4" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf3 Ethernet10 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf4 Ethernet10 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access2-Ethernet1--dc-leaf3-Ethernet1", + "nodes": [ + { + "id": "dc-access2" + }, + { + "id": "dc-leaf3" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access2 Ethernet1 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf3 Ethernet1 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf4-Ethernet11--dc-spine1-Ethernet4", + "nodes": [ + { + "id": "dc-leaf4" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf4 Ethernet11 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet4 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf4-Ethernet12--dc-spine2-Ethernet4", + "nodes": [ + { + "id": "dc-leaf4" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf4 Ethernet12 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet4 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf5-Ethernet11--dc-spine1-Ethernet5", + "nodes": [ + { + "id": "dc-leaf5" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf5 Ethernet11 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet5 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf5-Ethernet12--dc-spine2-Ethernet5", + "nodes": [ + { + "id": "dc-leaf5" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf5 Ethernet12 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet5 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf5-Ethernet10--dc-leaf6-Ethernet10", + "nodes": [ + { + "id": "dc-leaf5" + }, + { + "id": "dc-leaf6" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf5 Ethernet10 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf6 Ethernet10 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf7-Ethernet11--dc-spine1-Ethernet7", + "nodes": [ + { + "id": "dc-leaf7" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf7 Ethernet11 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet7 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf7-Ethernet12--dc-spine2-Ethernet7", + "nodes": [ + { + "id": "dc-leaf7" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf7 Ethernet12 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet7 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access4-Ethernet1--dc-leaf7-Ethernet1", + "nodes": [ + { + "id": "dc-access4" + }, + { + "id": "dc-leaf7" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access4 Ethernet1 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf7 Ethernet1 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf7-Ethernet10--dc-leaf8-Ethernet10", + "nodes": [ + { + "id": "dc-leaf7" + }, + { + "id": "dc-leaf8" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf7 Ethernet10 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf8 Ethernet10 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-border-leaf1-Ethernet11--dc-spine1-Ethernet9", + "nodes": [ + { + "id": "dc-border-leaf1" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-border-leaf1 Ethernet11 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet9 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-border-leaf1-Ethernet12--dc-spine2-Ethernet9", + "nodes": [ + { + "id": "dc-border-leaf1" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-border-leaf1 Ethernet12 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet9 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf6-Ethernet11--dc-spine1-Ethernet6", + "nodes": [ + { + "id": "dc-leaf6" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf6 Ethernet11 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet6 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access1-Ethernet1--dc-leaf1-Ethernet1", + "nodes": [ + { + "id": "dc-access1" + }, + { + "id": "dc-leaf1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access1 Ethernet1 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf1 Ethernet1 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access1-Ethernet2--dc-leaf2-Ethernet1", + "nodes": [ + { + "id": "dc-access1" + }, + { + "id": "dc-leaf2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access1 Ethernet2 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf2 Ethernet1 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access2-Ethernet2--dc-leaf4-Ethernet1", + "nodes": [ + { + "id": "dc-access2" + }, + { + "id": "dc-leaf4" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access2 Ethernet2 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf4 Ethernet1 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access3-Ethernet1--dc-leaf5-Ethernet1", + "nodes": [ + { + "id": "dc-access3" + }, + { + "id": "dc-leaf5" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access3 Ethernet1 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf5 Ethernet1 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access3-Ethernet2--dc-leaf6-Ethernet1", + "nodes": [ + { + "id": "dc-access3" + }, + { + "id": "dc-leaf6" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access3 Ethernet2 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf6 Ethernet1 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf8-Ethernet11--dc-spine1-Ethernet8", + "nodes": [ + { + "id": "dc-leaf8" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf8 Ethernet11 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet8 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf8-Ethernet12--dc-spine2-Ethernet8", + "nodes": [ + { + "id": "dc-leaf8" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf8 Ethernet12 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet8 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-access4-Ethernet2--dc-leaf8-Ethernet1", + "nodes": [ + { + "id": "dc-access4" + }, + { + "id": "dc-leaf8" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-access4 Ethernet2 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf8 Ethernet1 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-border-leaf2-Ethernet11--dc-spine1-Ethernet10", + "nodes": [ + { + "id": "dc-border-leaf2" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-border-leaf2 Ethernet11 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet10 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-border-leaf2-Ethernet12--dc-spine2-Ethernet10", + "nodes": [ + { + "id": "dc-border-leaf2" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-border-leaf2 Ethernet12 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet10 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-border-leaf1-Ethernet10--dc-border-leaf2-Ethernet10", + "nodes": [ + { + "id": "dc-border-leaf1" + }, + { + "id": "dc-border-leaf2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-border-leaf1 Ethernet10 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-border-leaf2 Ethernet10 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf2-Ethernet11--dc-spine1-Ethernet2", + "nodes": [ + { + "id": "dc-leaf2" + }, + { + "id": "dc-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf2 Ethernet11 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine1 Ethernet2 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf2-Ethernet12--dc-spine2-Ethernet2", + "nodes": [ + { + "id": "dc-leaf2" + }, + { + "id": "dc-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf2 Ethernet12 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-spine2 Ethernet2 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "dc-leaf1-Ethernet10--dc-leaf2-Ethernet10", + "nodes": [ + { + "id": "dc-leaf1" + }, + { + "id": "dc-leaf2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "dc-leaf1 Ethernet10 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-leaf2 Ethernet10 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf1-Ethernet12--campus-spine2-Ethernet1", + "nodes": [ + { + "id": "campus-leaf1" + }, + { + "id": "campus-spine2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf1 Ethernet12 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine2 Ethernet1 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf1-Ethernet11--campus-spine1-Ethernet1", + "nodes": [ + { + "id": "campus-leaf1" + }, + { + "id": "campus-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf1 Ethernet11 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine1 Ethernet1 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-access1-Ethernet1--campus-leaf1-Ethernet1", + "nodes": [ + { + "id": "campus-access1" + }, + { + "id": "campus-leaf1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-access1 Ethernet1 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-leaf1 Ethernet1 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf1-Ethernet10--campus-leaf2-Ethernet10", + "nodes": [ + { + "id": "campus-leaf1" + }, + { + "id": "campus-leaf2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf1 Ethernet10 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-leaf2 Ethernet10 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf3-Ethernet11--campus-spine1-Ethernet3", + "nodes": [ + { + "id": "campus-leaf3" + }, + { + "id": "campus-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf3 Ethernet11 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine1 Ethernet3 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-access2-Ethernet1--campus-leaf3-Ethernet1", + "nodes": [ + { + "id": "campus-access2" + }, + { + "id": "campus-leaf3" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-access2 Ethernet1 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-leaf3 Ethernet1 tx", "labelOffset": 55, "anchor": 3, "dashboardLink": "" @@ -3754,7 +3395,77 @@ }, "Z": { "bandwidth": 1000000000, - "query": "campus-leaf4 Ethernet10 rx", + "query": "campus-leaf4 Ethernet10 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-access1-Ethernet2--campus-leaf2-Ethernet1", + "nodes": [ + { + "id": "campus-access1" + }, + { + "id": "campus-leaf2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-access1 Ethernet2 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-leaf2 Ethernet1 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-leaf4-Ethernet11--campus-spine1-Ethernet4", + "nodes": [ + { + "id": "campus-leaf4" + }, + { + "id": "campus-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf4 Ethernet11 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine1 Ethernet4 tx", "labelOffset": 55, "anchor": 3, "dashboardLink": "" @@ -3789,7 +3500,7 @@ }, "Z": { "bandwidth": 1000000000, - "query": "campus-leaf4 Ethernet1 rx", + "query": "campus-leaf4 Ethernet1 tx", "labelOffset": 55, "anchor": 3, "dashboardLink": "" @@ -3805,10 +3516,115 @@ "showThroughputPercentage": false }, { - "id": "core2-Ethernet1--dc-border-leaf1-Ethernet14", + "id": "campus-leaf2-Ethernet11--campus-spine1-Ethernet2", "nodes": [ { - "id": "core2" + "id": "campus-leaf2" + }, + { + "id": "campus-spine1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-leaf2 Ethernet11 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "campus-spine1 Ethernet2 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-border-leaf1-Ethernet13--core1-Ethernet3", + "nodes": [ + { + "id": "campus-border-leaf1" + }, + { + "id": "core1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-border-leaf1 Ethernet13 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "core1 Ethernet3 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-border-leaf2-Ethernet13--core1-Ethernet4", + "nodes": [ + { + "id": "campus-border-leaf2" + }, + { + "id": "core1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-border-leaf2 Ethernet13 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "core1 Ethernet4 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "core1-Ethernet1--dc-border-leaf1-Ethernet13", + "nodes": [ + { + "id": "core1" }, { "id": "dc-border-leaf1" @@ -3817,14 +3633,49 @@ "sides": { "A": { "bandwidth": 1000000000, - "query": "core2 Ethernet1 tx", + "query": "core1 Ethernet1 tx", "labelOffset": 55, "anchor": 4, "dashboardLink": "" }, "Z": { "bandwidth": 1000000000, - "query": "dc-border-leaf1 Ethernet14 rx", + "query": "dc-border-leaf1 Ethernet13 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "core1-Ethernet2--dc-border-leaf2-Ethernet13", + "nodes": [ + { + "id": "core1" + }, + { + "id": "dc-border-leaf2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "core1 Ethernet2 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-border-leaf2 Ethernet13 tx", "labelOffset": 55, "anchor": 3, "dashboardLink": "" @@ -3859,7 +3710,147 @@ }, "Z": { "bandwidth": 1000000000, - "query": "core2 Ethernet5 rx", + "query": "core2 Ethernet5 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-border-leaf1-Ethernet14--core2-Ethernet3", + "nodes": [ + { + "id": "campus-border-leaf1" + }, + { + "id": "core2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-border-leaf1 Ethernet14 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "core2 Ethernet3 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "campus-border-leaf2-Ethernet14--core2-Ethernet4", + "nodes": [ + { + "id": "campus-border-leaf2" + }, + { + "id": "core2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "campus-border-leaf2 Ethernet14 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "core2 Ethernet4 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "core2-Ethernet1--dc-border-leaf1-Ethernet14", + "nodes": [ + { + "id": "core2" + }, + { + "id": "dc-border-leaf1" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "core2 Ethernet1 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-border-leaf1 Ethernet14 tx", + "labelOffset": 55, + "anchor": 3, + "dashboardLink": "" + } + }, + "units": "bps", + "arrows": { + "width": 8, + "height": 10, + "offset": 2 + }, + "stroke": 5, + "showThroughputPercentage": false + }, + { + "id": "core2-Ethernet2--dc-border-leaf2-Ethernet14", + "nodes": [ + { + "id": "core2" + }, + { + "id": "dc-border-leaf2" + } + ], + "sides": { + "A": { + "bandwidth": 1000000000, + "query": "core2 Ethernet2 tx", + "labelOffset": 55, + "anchor": 4, + "dashboardLink": "" + }, + "Z": { + "bandwidth": 1000000000, + "query": "dc-border-leaf2 Ethernet14 tx", "labelOffset": 55, "anchor": 3, "dashboardLink": "" diff --git a/scripts/generate_weathermap.py b/scripts/generate_weathermap.py index 8d7fe27..8c9cc73 100644 --- a/scripts/generate_weathermap.py +++ b/scripts/generate_weathermap.py @@ -4,7 +4,7 @@ metrics, merge it into a manually-authored dashboard base, and optionally provision the result into Grafana. Scope (see #52): this script knows only about the weathermap panel -- -targets (node status / link tx / link rx / VXLAN tooltip queries) and +targets (node status / link tx per side / VXLAN tooltip queries) and options.weathermap (nodes/links/scale/settings). It has no knowledge of the BGP sessions table, ports/interfaces table, or throughput panels -- those live in the manually-authored `configs/grafana/dashboard-base.json` and are @@ -363,6 +363,12 @@ def build_weathermap(devices, links, interface_speeds, positions, prometheus_url link_defs.append({ "id": f"{link['a_host']}-{a_gnmic_int}--{link['z_host']}-{z_gnmic_int}", "nodes": [{"id": link["a_host"]}, {"id": link["z_host"]}], + # Each side's query is that side's own tx (egress) counter, not the + # far end's rx -- see #57. a_host tx and z_host rx both describe the + # *same* A->Z flow measured from opposite ends (the a_host->z_host + # direction, counted twice), leaving the Z->A direction never + # queried by either side. Using each node's own tx gives two + # independent, opposite-direction measurements instead. "sides": { "A": { "bandwidth": a_bw, @@ -371,7 +377,7 @@ def build_weathermap(devices, links, interface_speeds, positions, prometheus_url }, "Z": { "bandwidth": z_bw, - "query": f"{link['z_host']} {z_gnmic_int} rx", + "query": f"{link['z_host']} {z_gnmic_int} tx", "labelOffset": 55, "anchor": ANCHOR["Left"], "dashboardLink": "", }, }, @@ -410,11 +416,6 @@ def build_weathermap(devices, links, interface_speeds, positions, prometheus_url "expr": f'rate(interfaces_interface_state_counters_out_octets{{device=~"{host_regex}", interface=~"{interface_regex}"}}[5m]) * 8', "legendFormat": "{{device}} {{interface}} tx", }, - { - "refId": "C", - "expr": f'rate(interfaces_interface_state_counters_in_octets{{device=~"{host_regex}", interface=~"{interface_regex}"}}[5m]) * 8', - "legendFormat": "{{device}} {{interface}} rx", - }, ] if vtep_hosts: vtep_regex = "|".join(promql_escape(h) for h in vtep_hosts) From 4719a77f212b33c0f3fa2fa18f66be28f9e10487 Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Mon, 20 Jul 2026 16:37:16 +0000 Subject: [PATCH 27/28] Reverse iperf3 traffic direction to DC->campus (server pushes to client) Without -R, iperf3's client sends and the server only receives, so traffic ran campus-host -> dc-server -- backwards for what these roles represent: dc-serverN is the DC-hosted service, campus-hostN is the consumer, and a real service delivers data to the consumer rather than just absorbing uploads from it. Refs #58 --- scripts/generate_traffic.sh | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/scripts/generate_traffic.sh b/scripts/generate_traffic.sh index 75fd9fc..6fe8079 100755 --- a/scripts/generate_traffic.sh +++ b/scripts/generate_traffic.sh @@ -46,7 +46,10 @@ echo "Starting iperf3 clients for ${DURATION}s..." for pair in "${PAIRS[@]}"; do IFS=':' read -r server server_ip client <<<"$pair" logfile="${WORKDIR}/${client}.log" - docker exec "${LAB_PREFIX}-${client}" iperf3 -c "$server_ip" -p "$PORT" \ + # -R: DC hosts the service, campus is the consumer -- data should flow + # server -> client (download), not client -> server, to match how a + # real DC-hosted service/campus-consumer pair behaves. + docker exec "${LAB_PREFIX}-${client}" iperf3 -c "$server_ip" -p "$PORT" -R \ -t "$DURATION" -i 1 --forceflush -f m >"$logfile" 2>&1 & CLIENT_PIDS+=("$!") done @@ -68,7 +71,7 @@ for ((elapsed = 0; elapsed <= DURATION; elapsed++)); do last_line="$(grep -E 'Mbits/sec' "$logfile" 2>/dev/null | tail -1 || true)" bw="$(sed -E 's/.*[[:space:]]([0-9.]+ Mbits\/sec).*/\1/' <<<"$last_line")" [[ -z "$last_line" ]] && bw="waiting..." - printf " %-13s -> %-13s : %s\n" "$client" "$server" "$bw" + printf " %-13s -> %-13s : %s\n" "$server" "$client" "$bw" done sleep 1 done @@ -81,5 +84,5 @@ for pair in "${PAIRS[@]}"; do IFS=':' read -r server _ client <<<"$pair" logfile="${WORKDIR}/${client}.log" summary="$(grep -E 'receiver' "$logfile" 2>/dev/null || true)" - echo " ${client} -> ${server}: ${summary:-no data}" + echo " ${server} -> ${client}: ${summary:-no data}" done From 5e5d6b45dffc606c25a19b0da771819c82e098db Mon Sep 17 00:00:00 2001 From: Damien Arnodo Date: Mon, 20 Jul 2026 16:57:28 +0000 Subject: [PATCH 28/28] Fix scripts/README.md doc drift after iperf3/weathermap direction fixes Traffic direction docs still described the pre-fix client->server iperf3 flow and the pre-fix tx/rx weathermap query pair. Refs #57, Refs #58 --- scripts/README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/scripts/README.md b/scripts/README.md index ff5ae4e..1509ea3 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -114,8 +114,9 @@ default layout. - **Known node** → whatever position is currently live in Grafana, unchanged. This is why `GRAFANA_URL`/`GRAFANA_TOKEN` matter even on a dry run (#53). -4. Build the panel's PromQL `targets`: node status, link tx/rx, VXLAN - MAC/VNI tooltip — each with an explicit `legendFormat`. +4. Build the panel's PromQL `targets`: node status, per-side link tx (each + side its own egress counter, so both directions are represented — #57), + VXLAN MAC/VNI tooltip — each with an explicit `legendFormat`. 5. Build `nodes[]`/`links[]`, including the plugin's `anchors` tally (link count per side) — required by the installed plugin fork even though the schema doc says it's optional (#48). @@ -152,8 +153,9 @@ empty until someone manually generates traffic (see #55). - Starts `iperf3 -s` on the DC gold-VRF servers: `dc-server2` (10.34.34.102), `dc-server4` (10.78.78.104). -- Runs `iperf3 -c` from the paired campus gold-VRF hosts: `campus-host1` - → dc-server2, `campus-host2` → dc-server4 — exercising the full +- Runs `iperf3 -c -R` from the paired campus gold-VRF hosts, reversing the + stream so the DC server pushes to the campus consumer: `dc-server2` → + `campus-host1`, `dc-server4` → `campus-host2` — exercising the full DC→Core→Campus stitched EVPN Type-5 path end to end. - Redraws a terminal dashboard every second for the run duration: server list, and live Mbits/sec per client session parsed from `iperf3 -i 1`