#!/usr/bin/env python3
import os
import sys
import multiprocessing
import subprocess
import argparse
from tempfile import NamedTemporaryFile
from common . basedir import BASEDIR
from selfdrive . test . process_replay . compare_logs import save_log
from tools . lib . route import Route
from tools . lib . logreader import LogReader
from tools . lib . url_file import URLFile
def load_segment ( segment_name ) :
print ( f " Loading { segment_name } " )
lr = LogReader ( segment_name )
r = [ d for d in lr if d . which ( ) not in [ ' can ' , ' sendcan ' ] ]
print ( f " done { segment_name } " )
return r
def juggle_file ( fn ) :
env = os . environ . copy ( )
env [ " BASEDIR " ] = BASEDIR
juggle_dir = os . path . dirname ( os . path . realpath ( __file__ ) )
subprocess . call ( f " bin/plotjuggler -d { fn } " , shell = True , env = env , cwd = juggle_dir )
def juggle_route ( route_name ) :
r = Route ( route_name )
all_data = [ ]
pool = multiprocessing . Pool ( 24 )
all_data = [ ]
for d in pool . map ( load_segment , r . log_paths ( ) ) :
all_data + = d
tempfile = NamedTemporaryFile ( suffix = ' .rlog ' )
save_log ( tempfile . name , all_data , compress = False )
del all_data
juggle_file ( tempfile . name )
def juggle_segment ( route_name , segment_nr ) :
r = Route ( route_name )
lp = r . log_paths ( ) [ segment_nr ]
if lp is None :
print ( " This segment does not exist, please try a different one " )
return
uf = URLFile ( lp )
juggle_file ( uf . name )
def get_arg_parser ( ) :
parser = argparse . ArgumentParser ( description = " PlotJuggler plugin for reading rlogs " ,
formatter_class = argparse . ArgumentDefaultsHelpFormatter )
parser . add_argument ( " route_name " , nargs = ' ? ' , help = " The name of the route that will be plotted. " )
parser . add_argument ( " segment_number " , type = int , nargs = ' ? ' , help = " The index of the segment that will be plotted " )
return parser
if __name__ == " __main__ " :
args = get_arg_parser ( ) . parse_args ( sys . argv [ 1 : ] )
if args . segment_number is None :
juggle_route ( args . route_name )
else :
juggle_segment ( args . route_name , args . segment_number )