Add ExaBGP route injector, Grafana dashboards, and full documentation
- Add exabgp/ container: ExaBGP 5.x + Flask REST API for on-demand BGP
route injection into CML IOS-XR lab (AS 65020 via eBGP from AS 65100)
- Add 6 injection scenarios: internet_sample, churn, blackhole, anycast,
full_table, lab_prefixes
- Add inject.py CLI wrapper for the ExaBGP API
- Add iosxr_bgp_config.md with IOS-XR neighbor config and NETCONF script
- Add obmp-grafana/ dashboards and provisioning (17 dashboards)
- Update docker-compose.yml: add exabgp service, fix Kafka external
listener IP, extend log retention from 90min to 720min
- Add DOCS.md: full project documentation including architecture, setup,
user guide, sanity checks, troubleshooting, and command reference
- Update .gitignore: exclude .env and .claude/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 14:46:37 -07:00
|
|
|
apiVersion: 1
|
|
|
|
|
|
|
|
|
|
providers:
|
|
|
|
|
# <string> an unique provider name. Required
|
|
|
|
|
- name: 'OpenBMP'
|
|
|
|
|
# <int> Org id. Default to 1
|
|
|
|
|
orgId: 1
|
|
|
|
|
# <string> name of the dashboard folder.
|
|
|
|
|
folder: ''
|
|
|
|
|
# <string> folder UID. will be automatically generated if not specified
|
|
|
|
|
folderUid: ''
|
|
|
|
|
# <string> provider type. Default to 'file'
|
|
|
|
|
type: file
|
|
|
|
|
# <bool> disable dashboard deletion
|
|
|
|
|
disableDeletion: false
|
|
|
|
|
# <int> how often Grafana will scan for changed dashboards
|
|
|
|
|
updateIntervalSeconds: 30
|
|
|
|
|
# <bool> allow updating provisioned dashboards from the UI
|
|
|
|
|
allowUiUpdates: true
|
|
|
|
|
options:
|
|
|
|
|
# <string, required> path to dashboard files on disk. Required when using the 'file' type
|
|
|
|
|
path: /var/lib/grafana/dashboards/General
|
|
|
|
|
# <bool> use folder names from filesystem to create folders in Grafana
|
|
|
|
|
foldersFromFilesStructure: false
|
|
|
|
|
# <string> an unique provider name. Required
|
|
|
|
|
- name: 'OpenBMP-Base'
|
|
|
|
|
# <int> Org id. Default to 1
|
|
|
|
|
orgId: 1
|
|
|
|
|
# <string> name of the dashboard folder.
|
|
|
|
|
folder: 'OBMP-Base'
|
|
|
|
|
# <string> folder UID. will be automatically generated if not specified
|
|
|
|
|
folderUid: '1001'
|
|
|
|
|
# <string> provider type. Default to 'file'
|
|
|
|
|
type: file
|
|
|
|
|
# <bool> disable dashboard deletion
|
|
|
|
|
disableDeletion: false
|
|
|
|
|
# <int> how often Grafana will scan for changed dashboards
|
|
|
|
|
updateIntervalSeconds: 30
|
|
|
|
|
# <bool> allow updating provisioned dashboards from the UI
|
|
|
|
|
allowUiUpdates: true
|
|
|
|
|
options:
|
|
|
|
|
# <string, required> path to dashboard files on disk. Required when using the 'file' type
|
|
|
|
|
path: /var/lib/grafana/dashboards/obmp/Base-1001
|
|
|
|
|
# <bool> use folder names from filesystem to create folders in Grafana
|
|
|
|
|
foldersFromFilesStructure: false
|
|
|
|
|
- name: 'OpenBMP-History'
|
|
|
|
|
# <int> Org id. Default to 1
|
|
|
|
|
orgId: 1
|
|
|
|
|
# <string> name of the dashboard folder.
|
|
|
|
|
folder: 'OBMP-History'
|
|
|
|
|
# <string> folder UID. will be automatically generated if not specified
|
|
|
|
|
folderUid: '1002'
|
|
|
|
|
# <string> provider type. Default to 'file'
|
|
|
|
|
type: file
|
|
|
|
|
# <bool> disable dashboard deletion
|
|
|
|
|
disableDeletion: false
|
|
|
|
|
# <int> how often Grafana will scan for changed dashboards
|
|
|
|
|
updateIntervalSeconds: 30
|
|
|
|
|
# <bool> allow updating provisioned dashboards from the UI
|
|
|
|
|
allowUiUpdates: true
|
|
|
|
|
options:
|
|
|
|
|
# <string, required> path to dashboard files on disk. Required when using the 'file' type
|
|
|
|
|
path: /var/lib/grafana/dashboards/obmp/History-1002
|
|
|
|
|
# <bool> use folder names from filesystem to create folders in Grafana
|
|
|
|
|
foldersFromFilesStructure: false
|
|
|
|
|
- name: 'OpenBMP-Tops'
|
|
|
|
|
# <int> Org id. Default to 1
|
|
|
|
|
orgId: 1
|
|
|
|
|
# <string> name of the dashboard folder.
|
|
|
|
|
folder: 'OBMP-Tops'
|
|
|
|
|
# <string> folder UID. will be automatically generated if not specified
|
|
|
|
|
folderUid: '1003'
|
|
|
|
|
# <string> provider type. Default to 'file'
|
|
|
|
|
type: file
|
|
|
|
|
# <bool> disable dashboard deletion
|
|
|
|
|
disableDeletion: false
|
|
|
|
|
# <int> how often Grafana will scan for changed dashboards
|
|
|
|
|
updateIntervalSeconds: 30
|
|
|
|
|
# <bool> allow updating provisioned dashboards from the UI
|
|
|
|
|
allowUiUpdates: true
|
|
|
|
|
options:
|
|
|
|
|
# <string, required> path to dashboard files on disk. Required when using the 'file' type
|
|
|
|
|
path: /var/lib/grafana/dashboards/obmp/Tops-1003
|
|
|
|
|
# <bool> use folder names from filesystem to create folders in Grafana
|
|
|
|
|
foldersFromFilesStructure: false
|
|
|
|
|
- name: 'OpenBMP-LinkState'
|
|
|
|
|
# <int> Org id. Default to 1
|
|
|
|
|
orgId: 1
|
|
|
|
|
# <string> name of the dashboard folder.
|
|
|
|
|
folder: 'OBMP-LinkState'
|
|
|
|
|
# <string> folder UID. will be automatically generated if not specified
|
|
|
|
|
folderUid: '1004'
|
|
|
|
|
# <string> provider type. Default to 'file'
|
|
|
|
|
type: file
|
|
|
|
|
# <bool> disable dashboard deletion
|
|
|
|
|
disableDeletion: false
|
|
|
|
|
# <int> how often Grafana will scan for changed dashboards
|
|
|
|
|
updateIntervalSeconds: 30
|
|
|
|
|
# <bool> allow updating provisioned dashboards from the UI
|
|
|
|
|
allowUiUpdates: true
|
|
|
|
|
options:
|
|
|
|
|
# <string, required> path to dashboard files on disk. Required when using the 'file' type
|
|
|
|
|
path: /var/lib/grafana/dashboards/obmp/LinkState-1004
|
|
|
|
|
# <bool> use folder names from filesystem to create folders in Grafana
|
|
|
|
|
foldersFromFilesStructure: false
|
|
|
|
|
- name: 'OpenBMP-L3VPN'
|
|
|
|
|
# <int> Org id. Default to 1
|
|
|
|
|
orgId: 1
|
|
|
|
|
# <string> name of the dashboard folder.
|
|
|
|
|
folder: 'OBMP-L3VPN'
|
|
|
|
|
# <string> folder UID. will be automatically generated if not specified
|
|
|
|
|
folderUid: '1005'
|
|
|
|
|
# <string> provider type. Default to 'file'
|
|
|
|
|
type: file
|
|
|
|
|
# <bool> disable dashboard deletion
|
|
|
|
|
disableDeletion: false
|
|
|
|
|
# <int> how often Grafana will scan for changed dashboards
|
|
|
|
|
updateIntervalSeconds: 30
|
|
|
|
|
# <bool> allow updating provisioned dashboards from the UI
|
|
|
|
|
allowUiUpdates: true
|
|
|
|
|
options:
|
|
|
|
|
# <string, required> path to dashboard files on disk. Required when using the 'file' type
|
|
|
|
|
path: /var/lib/grafana/dashboards/obmp/L3VPN-1005
|
|
|
|
|
# <bool> use folder names from filesystem to create folders in Grafana
|
Add Phase 2: Vue 3 control panel, 6 learning dashboards, new BGP scenarios
- exabgp-ui/: Vue 3 + Vite SPA served by NGINX on :5001; proxies /api/ to
ExaBGP Flask on :5050; includes StatusBar, ScenarioPanel, RouteTable,
AnnounceForm, PeerStatus, ChurnControl components
- docker-compose.yml: add obmp-exabgp-ui service (host network, port 5001)
- exabgp/scenarios/__init__.py: add convergence_test, route_leak,
hijack_simulation scenarios for structured BGP learning exercises
- exabgp/inject.py: add 'peers' and 'monitor' subcommands; live-refresh
terminal status view with ANSI cursor repositioning
- obmp-grafana/dashboards/Learning/: 6 new OBMP-Learning dashboards
(update rate, peer health, AS path, RPKI, churn, attributes)
- obmp-grafana/provisioning/dashboards/openbmp-dashboards.yml: add
OpenBMP-Learning folder provider pointing to dashboards/Learning/
- DOCS.md: document Web UI, 3 new scenarios, 6 learning dashboards;
fix section numbering (10-14) and architecture diagram (23 dashboards)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 15:37:16 -07:00
|
|
|
foldersFromFilesStructure: false
|
|
|
|
|
- name: 'OpenBMP-Learning'
|
|
|
|
|
orgId: 1
|
|
|
|
|
folder: 'OBMP-Learning'
|
|
|
|
|
folderUid: '2001'
|
|
|
|
|
type: file
|
|
|
|
|
disableDeletion: false
|
|
|
|
|
updateIntervalSeconds: 30
|
|
|
|
|
allowUiUpdates: true
|
|
|
|
|
options:
|
|
|
|
|
path: /var/lib/grafana/dashboards/Learning
|
Add ExaBGP route injector, Grafana dashboards, and full documentation
- Add exabgp/ container: ExaBGP 5.x + Flask REST API for on-demand BGP
route injection into CML IOS-XR lab (AS 65020 via eBGP from AS 65100)
- Add 6 injection scenarios: internet_sample, churn, blackhole, anycast,
full_table, lab_prefixes
- Add inject.py CLI wrapper for the ExaBGP API
- Add iosxr_bgp_config.md with IOS-XR neighbor config and NETCONF script
- Add obmp-grafana/ dashboards and provisioning (17 dashboards)
- Update docker-compose.yml: add exabgp service, fix Kafka external
listener IP, extend log retention from 90min to 720min
- Add DOCS.md: full project documentation including architecture, setup,
user guide, sanity checks, troubleshooting, and command reference
- Update .gitignore: exclude .env and .claude/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 14:46:37 -07:00
|
|
|
foldersFromFilesStructure: false
|