Conversation
added 6 commits
September 13, 2026 07:44
…ead of being re-read from raw packets every time a page needs them. Two new tables keep track of each route that has ever been seen and the hops between the two endpoints. This prepares for faster queries in PR2
…async restoration Track user-edited fields in a Set so async applyURLParameters() does not overwrite user input in form pickers if typing occurs while parameter resolution is in flight (e.g. following a timezone toggle or page reload).
…hop tables instead of parsing thousands of raw packets on every request. Link analysis between nodes, related node lists, the hop picker, and the main traceroute table now query the database directly with fast filtering and pagination. This removes the old packet caps so busy networks can analyze full multi-day windows without missing data, and updates the table UI to display exact total counts.
…p tables instead of re-decoding raw packets on every page request. The network graph, maps, longest links, route patterns, node statistics, and packet details now query pre-calculated hops and routes, eliminating slow packet loops and repeated database lookups. Also removed obsolete legacy reader code.
…as shorter connected paths. Hop queries now keep the full route structure, and indirect connections and longest-path results are only built from hops that actually link up end to end, so distances, hop counts, and route previews stay correct.
This was referenced Sep 13, 2026
joroses
marked this pull request as ready for review
September 13, 2026 11:02
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TLDR
Uses the new traceroute tables from the previous PR: significant improvement in /traceroute-hops loading times and actually shows all the traceroutes in the selected range/filter.
Summary (PR 2: Materialized Traceroute Readers)
Switches all traceroute pages, API endpoints, and visualization tools from on-the-fly protobuf decoding of raw
packet_historyto direct SQL queries against the materializedtraceroute_routesandtraceroute_hopstables introduced in PR 1.Key Changes
Materialized Read Repository (
traceroute_read_repository.py):get_traceroute_packets): supports two-stage SQL grouping, pagination, and multi-field filtering.get_traceroute_link): aggregates SNR stats, link counts, and matching traceroute packets between two nodes.get_traceroute_hops_for_graph): extracts directional hops and signal levels directly in SQL.get_traceroute_hops_for_longest_links): retrieves filtered hop collections for distance aggregation.get_route_patterns_data): identifies recurring node sequences between endpoints.get_node_traceroute_statistics): calculates source, destination, and intermediate routing participation.get_nodes_location_history): fetches recent position history for multiple nodes in single windowed queries.Removed Packet Scan Limits:
LIMIT 20000) across all traceroute readers. Full multi-day (24h, 7d) and multi-week windows now return complete, unskewed link topologies without silent truncation.Strict Hop Continuity & Path Integrity:
TracerouteService, indirect connections and longest paths now require contiguous hop sequences. Routes with missing or corrupted middle hops no longer collapse into false shortcut links.Legacy Code Cleanup:
TracerouteRepository(repositories.py).Table UI Exact Count Display (
modern-table.js):N+count indicators.Test Status
tests/unit/test_traceroute_read_repository.py:220(test_get_route_patterns_data), the assertion checkspattern_key[1] == (905,)matching the composite dictionary keypattern_key = (endpoints, route_nodes)returned byget_route_patterns_data().tests/e2e/test_traceroute_filters_e2e.py,test_traceroute_route_node_filter_e2echecks that a filtered node matches anywhere along the entire route path (endpoints or intermediate hops).Commits
9f5f24c(Core traceroute pages and analyses reader migration):a6b5542(Full reader migration & legacy cleanup):56de02a(Strict path continuity):e5631de(Fix route_node e2e assertion):test_traceroute_filters_e2e.pyto check the entire route path (endpoints or intermediate hops).Verification
test_traceroute_read_repository.py,test_traceroute_service.py, andtest_traceroute_materialization.pypass.ruff check src/ tests/passes cleanly with no warnings.