2 Commits
Author SHA1 Message Date
agessaman 49e24ef441 refactor(web_viewer): pull the repeater classification, traffic share and daily trend out of _get_multibyte_rollout_data
Three self-contained blocks of the 386-line method become `_rollout_classify_repeaters` (fills the repeater list and status counts in place), `_rollout_path_traffic_share` (returns the multi-byte, single-byte and total path observations and the percentage) and `_rollout_daily_trend`. Their statements are AST-identical to the originals and run in the same order inside the same connection and try; inputs and outputs were derived from the AST, and nothing else crosses the boundaries.
2026-10-01 20:05:09 -07:00
agessaman 45ba381b31 refactor(web_viewer): move the multi-byte rollout statistics into a MultibyteRolloutMixin
The nine methods behind the multi-byte rollout page (hop-chunk collection and caching, path encoding badges, single-byte relay metrics, legacy degree and the rollout payload) move verbatim from app.py into modules/web_viewer/multibyte_rollout.py; BotDataViewer inherits the mixin, so callers and tests are unchanged. The mixin declares the viewer attributes it reads for mypy. app.py's imports are untouched. app.py drops to about 7,540 lines.
2026-10-01 15:06:56 -07:00