Sudan Internet Health Dashboard
# SDWatch — Sudan Internet Health Dashboard
A real-time monitoring dashboard for Sudan's internet infrastructure. Tracks BGP routing, RPKI validity, HTTP traffic, internet outages, IXP membership, and DNS health — all from public APIs with no proprietary data sources.
Live: **bgp.theinternetmechanic.dev**
---
## Panels
| Panel | Data Sources | Poll Interval |
|---|---|---|
| **BGP** | Cloudflare Radar + RIPE RIS upstream analysis | Hourly |
| **RPKI** | Cloudflare Radar (invalid prefix list, ROA trend) | Hourly |
| **Traffic** | Cloudflare Radar HTTP summaries + per-ASN sparklines | Hourly |
| **Outages** | IODA signals + Cloudflare Radar shutdown annotations | Hourly |
| **IXP** | PeeringDB — SIXP Sudan members + peering policies | Daily |
| **DNS** | Cloudflare DoH (.sd TLD) + Cloudflare Radar ranking | Daily |
---
## Setup
### Requirements
- Python 3.11+
- A Cloudflare Radar API token — free tier is sufficient
### Install
```bash
git clone
cd sdwatch
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# Edit .env — add your CLOUDFLARE_API_TOKEN
```
### Configure `.env`
```env
# Required
CLOUDFLARE_API_TOKEN=your_token_here
# Country
COUNTRY_CODE=SD
COUNTRY_NAME=Sudan
# Polling
POLL_INTERVAL_MINUTES=60
# Database
DATABASE_PATH=./data/dashboard.db
# Server — use 127.0.0.1 behind Nginx, 0.0.0.0 for local dev
HOST=0.0.0.0
PORT=8000
DEBUG=true
# Monitored ASNs
MONITORED_ASNS=15706,30844
```
### Run
```bash
python main.py
# Open
localhost
```
---
## Known Limitations
- **Cloudflare Radar** requires a minimum traffic volume threshold for some endpoints — `http/summary/http_protocol` and `http/summary/bot_class` may return 400 for Sudan intermittently
- **IODA 30-day signals** can be slow to fetch (up to 120s) — the poll falls back to two 15-day chunks if the single request times out
- **RIPE RIS upstream analysis** is best-effort — failures don't affect the overall BGP poll status
## …