blob: 6812d6065b5860e76bfb1107ad07a4cefc59bef5 [file] [log] [blame]
import http.server as SimpleHTTPServer
from RangeHTTPServer import RangeRequestHandler
import argparse
import os
import shutil
import subprocess
from tempfile import mkdtemp
parser = argparse.ArgumentParser(
description="""Trims & generates MCAP file from log.
Serves foxglove locally, and prints out a URL by which the log can be accessed.
By default, will trim a log to the time period during which the robot was
enabled. Skips this stip if --skip_trim is passed.""")
parser.add_argument('--port',
action='store',
default=8000,
type=int,
help='Specify port on which to serve foxglove.')
parser.add_argument('--skip_trim',
action='store_true',
default=False,
help='If set, do not trim the logfile..')
parser.add_argument('log',
action='store',
default=None,
type=str,
nargs='+',
help='Log(s) to plot.')
args = parser.parse_args()
tmpdir = mkdtemp(prefix="foxglove_")
shutil.copytree("external/foxglove_studio", tmpdir, dirs_exist_ok=True)
trimmed_aos_log = args.log if args.skip_trim else [tmpdir + "/trimmed/"]
output_mcap = tmpdir + "/log.mcap"
if not args.skip_trim:
subprocess.run(["frc971/analysis/trim_log_to_enabled", "--output_folder"] +
trimmed_aos_log + args.log).check_returncode()
subprocess.run(["aos/util/log_to_mcap", "--output_path", output_mcap] +
trimmed_aos_log).check_returncode()
mcap_url = f"http://localhost:{args.port}/log.mcap"
url_parameters = f"?ds=remote-file&ds.url={mcap_url}"
print(f"Serving files from {tmpdir}")
print(f"Local URL: http://localhost:{args.port}/{url_parameters}")
print(f"Live Website URL: https://studio.foxglove.dev/{url_parameters}")
os.chdir(tmpdir)
SimpleHTTPServer.test(HandlerClass=RangeRequestHandler, port=args.port)