A completed traceroute is observed as a response packet, whose from/to are
reversed with respect to the path being traced: `to` is the node that started
the traceroute and `from` is the node that answered. Meshview assembled paths
as [from, *route, to], so both endpoint-adjacent edges were wrong for every
completed traceroute with at least one intermediate hop. Because the false
edges always attach to the endpoints, a busy initiator or gateway accumulated
false direct links to every remote target it ever traced.
Confirmed against TraceRouteModule::alterReceivedProtobuf, which renders a
response as printRoute(r, p.to, p.from, false), against the meshtastic python
CLI, which starts the forward path at p["to"] and the return path at p["from"],
and against real recorded traceroutes where a request's route[] is a prefix of
the matching response's route[].
Add meshview/traceroute.py and use it from /api/edges, /api/traceroute and
graph_traceroute, which had three separate copies of this logic that had all
drifted. /api/traceroute also gains initiator/target so the traceroute page
stops re-deriving the endpoints itself, which is where a fourth copy lived.
While in /api/edges, skip the NODENUM_BROADCAST placeholders that
insertUnknownHops() writes into route[] (they became a pseudo-node hub in the
graph) and guard against the (gateway, gateway) self edge that
graph_traceroute already guarded against.
* Add alembic DB schema management (#86)
* Use alembic
* add creation helper
* example migration tool
* Store UTC int time in DB (#81)
* use UTC int time
* Remove old index notes script -- no longer needed
* modify alembic to support cleaner migrations
* add /version json endpoint
* move technical docs
* remove old migrate script
* add readme in docs:
* more doc tidy
* rm
* update api docs
* ignore other database files
* health endpoint
* alembic log format
* break out api calls in to their own file to reduce footprint
* ruff and docs
* vuln
* Improves arguments in mvrun.py
* Set dbcleanup.log location configurable
* mvrun work
* fallback if missing config
* remove unused loop
* improve migrations and fix logging problem with mqtt
* Container using slim/uv
* auto build containers
* symlink
* fix symlink
* checkout and containerfile
* make /app owned by ap0p
* Traceroute Return Path logged and displayed (#97)
* traceroute returns are now logged and /packetlist now graphs the correct data for a return route
* now using alembic to update schema
* HOWTO - Alembic
---------
Co-authored-by: Joel Krauska <jkrauska@gmail.com>
* DB Backups
* backups and cleanups are different
* ruff
* Docker Docs
* setup-dev
* graphviz for dot in Container
* Summary of 3.0.0 stuff
* Alembic was blocking mqtt logs
* Add us first/last timestamps to node table too
* Worked on /api/packet. Needed to modify
- Store.py to read the new time data
- api.py to present the new time data
- firehose.html chat.html and map.html now use the new apis and the time is the browser local time
* Worked on /api/packet. Needed to modify
- Store.py to read the new time data
- api.py to present the new time data
- firehose.html chat.html and map.html now use the new apis and the time is the browser local time
* Improves container build (#94)
* Worked on /api/packet. Needed to modify
- Store.py to read the new time data
- api.py to present the new time data
- firehose.html chat.html and map.html now use the new apis and the time is the browser local time
* Worked on /api/packet. Needed to modify
- Store.py to read the new time data
- api.py to present the new time data
- firehose.html chat.html and map.html now use the new apis and the time is the browser local time
* Worked on /api/packet. Needed to modify
- Added new api endpoint /api/packets_seen
- Modified web.py and store.py to support changes to APIs.
- Started to work on new_node.html and new_packet.html for presentation of data.
* Worked on /api/packet. Needed to modify
- Added new api endpoint /api/packets_seen
- Modified web.py and store.py to support changes to APIs.
- Started to work on new_node.html and new_packet.html for presentation of data.
* Finishing up all the pages for the 3.0 release.
Now all pages are functional.
* Finishing up all the pages for the 3.0 release.
Now all pages are functional.
* fix ruff format
* more ruff
* Finishing up all the pages for the 3.0 release.
Now all pages are functional.
* Finishing up all the pages for the 3.0 release.
Now all pages are functional.
* pyproject.toml requirements
* use sys.executable
* fix 0 epoch dates in /chat
* Make the robots do our bidding
* another compatibility fix when _us is empty and we need to sort by BOTH old and new
* Finishing up all the pages for the 3.0 release.
Now all pages are functional.
* Finishing up all the pages for the 3.0 release.
Now all pages are functional.
* Remamed new_node to node. shorter and descriptive.
* Remamed new_node to node. shorter and descriptive.
* Remamed new_node to node. shorter and descriptive.
* Remamed new_node to node. shorter and descriptive.
* Remamed new_node to node. shorter and descriptive.
* Remamed new_node to node. shorter and descriptive.
* More changes... almost ready for release.
Ranamed 2 pages for easy or reading.
* Fix the net page as it was not showing the date information
* Fix the net page as it was not showing the date information
* Fix the net page as it was not showing the date information
* Fix the net page as it was not showing the date information
* ruff
---------
Co-authored-by: Óscar García Amor <ogarcia@connectical.com>
Co-authored-by: Jim Schrempp <jschrempp@users.noreply.github.com>
Co-authored-by: Pablo Revilla <pablorevilla@gmail.com>