James Kuszmaul | f35eb98 | 2023-12-09 17:50:01 -0800 | [diff] [blame] | 1 | import http.server as SimpleHTTPServer |
| 2 | from RangeHTTPServer import RangeRequestHandler |
| 3 | import argparse |
| 4 | import os |
| 5 | import shutil |
| 6 | import subprocess |
| 7 | from tempfile import mkdtemp |
| 8 | |
| 9 | parser = argparse.ArgumentParser( |
| 10 | description="""Trims & generates MCAP file from log. |
| 11 | |
| 12 | Serves foxglove locally, and prints out a URL by which the log can be accessed. |
| 13 | |
| 14 | By default, will trim a log to the time period during which the robot was |
| 15 | enabled. Skips this stip if --skip_trim is passed.""") |
| 16 | parser.add_argument('--port', |
| 17 | action='store', |
| 18 | default=8000, |
| 19 | type=int, |
| 20 | help='Specify port on which to serve foxglove.') |
| 21 | parser.add_argument('--skip_trim', |
| 22 | action='store_true', |
| 23 | default=False, |
| 24 | help='If set, do not trim the logfile..') |
| 25 | parser.add_argument('log', |
| 26 | action='store', |
| 27 | default=None, |
| 28 | type=str, |
| 29 | nargs='+', |
| 30 | help='Log(s) to plot.') |
| 31 | args = parser.parse_args() |
| 32 | |
| 33 | tmpdir = mkdtemp(prefix="foxglove_") |
| 34 | shutil.copytree("external/foxglove_studio", tmpdir, dirs_exist_ok=True) |
| 35 | |
| 36 | trimmed_aos_log = args.log if args.skip_trim else [tmpdir + "/trimmed/"] |
| 37 | output_mcap = tmpdir + "/log.mcap" |
| 38 | |
| 39 | if not args.skip_trim: |
| 40 | subprocess.run(["frc971/analysis/trim_log_to_enabled", "--output_folder"] + |
| 41 | trimmed_aos_log + args.log).check_returncode() |
| 42 | subprocess.run(["aos/util/log_to_mcap", "--output_path", output_mcap] + |
| 43 | trimmed_aos_log).check_returncode() |
| 44 | |
| 45 | mcap_url = f"http://localhost:{args.port}/log.mcap" |
| 46 | url_parameters = f"?ds=remote-file&ds.url={mcap_url}" |
| 47 | print(f"Serving files from {tmpdir}") |
| 48 | print(f"Local URL: http://localhost:{args.port}/{url_parameters}") |
| 49 | print(f"Live Website URL: https://studio.foxglove.dev/{url_parameters}") |
| 50 | os.chdir(tmpdir) |
| 51 | SimpleHTTPServer.test(HandlerClass=RangeRequestHandler, port=args.port) |