LogReader: live_logreader helpers (#31416)

live helper
old-commit-hash: 0a92c5bf96
chrysler-long2
Justin Newberry 1 year ago committed by GitHub
parent adcac1f207
commit fbf5ada69f
  1. 26
      selfdrive/debug/dump.py
  2. 29
      tools/lib/logreader.py

@ -1,14 +1,14 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os
import sys import sys
import argparse import argparse
import json import json
import codecs import codecs
import cereal.messaging as messaging
from hexdump import hexdump from hexdump import hexdump
from cereal import log from cereal import log
from cereal.services import SERVICE_LIST from cereal.services import SERVICE_LIST
from openpilot.tools.lib.logreader import raw_live_logreader
codecs.register_error("strict", codecs.backslashreplace_errors) codecs.register_error("strict", codecs.backslashreplace_errors)
@ -22,32 +22,20 @@ if __name__ == "__main__":
parser.add_argument('--no-print', action='store_true') parser.add_argument('--no-print', action='store_true')
parser.add_argument('--addr', default='127.0.0.1') parser.add_argument('--addr', default='127.0.0.1')
parser.add_argument('--values', help='values to monitor (instead of entire event)') parser.add_argument('--values', help='values to monitor (instead of entire event)')
parser.add_argument("socket", type=str, nargs='*', help="socket names to dump. defaults to all services defined in cereal") parser.add_argument("socket", type=str, nargs='*', default=list(SERVICE_LIST.keys()), help="socket names to dump. defaults to all services defined in cereal")
args = parser.parse_args() args = parser.parse_args()
if args.addr != "127.0.0.1": lr = raw_live_logreader(args.socket, args.addr)
os.environ["ZMQ"] = "1"
messaging.context = messaging.Context()
poller = messaging.Poller()
for m in args.socket if len(args.socket) > 0 else SERVICE_LIST:
messaging.sub_sock(m, poller, addr=args.addr)
values = None values = None
if args.values: if args.values:
values = [s.strip().split(".") for s in args.values.split(",")] values = [s.strip().split(".") for s in args.values.split(",")]
while 1: for msg in lr:
polld = poller.poll(100) with log.Event.from_bytes(msg) as evt:
for sock in polld:
msg = sock.receive()
with log.Event.from_bytes(msg) as log_evt:
evt = log_evt
if not args.no_print: if not args.no_print:
if args.pipe: if args.pipe:
sys.stdout.write(msg) sys.stdout.write(str(msg))
sys.stdout.flush() sys.stdout.flush()
elif args.raw: elif args.raw:
hexdump(msg) hexdump(msg)

@ -16,7 +16,8 @@ import warnings
from typing import Dict, Iterable, Iterator, List, Type from typing import Dict, Iterable, Iterator, List, Type
from urllib.parse import parse_qs, urlparse from urllib.parse import parse_qs, urlparse
from cereal import log as capnp_log from cereal import log as capnp_log, messaging
from cereal.services import SERVICE_LIST
from openpilot.common.swaglog import cloudlog from openpilot.common.swaglog import cloudlog
from openpilot.tools.lib.comma_car_segments import get_url as get_comma_segments_url from openpilot.tools.lib.comma_car_segments import get_url as get_comma_segments_url
from openpilot.tools.lib.openpilotci import get_url from openpilot.tools.lib.openpilotci import get_url
@ -26,6 +27,7 @@ from openpilot.tools.lib.route import Route, SegmentRange
LogMessage = Type[capnp._DynamicStructReader] LogMessage = Type[capnp._DynamicStructReader]
LogIterable = Iterable[LogMessage] LogIterable = Iterable[LogMessage]
RawLogIterable = Iterable[bytes]
class _LogFileReader: class _LogFileReader:
@ -292,6 +294,31 @@ are uploaded or auto fallback to qlogs with '/a' selector at the end of the rout
return next(self.filter(msg_type), None) return next(self.filter(msg_type), None)
ALL_SERVICES = list(SERVICE_LIST.keys())
def raw_live_logreader(services: List[str] = ALL_SERVICES, addr: str = '127.0.0.1') -> RawLogIterable:
if addr != "127.0.0.1":
os.environ["ZMQ"] = "1"
messaging.context = messaging.Context()
poller = messaging.Poller()
for m in services:
messaging.sub_sock(m, poller, addr=addr)
while True:
polld = poller.poll(100)
for sock in polld:
msg = sock.receive()
yield msg
def live_logreader(services: List[str] = ALL_SERVICES, addr: str = '127.0.0.1') -> LogIterable:
for m in raw_live_logreader(services, addr):
with capnp_log.Event.from_bytes(m) as evt:
yield evt
if __name__ == "__main__": if __name__ == "__main__":
import codecs import codecs
# capnproto <= 0.8.0 throws errors converting byte data to string # capnproto <= 0.8.0 throws errors converting byte data to string

Loading…
Cancel
Save