Skip to content

What "idle" actually looks like on the wire

Measurements behind SILENT_BYTES_PER_SEC in app/net_activity.py (CashPilot-t6y). The bead was explicit that the threshold must come from real idle traffic rather than from assuming zero, so it does.

Method. Every cashpilot.managed container on a live host, two readings of /proc/net/dev inside the container 120 seconds apart, rate = delta / 120. Single host, single 2-minute window — enough to disprove "idle means zero", not enough to calibrate anything finer. Treat the number as a floor, not a tuned constant.

Date: 2026-08-02.

Container rx B/s tx B/s
mysterium 815,589 15,275,715
honeygain 6,709 6,773
proxylite 5,971 1,394
anyone-protocol 2,490 2,591
storj 1,018 5,878
earnfm 546 661
repocket 525 571
bitping 117 118
proxyrack 36 22
packetstream 35 12
earnapp 19 12
proxybase 5.5 7.3
traffmonetizer 0.0 0.0
iproyal 0.0 0.0

What this shows

Idle is not zero. Eleven of fourteen containers moved measurable traffic while earning little or nothing — keepalives, heartbeats, control-plane chatter. A threshold of zero would have called all of them active.

Zero does happen, and it means something. Two containers moved literally nothing in two minutes. That is the only distinction this data supports, so the threshold sits just above it (2 B/s) and the signal answers one question: did anything at all cross the wire?

Traffic volume is not earnings. Mysterium moved 15 MB/s because it is a dVPN exit carrying other people's traffic; Storj's 5.9 MB/s tx is customer data being served. Neither number tells you what was paid. This is why the signal can only ever weaken confidence in app/producer_state.py, never assert PRODUCING.

Silence is not breakage. Bandwidth resale is buyer-driven: a healthy node moves nothing while nobody is buying. Hence SILENT supports IDLE and never FAILING.

The trap that shaped the code

Docker's stats API omits the networks key entirely for containers on the host network — no interfaces, no counters. On this fleet the single busiest service (mysterium, above) is host-networked, so a naive reading would score the best earner as zero traffic and call it dead.

The catalog does declare this one — services/bandwidth/mysterium.yml sets network_mode: "host" — but the code still decides at RUNTIME from what Docker actually reports. A container can be started host-networked by an override the catalog knows nothing about, and the counters are either present or they are not, whatever any YAML claims.