parent
							
								
									b805200194
								
							
						
					
					
						commit
						526d0c3d53
					
				
				 1 changed files with 57 additions and 0 deletions
			
			
		@ -0,0 +1,57 @@ | 
				
			||||
#!/usr/bin/env python3 | 
				
			||||
import argparse | 
				
			||||
import bz2 | 
				
			||||
from collections import defaultdict | 
				
			||||
 | 
				
			||||
import matplotlib.pyplot as plt | 
				
			||||
 | 
				
			||||
from cereal.services import service_list | 
				
			||||
from tools.lib.logreader import LogReader | 
				
			||||
from tools.lib.route import Route | 
				
			||||
 | 
				
			||||
MIN_SIZE = 0.5  # Percent size of total to show as separate entry | 
				
			||||
 | 
				
			||||
 | 
				
			||||
def make_pie(msgs, typ): | 
				
			||||
  compressed_length_by_type = {k: len(bz2.compress(b"".join(v))) for k, v in msgs.items()} | 
				
			||||
 | 
				
			||||
  total = sum(compressed_length_by_type.values()) | 
				
			||||
 | 
				
			||||
  sizes = sorted(compressed_length_by_type.items(), key=lambda kv: kv[1]) | 
				
			||||
 | 
				
			||||
  sizes_large = [(k, sz) for (k, sz) in sizes if sz >= total * MIN_SIZE / 100] | 
				
			||||
  sizes_large += [('other', sum([sz for (_, sz) in sizes if sz < total * MIN_SIZE / 100]))] | 
				
			||||
 | 
				
			||||
  labels, sizes = zip(*sizes_large) | 
				
			||||
 | 
				
			||||
  plt.figure() | 
				
			||||
  plt.title(f"{typ}") | 
				
			||||
  plt.pie(sizes, labels=labels, autopct='%1.1f%%') | 
				
			||||
 | 
				
			||||
 | 
				
			||||
if __name__ == "__main__": | 
				
			||||
  parser = argparse.ArgumentParser(description='Check qlog size based on a rlog') | 
				
			||||
  parser.add_argument('route', help='route to use') | 
				
			||||
  parser.add_argument('segment', type=int, help='segment number to use') | 
				
			||||
  args = parser.parse_args() | 
				
			||||
 | 
				
			||||
  r = Route(args.route) | 
				
			||||
  rlog = r.log_paths()[args.segment] | 
				
			||||
  msgs = list(LogReader(rlog)) | 
				
			||||
 | 
				
			||||
  msgs_by_type = defaultdict(list) | 
				
			||||
  for m in msgs: | 
				
			||||
    msgs_by_type[m.which()].append(m.as_builder().to_bytes()) | 
				
			||||
 | 
				
			||||
  qlog_by_type = defaultdict(list) | 
				
			||||
  for name, service in service_list.items(): | 
				
			||||
    if service.decimation is None: | 
				
			||||
      continue | 
				
			||||
 | 
				
			||||
    for i, msg in enumerate(msgs_by_type[name]): | 
				
			||||
      if i % service.decimation == 0: | 
				
			||||
        qlog_by_type[name].append(msg) | 
				
			||||
 | 
				
			||||
  make_pie(msgs_by_type, 'rlog') | 
				
			||||
  make_pie(qlog_by_type, 'qlog') | 
				
			||||
  plt.show() | 
				
			||||
					Loading…
					
					
				
		Reference in new issue