sunnypilot/tools/lib
Shane Smiskol dfd387520e
process replay: use zst (#33138)
* test

* update refs to zst

* update
2024-07-30 01:46:03 -07:00
..
tests fix pytest tests (#32867) 2024-06-28 23:58:19 +00:00
README.md segment range docs update (#31560) 2024-02-23 11:50:33 -08:00
__init__.py
api.py ruff: enable UP 2024-05-20 17:43:54 -07:00
auth.py use pyupgrade to update to new typing syntax (#31580) 2024-02-24 16:41:23 -08:00
auth_config.py replace common.file_helpers.mkdirs_exists_ok with python os.makedirs funtion (#30618) 2023-12-06 09:55:29 -08:00
azure_container.py Update to Python 3.12 (#32548) 2024-06-11 20:45:15 +00:00
bootlog.py use pyupgrade to update to new typing syntax (#31580) 2024-02-24 16:41:23 -08:00
cache.py replace common.file_helpers.mkdirs_exists_ok with python os.makedirs funtion (#30618) 2023-12-06 09:55:29 -08:00
comma_car_segments.py cars: platform enums -> prepend brand name (#31927) 2024-03-19 17:29:50 -07:00
exceptions.py
filereader.py logreader: skip internal source if connection refused (#32418) 2024-05-13 16:02:28 -07:00
framereader.py framereader: eliminate tempfile usage (#30289) 2023-10-18 19:48:26 -07:00
helpers.py tools: keep re pattern file small (#33084) 2024-07-25 22:05:10 -07:00
kbhit.py mypy: enable --warn-unused-ignores (#24287) 2022-04-27 14:26:15 -07:00
live_logreader.py Fix msgq context overrides (#33014) 2024-07-18 20:19:39 -07:00
logreader.py process replay: use zst (#33138) 2024-07-30 01:46:03 -07:00
openpilotci.py cleanup azure handling (#31034) 2024-01-17 14:21:47 -08:00
openpilotcontainers.py cleanup azure handling (#31034) 2024-01-17 14:21:47 -08:00
route.py LogReader: support multiple log extensions in route (#33066) 2024-07-24 14:47:33 -07:00
sanitizer.py sanitizer: sanitize vin number (#31090) 2024-01-21 12:22:32 -05:00
url_file.py URLFile: add typing and internalize pool manager (#31466) 2024-02-14 14:09:01 -08:00
vidindex.py use pyupgrade to update to new typing syntax (#31580) 2024-02-24 16:41:23 -08:00

README.md

LogReader

Route is a class for conveniently accessing all the logs from your routes. The LogReader class reads the non-video logs, i.e. rlog.bz2 and qlog.bz2. There's also a matching FrameReader class for reading the videos.

from openpilot.tools.lib.route import Route
from openpilot.tools.lib.logreader import LogReader

r = Route("a2a0ccea32023010|2023-07-27--13-01-19")

# get a list of paths for the route's rlog files
print(r.log_paths())

# and road camera (fcamera.hevc) files
print(r.camera_paths())

# setup a LogReader to read the route's first rlog
lr = LogReader(r.log_paths()[0])

# print out all the messages in the log
import codecs
codecs.register_error("strict", codecs.backslashreplace_errors)
for msg in lr:
  print(msg)

# setup a LogReader for the route's second qlog
lr = LogReader(r.log_paths()[1])

# print all the steering angles values from the log
for msg in lr:
  if msg.which() == "carState":
    print(msg.carState.steeringAngleDeg)

Segment Ranges

We also support a new format called a "segment range":

344c5c15b34f2d8a   /   2024-01-03--09-37-12   /     2:6    /       q
[   dongle id     ] [       timestamp        ] [ selector ]  [ query type]

you can specify which segments from a route to load

lr = LogReader("a2a0ccea32023010|2023-07-27--13-01-19/4")   # 4th segment
lr = LogReader("a2a0ccea32023010|2023-07-27--13-01-19/4:6") # 4th and 5th segment
lr = LogReader("a2a0ccea32023010|2023-07-27--13-01-19/-1")  # last segment
lr = LogReader("a2a0ccea32023010|2023-07-27--13-01-19/:5")  # first 5 segments
lr = LogReader("a2a0ccea32023010|2023-07-27--13-01-19/1:")  # all except first segment

and can select which type of logs to grab

lr = LogReader("a2a0ccea32023010|2023-07-27--13-01-19/4/q") # get qlogs
lr = LogReader("a2a0ccea32023010|2023-07-27--13-01-19/4/r") # get rlogs (default)