#!/usr/bin/env python3
import sys
import time
import numpy as np
import datetime
from collections . abc import MutableSequence
from collections import defaultdict
import cereal . messaging as messaging
if __name__ == " __main__ " :
ts : defaultdict [ str , MutableSequence [ float ] ] = defaultdict ( list )
socks = { s : messaging . sub_sock ( s , conflate = False ) for s in sys . argv [ 1 : ] }
try :
st = time . monotonic ( )
while True :
print ( )
for s , sock in socks . items ( ) :
msgs = messaging . drain_sock ( sock )
for m in msgs :
ts [ s ] . append ( m . logMonoTime / 1e6 )
if len ( ts [ s ] ) > 2 :
d = np . diff ( ts [ s ] ) [ - 100 : ]
print ( f " { s : 25 } { np . mean ( d ) : 7.2f } { np . std ( d ) : 7.2f } { np . max ( d ) : 7.2f } { np . min ( d ) : 7.2f } " )
time . sleep ( 1 )
except KeyboardInterrupt :
print ( " \n " )
print ( " = " * 5 , " timing summary " , " = " * 5 )
for s , sock in socks . items ( ) :
msgs = messaging . drain_sock ( sock )
if len ( ts [ s ] ) > 2 :
d = np . diff ( ts [ s ] )
print ( f " { s : 25 } { np . mean ( d ) : 7.2f } { np . std ( d ) : 7.2f } { np . max ( d ) : 7.2f } { np . min ( d ) : 7.2f } " )
print ( " = " * 5 , datetime . timedelta ( seconds = time . monotonic ( ) - st ) , " = " * 5 )