- If a peer filters ICMP, measure the TCP connect time to its peer port
instead; such values are marked with a trailing "t"
- Show ⚡ between Latency and Ping when stellar-core's latency exceeds
the ping/TCP RTT by more than LATENCY_PING_RATIO (3), hinting at a
VPN exit / relay in front of the actual node
- Legend below the peer table, only for markers actually shown
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ping_batch() pings each peer's public IP in parallel from the host
(system ping, 1 packet, 1 s timeout, private IPs skipped)
- New "Ping" column next to stellar-core's "Latency" in the -p/-g table;
"—" when the peer filters ICMP
- Low ping with high latency hints at a VPN exit / relay in front of
the actual node
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Fetch Horizon via curl inside the container (127.0.0.1:8000) instead of
the host port 31401; the host->bridge forwarding hung until the 5 s
timeout and made each cycle take ~6 s instead of ~1 s
- Report an error when Horizon's core_latest_ledger is 0 (no connection
to stellar-core) instead of a false "Synced" with a negative lag
- Compute the ingest lag against stellar-core's own ledger
- "History Oldest" now shows history_elder_ledger; the latest ledger is
listed separately as "History Latest"
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Optional JSON config ($PI_STAT_CONFIG, ~/.config/pi-stat/config.json,
<script dir>/pi-stat.json) with refresh_interval; -i SEC overrides it
- Refresh deadline anchored to cycle start; warn when a cycle takes
>= 80% of the refresh interval or exceeds it
- Switch the tty to cbreak once per session so keypresses made during a
long cycle are not dropped
- Ship pi-stat.json with the repo
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>