plotjuggler: allow loading ci routes (#25294)

* plotjuggler: allow loading ci routes

* update readme
old-commit-hash: f3be47bc55
taco
Willem Melching 3 years ago committed by GitHub
parent 81389c508b
commit cd9aa86b8a
  1. 9
      tools/plotjuggler/README.md
  2. 13
      tools/plotjuggler/juggle.py

@ -12,7 +12,8 @@ Once you've cloned and are in openpilot, this command will download PlotJuggler
```
$ ./juggle.py -h
usage: juggle.py [-h] [--demo] [--qlog] [--can] [--stream] [--layout [LAYOUT]] [--install] [--dbc DBC] [route_or_segment_name] [segment_count]
usage: juggle.py [-h] [--demo] [--qlog] [--ci] [--can] [--stream] [--layout [LAYOUT]] [--install] [--dbc DBC]
[route_or_segment_name] [segment_count]
A helper to run PlotJuggler on openpilot routes
@ -25,12 +26,14 @@ optional arguments:
-h, --help show this help message and exit
--demo Use the demo route instead of providing one (default: False)
--qlog Use qlogs (default: False)
--ci Download data from openpilot CI bucket (default: False)
--can Parse CAN data (default: False)
--stream Start PlotJuggler in streaming mode (default: False)
--layout [LAYOUT] Run PlotJuggler with a pre-defined layout (default: None)
--install Install or update PlotJuggler + plugins (default: False)
--dbc DBC Set the DBC name to load for parsing CAN data. If not set, the DBC will be
automatically inferred from the logs. (default: None)
--dbc DBC Set the DBC name to load for parsing CAN data. If not set, the DBC will be automatically
inferred from the logs. (default: None)
```
Examples using route name:

@ -12,6 +12,7 @@ import argparse
from common.basedir import BASEDIR
from selfdrive.test.process_replay.compare_logs import save_log
from selfdrive.test.openpilotci import get_url
from tools.lib.logreader import LogReader
from tools.lib.route import Route, SegmentName
from urllib.parse import urlparse, parse_qs
@ -51,7 +52,7 @@ def load_segment(segment_name):
try:
return list(LogReader(segment_name))
except ValueError as e:
except (AssertionError, ValueError) as e:
print(f"Error parsing {segment_name}: {e}")
return []
@ -73,7 +74,7 @@ def start_juggler(fn=None, dbc=None, layout=None):
subprocess.call(cmd, shell=True, env=env, cwd=juggle_dir)
def juggle_route(route_or_segment_name, segment_count, qlog, can, layout, dbc=None):
def juggle_route(route_or_segment_name, segment_count, qlog, can, layout, dbc=None, ci=False):
segment_start = 0
if 'cabana' in route_or_segment_name:
query = parse_qs(urlparse(route_or_segment_name).query)
@ -81,6 +82,11 @@ def juggle_route(route_or_segment_name, segment_count, qlog, can, layout, dbc=No
if route_or_segment_name.startswith(("http://", "https://")) or os.path.isfile(route_or_segment_name):
logs = [route_or_segment_name]
elif ci:
route_or_segment_name = SegmentName(route_or_segment_name, allow_route_name=True)
route = route_or_segment_name.route_name.canonical_name
segment_start = max(route_or_segment_name.segment_num, 0)
logs = [get_url(route, i) for i in range(100)] # Assume there not more than 100 segments
else:
route_or_segment_name = SegmentName(route_or_segment_name, allow_route_name=True)
segment_start = max(route_or_segment_name.segment_num, 0)
@ -132,6 +138,7 @@ if __name__ == "__main__":
parser.add_argument("--demo", action="store_true", help="Use the demo route instead of providing one")
parser.add_argument("--qlog", action="store_true", help="Use qlogs")
parser.add_argument("--ci", action="store_true", help="Download data from openpilot CI bucket")
parser.add_argument("--can", action="store_true", help="Parse CAN data")
parser.add_argument("--stream", action="store_true", help="Start PlotJuggler in streaming mode")
parser.add_argument("--layout", nargs='?', help="Run PlotJuggler with a pre-defined layout")
@ -157,4 +164,4 @@ if __name__ == "__main__":
start_juggler(layout=args.layout)
else:
route_or_segment_name = DEMO_ROUTE if args.demo else args.route_or_segment_name.strip()
juggle_route(route_or_segment_name, args.segment_count, args.qlog, args.can, args.layout, args.dbc)
juggle_route(route_or_segment_name, args.segment_count, args.qlog, args.can, args.layout, args.dbc, args.ci)

Loading…
Cancel
Save