count_events.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #!/usr/bin/env python3
  2. import sys
  3. import math
  4. import datetime
  5. from collections import Counter
  6. from pprint import pprint
  7. from tqdm import tqdm
  8. from typing import cast
  9. from cereal.services import service_list
  10. from tools.lib.route import Route
  11. from tools.lib.logreader import LogReader
  12. if __name__ == "__main__":
  13. r = Route(sys.argv[1])
  14. cnt_valid: Counter = Counter()
  15. cnt_events: Counter = Counter()
  16. cams = [s for s in service_list if s.endswith('CameraState')]
  17. cnt_cameras = dict.fromkeys(cams, 0)
  18. start_time = math.inf
  19. end_time = -math.inf
  20. for q in tqdm(r.qlog_paths()):
  21. if q is None:
  22. continue
  23. lr = list(LogReader(q))
  24. for msg in lr:
  25. if msg.which() == 'carEvents':
  26. for e in msg.carEvents:
  27. cnt_events[e.name] += 1
  28. elif msg.which() in cams:
  29. cnt_cameras[msg.which()] += 1
  30. if not msg.valid:
  31. cnt_valid[msg.which()] += 1
  32. end_time = max(end_time, msg.logMonoTime)
  33. start_time = min(start_time, msg.logMonoTime)
  34. duration = (end_time - start_time) / 1e9
  35. print("Events")
  36. pprint(cnt_events)
  37. print("\n")
  38. print("Not valid")
  39. pprint(cnt_valid)
  40. print("\n")
  41. print("Cameras")
  42. for k, v in cnt_cameras.items():
  43. s = service_list[k]
  44. expected_frames = int(s.frequency * duration / cast(float, s.decimation))
  45. print(" ", k.ljust(20), f"{v}, {v/expected_frames:.1%} of expected")
  46. print("\n")
  47. print("Route duration", datetime.timedelta(seconds=duration))