#!/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))