#!/usr/bin/env python3
import sys
import math
import datetime
from collections import Counter
from pprint import pprint
from tqdm import tqdm
from typing import cast
from cereal . services import service_list
from tools . lib . route import Route
from tools . lib . logreader import LogReader
if __name__ == " __main__ " :
r = Route ( sys . argv [ 1 ] )
cnt_valid : Counter = Counter ( )
cnt_events : Counter = Counter ( )
cams = [ s for s in service_list if s . endswith ( ' CameraState ' ) ]
cnt_cameras = dict . fromkeys ( cams , 0 )
start_time = math . inf
end_time = - math . inf
for q in tqdm ( r . qlog_paths ( ) ) :
if q is None :
continue
lr = list ( LogReader ( q ) )
for msg in lr :
if msg . which ( ) == ' carEvents ' :
for e in msg . carEvents :
cnt_events [ e . name ] + = 1
elif msg . which ( ) in cams :
cnt_cameras [ msg . which ( ) ] + = 1
if not msg . valid :
cnt_valid [ msg . which ( ) ] + = 1
end_time = max ( end_time , msg . logMonoTime )
start_time = min ( start_time , msg . logMonoTime )
duration = ( end_time - start_time ) / 1e9
print ( " Events " )
pprint ( cnt_events )
print ( " \n " )
print ( " Not valid " )
pprint ( cnt_valid )
print ( " \n " )
print ( " Cameras " )
for k , v in cnt_cameras . items ( ) :
s = service_list [ k ]
expected_frames = int ( s . frequency * duration / cast ( float , s . decimation ) )
print ( " " , k . ljust ( 20 ) , f " { v } , { v / expected_frames : .1% } of expected " )
print ( " \n " )
print ( " Route duration " , datetime . timedelta ( seconds = duration ) )