From cd9aa86b8a04bc5e88cce26b9ded6ea2149fa8d5 Mon Sep 17 00:00:00 2001 From: Willem Melching Date: Wed, 27 Jul 2022 16:19:19 +0200 Subject: [PATCH] plotjuggler: allow loading ci routes (#25294) * plotjuggler: allow loading ci routes * update readme old-commit-hash: f3be47bc55b2ed50ebe803fb461a6d3002b1fc7c --- tools/plotjuggler/README.md | 9 ++++++--- tools/plotjuggler/juggle.py | 13 ++++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/tools/plotjuggler/README.md b/tools/plotjuggler/README.md index e120edf2fa..25fcb5931a 100644 --- a/tools/plotjuggler/README.md +++ b/tools/plotjuggler/README.md @@ -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: diff --git a/tools/plotjuggler/juggle.py b/tools/plotjuggler/juggle.py index 96ced28349..6f1038ec0d 100755 --- a/tools/plotjuggler/juggle.py +++ b/tools/plotjuggler/juggle.py @@ -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)