Andrew Pimenov
4ed455700b
wire TLS, prefix bench, DPI check, DNS advanced, path diversity into the CLI pipeline
2026-08-10 21:18:19 +03:00
Andrew Pimenov
342d92e709
render TLS, DNS advanced, path diversity, prefix bench, DPI sections in reports
2026-08-09 17:56:07 +03:00
Andrew Pimenov
fc502f1756
add finding rules for TLS, prefix bench, DPI, DNS advanced, path diversity
2026-08-09 17:49:30 +03:00
Andrew Pimenov
1874f3f3c2
add Cloudflare CF-RAY edge/anycast path diversity probe
2026-08-09 17:45:37 +03:00
Andrew Pimenov
63e7597520
add system DNS vs DoH comparison and transparent proxy detection
2026-08-09 17:45:33 +03:00
Andrew Pimenov
a000a12b19
add single-host DPI/TCP-RST self-diagnostic probe
2026-08-09 17:45:27 +03:00
Andrew Pimenov
10fa9f8052
add AS prefix latency benchmark probe
2026-08-09 17:43:10 +03:00
Andrew Pimenov
e34d8f27f4
add TLS handshake RTT / TTFB probe
2026-08-09 17:42:02 +03:00
Andrew Pimenov
c63c179b57
add config sections for TLS, prefix bench, DPI check, DNS advanced, path diversity
2026-08-09 17:37:48 +03:00
Andrew Pimenov
33d7d2d942
add L4-L7 diagnostic models (TLS, DPI, DNS, anycast, prefix bench)
2026-08-09 17:35:37 +03:00
Andrew Pimenov
51d82d997f
add jitter matrix (p95/p99/cv) to ping stats
2026-08-09 17:34:06 +03:00
Andrew Pimenov
d1d774a199
bump minimum python to 3.14
2026-08-09 17:31:07 +03:00
Andrew Pimenov
9ef6f2e536
document per-platform setup for optional install extras
2026-08-09 16:46:11 +03:00
Andrew Pimenov
387e58949f
add specific unit tests for parse_traceroute
2026-08-09 16:21:23 +03:00
Andrew Pimenov
9a01b2abe2
add test coverage for throughput_from_samples
2026-08-09 16:20:50 +03:00
Andrew Pimenov
f80ebfe217
add tests for parse_server_timing_cfl4 edge cases
2026-08-09 16:20:23 +03:00
Andrew Pimenov
7fb13a87ef
add tests for identity_changes
2026-08-09 16:20:11 +03:00
Andrew Pimenov
19c06279fe
add test coverage for fetch_internetdb
2026-08-09 16:19:59 +03:00
Andrew Pimenov
058b873445
add tests for decode_dnsbl fallback and mixed responses
2026-08-09 16:18:57 +03:00
Andrew Pimenov
d5b8d27bfd
add test coverage for fetch_abuseipdb
2026-08-09 16:18:46 +03:00
Andrew Pimenov
053e42c811
expand classify_ip_type test coverage
2026-08-09 16:17:49 +03:00
Andrew Pimenov
1554af5943
add tests for summarize_dnsbl
2026-08-09 16:17:35 +03:00
Andrew Pimenov
0be881b96a
add tests for merge_geo edge cases and improve ip_geo coverage
2026-08-09 16:16:47 +03:00
Andrew Pimenov
bc5b01ae58
add test coverage for refresh_netsets
2026-08-09 16:16:32 +03:00
Andrew Pimenov
15d4d745c4
improve test coverage for latency_changes
2026-08-09 16:15:18 +03:00
Andrew Pimenov
2a72bdb441
cover empty exception message branch in run_speed_cascade
2026-08-09 16:15:08 +03:00
Andrew Pimenov
8e7d5bba5b
add tests for tier_cloudflare
2026-08-09 16:14:55 +03:00
Andrew Pimenov
24f08acd79
add test coverage for tier_ookla
2026-08-09 16:14:42 +03:00
Andrew Pimenov
d42a236d3a
add test coverage for finding_changes
2026-08-09 16:14:16 +03:00
Andrew Pimenov
b3971375c2
add tests for speed_changes
2026-08-09 16:14:00 +03:00
Andrew Pimenov
be99c19cfd
add async tests for query_dnsbl
2026-08-09 16:13:42 +03:00
Andrew Pimenov
2473822b93
add tests for finalize_hop
2026-08-09 16:13:29 +03:00
Andrew Pimenov
8aa806881e
add test coverage for tier_fastcom
2026-08-09 16:13:19 +03:00
Andrew Pimenov
768490562c
guard tier_fastcom against a falsy target url
2026-08-09 16:13:10 +03:00
Andrew Pimenov
52c0647e77
run refresh_netsets provider fetches concurrently with asyncio.gather
2026-08-09 16:12:15 +03:00
Andrew Pimenov
6810c0f753
optimize first_loss_jump with zip pairwise iteration
2026-08-09 16:11:43 +03:00
Andrew Pimenov
93c6ac526a
use zip for pairwise hop iteration in path_findings
2026-08-09 16:11:29 +03:00
Andrew Pimenov
fb3c6ca77f
optimize overall_verdict by combining severity iterations
2026-08-09 16:10:45 +03:00
Andrew Pimenov
ab39922bf6
cache dataclass_fields lookup in merge_geo
2026-08-09 16:10:29 +03:00
Andrew Pimenov
329ff15e74
make _resolve async to avoid blocking the event loop
2026-08-09 16:10:17 +03:00
Andrew Pimenov
e4c51546ba
use list comprehension for _unix_probes
2026-08-09 16:09:29 +03:00
Andrew Pimenov
85da4aab1f
optimize _unix_annotations dedup with dict.fromkeys
2026-08-09 16:09:05 +03:00
Andrew Pimenov
f59f860327
group build_trace_result arguments into TraceConfig dataclass
2026-08-09 16:08:52 +03:00
Andrew Pimenov
4c290ec309
refactor build_reputation to use ReputationContext dataclass
2026-08-09 16:08:29 +03:00
Andrew Pimenov
fc37ff369d
extract NDT7 consent check into a helper function
2026-08-09 16:07:44 +03:00
Andrew Pimenov
d2ab0caafd
refactor gather_vpn_signals to use VpnContext dataclass
2026-08-09 16:07:27 +03:00
Andrew Pimenov
5f51e70d5e
extract BgpContext dataclass for build_bgp_intel
2026-08-09 16:06:55 +03:00
Andrew Pimenov
d88b1bd95a
Revert "uncomment pypi publish job, gated on manual environment approval"
...
This reverts commit 46ced3da51 .
2026-08-09 13:52:23 +03:00
Andrew Pimenov
46ced3da51
uncomment pypi publish job, gated on manual environment approval
...
netsleuth confirmed free on PyPI (pypi.org/pypi/netsleuth/json -> 404).
Publish still can't run until a PyPI Trusted Publisher is registered for
this project and the pypi GitHub environment exists with a reviewer rule -
both need account access this session doesn't have.
2026-08-09 13:43:55 +03:00
Andrew Pimenov
aefb41a463
fix dead icmplib traceroute tier importing a nonexistent symbol
...
probes/traceroute.py imported async_traceroute from icmplib, which doesn't
exist in icmplib 3.0.4 - only a sync traceroute(), no async variant, and no
privileged= kwarg (traceroute always needs a raw socket, unlike ping's
unprivileged datagram option). The tier raised ImportError on every call and
silently fell through to the next tier. Call the real traceroute() via
asyncio.to_thread instead, drop the nonexistent privileged param.
2026-08-09 13:39:35 +03:00