Releases: jamesccupps/PingerPlot
PingerPlot 1.2.0
PingerPlot 1.2.0 — headless mode + reliability.
The big one: PingerPlot now runs without a GUI, so you can monitor 24/7 from a server or a VLAN-probe host under Task Scheduler. Plus correctness/robustness fixes and the snappier UI from 1.1.1. Still pure Python standard library — zero third-party dependencies.
New
- Headless / service mode.
python -m pingerplot.headless --init monitor.jsonwrites a starter config;python -m pingerplot.headless monitor.jsonruns it (Ctrl-C to stop). A JSON config drives N targets (defaults + per-target overrides), each logging to its own crash-safe, rotating CSV, with periodic status lines to the console. Built for Windows Task Scheduler;pip install .also adds apingerplot-headlesscommand.
Reliability & correctness
- Fixed a TCP-traceroute bug: in elevated full-traceroute mode a hop that returned a hard unreachable could vanish from the round and be logged as a plain timeout. It now always records a definite result.
- Session saves are atomic (temp + replace) — a crash mid-write can't truncate the file.
- Session load caps hops and samples against a crafted/corrupt file.
- Faster UI (from 1.1.1): per-tick CPU ~30 ms → ~2–3 ms; the sidebar is ~97× cheaper with several targets, so it stays responsive as you add more.
Tested
95 tests across Windows + Linux × Python 3.10–3.13, including new coverage for the route grow/shrink logic and the geo-IP resolver.
Install / run (no Git needed)
- Download Source code (zip) below and extract it anywhere.
- GUI: double-click
PingerPlot.vbs. Headless:python -m pingerplot.headless --init monitor.json.
Requires Windows 10/11 and Python 3.10+. Full TCP/UDP traceroute needs an elevated session; ICMP works as a normal user. The headless engine runs anywhere Python does.
Full changelog: v1.1.1...v1.2.0
PingerPlot 1.1.1
PingerPlot 1.1.1 — performance.
A focused speedup of the live UI. The 700 ms refresh was doing ~30 ms of pure-Python stats work each tick — holding the GIL against the probe threads — which made the app feel sluggish, and worse the more targets you watched. Now ~2–3 ms.
- Per-hop stats (loss / avg / min / max / jitter) are computed in a single pass instead of ~5 —
snapshot()~4× faster, the sidebar grid ~97× faster with several targets. - The sidebar reads only the destination hop's stats instead of every hop of every monitor.
- Redundant canvas redraws are skipped on ticks where nothing changed (resize / tab-switch still redraw).
No feature or behavior changes. 75 tests green on Windows + Linux, Python 3.10–3.13.
Install / run (no Git needed)
Download Source code (zip) below, extract anywhere, double-click PingerPlot.vbs. No build, no pip install.
Full changelog: v1.1.0...v1.1.1
PingerPlot 1.1.0
PingerPlot 1.1.0 — the "leave it running" release.
Quality-of-life and operational features for monitoring you actually leave running, plus reliability fixes from a full code audit. Still pure Python standard library — zero third-party dependencies.
New
- Persists between launches — theme, engine options, alert thresholds, and your target list save to
%APPDATA%\PingerPlotand restore on start. View → Resume targets on launch re-arms the last session's monitors. - Pause / Resume — right-click a target to halt probing without losing history; resume continues where it left off.
- Per-target settings — each target keeps its own engine/alert config; right-click → Edit settings… to inspect or change just that one.
- Copy — right-click a hop to copy its IP or hostname.
- Webhook alerts — Engine → Webhook URL gets a JSON POST (http/https) when the destination alert raises or clears. Fired off-thread, so it never blocks probing.
- Custom app icon in place of the default Tk feather.
Reliability & hardening
- Probe log is size-capped with rollover (~25 MB, one backup) — unattended multi-week runs can't fill the disk.
- Fixed a monitor restart race (a slow worker from a previous run could write stale probes into a freshly restarted one) and made the engine reusable after shutdown.
- Session load clamps sample history so a crafted/corrupt file can't exhaust memory.
python -m pingerplotentry point; CI least-privilege (permissions: contents: read).
Install / run (no Git needed)
- Download Source code (zip) below and extract it anywhere.
- Double-click
PingerPlot.vbs— no console window, no build, nopip install.
Requires Windows 10/11 and Python 3.10+ (Tkinter ships with the python.org installer). Full TCP/UDP traceroute needs an elevated session; ICMP and TCP final-hop work as a normal user.
Full changelog: v1.0.0...v1.1.0
PingerPlot 1.0.0
PingerPlot 1.0.0 — first public release.
A continuous-traceroute network path monitor for Windows (MTR-style): it discovers every hop to a target, then re-probes the whole path on an interval, so you get per-hop latency, jitter, and packet loss over time — making it obvious where a problem lives (your LAN, your ISP, a peering point, or the destination).
Highlights
- Continuous per-hop monitoring with a live latency graph and an all-hops timeline
- Multi-target sidebar showing loss / latency / MOS per target at a glance
- Sustained-degradation alerts (loss or latency over a window) with banner + beep
- MOS (VoIP quality) score for the destination
- ICMP / TCP / UDP probe modes — ICMP needs no admin (Windows IP Helper API)
- Session save/load, crash-safe CSV logging, optional world-map view
- Pure Python standard library — zero third-party dependencies
Install / run (no Git needed)
- Download Source code (zip) below and extract it anywhere.
- Double-click
PingerPlot.vbs— launches with no console window. No build, nopip install.
Requires Windows 10/11 and Python 3.10+ (Tkinter ships with the python.org installer). Full TCP/UDP traceroute needs an elevated session; ICMP and TCP final-hop work as a normal user.
See the README for full details.