Download
A small Python app that runs on your own computer. It pings your targets, detects outages and silent multi-WAN failovers (e.g. Starlink ↔ cellular), runs periodic speed tests and writes log/CSV files. No third-party packages required.
One file containing the GUI and the monitor. Nothing to unpack or install besides Python.
Requirements
- macOS or Linux
- Python 3.10 or newer, with Tkinter (for the GUI)
-
pingandroute(macOS) orip(Linux) - normally preinstalled
Windows isn't supported yet (different ping options).
What the GUI shows
- Overall status: online / degraded / outage
- Provider, profile, public IPv4/IPv6, NAT/CGNAT, DNS chain
- Per-target status, outages and downtime
- Speed test results and estimated data volume
- The full output you'd otherwise see in the terminal
- Settings tab - no JSON editing needed
Installation & start
macOS
Don't use Apple's built-in /usr/bin/python3 - its old Tk 8.5 shows only an empty black window. Install Python from python.org (includes Tk 8.6) or use Homebrew:
brew install python python-tk
Check which Python/Tk you get: python3 -c "import sys, tkinter; print(sys.executable, tkinter.TkVersion)" - it must show 8.6 or higher. If Apple's Python comes first in your PATH, the app restarts itself with the Homebrew/python.org Python, or start it explicitly: /opt/homebrew/bin/python3 isp-connection-check.pyz
Linux (Debian / Ubuntu)
sudo apt install python3 python3-tk
Fedora: sudo dnf install python3-tkinter · Arch: sudo pacman -S tk
Start
Move the downloaded file to a folder of your choice (config and logs are stored next to it), then in a terminal:
cd ~/Downloads # or wherever you put the file python3 isp-connection-check.pyz
Click Start on the Monitor tab. On first start a default pingmon.json is created next to the app. The first output appears after ~20 s (ISP lookup and a baseline speed test run first).
Without GUI (e.g. on a server or Raspberry Pi)
python3 isp-connection-check.pyz --cli [path/to/pingmon.json]
Stop with Ctrl+C - a summary of outages and downtime per target is printed on exit.
Settings (Settings tab)
Saved to pingmon.json; restart monitoring to apply changes
| Setting | Meaning |
|---|---|
| Ping targets | Named hosts/IPs to ping. gateway with an empty host auto-detects your router; dns is compared with your system resolver. |
| Connection profiles | Matched against the detected ISP name (e.g. starlink, cellular) to pick interval, ping timeout and failure threshold automatically. |
| Ping overrides | Fixed interval / timeout / threshold for all providers, instead of the profile values. |
| ISP check interval | How often the provider is re-checked to catch silent failovers. |
| Speed test | Schedule in minutes (0 = off) and whether to run one after a connection change. |
| Verbose downtime | Log every failed ping, including ones still within the failure threshold. |
| Logs | Log directory, file prefix and how many log/CSV pairs to keep. |
Privacy
Everything runs on your computer and logs are written locally only. The app contacts ip-api.com / ipify.org (public IP and ISP) and speed.cloudflare.com (speed test), plus the ping targets you configure.