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