You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							73 lines
						
					
					
						
							2.3 KiB
						
					
					
				
			
		
		
	
	
							73 lines
						
					
					
						
							2.3 KiB
						
					
					
				| #!/usr/bin/env python3
 | |
| import os
 | |
| import sys
 | |
| import argparse
 | |
| import json
 | |
| from hexdump import hexdump
 | |
| import codecs
 | |
| codecs.register_error("strict", codecs.backslashreplace_errors)
 | |
| 
 | |
| from cereal import log
 | |
| import cereal.messaging as messaging
 | |
| from cereal.services import service_list
 | |
| 
 | |
| if __name__ == "__main__":
 | |
| 
 | |
|   parser = argparse.ArgumentParser(description='Dump communication sockets. See cereal/services.py for a complete list of available sockets.')
 | |
|   parser.add_argument('--pipe', action='store_true')
 | |
|   parser.add_argument('--raw', action='store_true')
 | |
|   parser.add_argument('--json', action='store_true')
 | |
|   parser.add_argument('--dump-json', action='store_true')
 | |
|   parser.add_argument('--no-print', action='store_true')
 | |
|   parser.add_argument('--addr', default='127.0.0.1')
 | |
|   parser.add_argument('--values', help='values to monitor (instead of entire event)')
 | |
|   parser.add_argument("socket", type=str, nargs='*', help="socket names to dump. defaults to all services defined in cereal")
 | |
|   args = parser.parse_args()
 | |
| 
 | |
|   if args.addr != "127.0.0.1":
 | |
|     os.environ["ZMQ"] = "1"
 | |
|     messaging.context = messaging.Context()
 | |
| 
 | |
|   poller = messaging.Poller()
 | |
| 
 | |
|   for m in args.socket if len(args.socket) > 0 else service_list:
 | |
|     messaging.sub_sock(m, poller, addr=args.addr)
 | |
| 
 | |
|   values = None
 | |
|   if args.values:
 | |
|     values = [s.strip().split(".") for s in args.values.split(",")]
 | |
| 
 | |
|   while 1:
 | |
|     polld = poller.poll(100)
 | |
|     for sock in polld:
 | |
|       msg = sock.receive()
 | |
|       evt = log.Event.from_bytes(msg)
 | |
| 
 | |
|       if not args.no_print:
 | |
|         if args.pipe:
 | |
|           sys.stdout.write(msg)
 | |
|           sys.stdout.flush()
 | |
|         elif args.raw:
 | |
|           hexdump(msg)
 | |
|         elif args.json:
 | |
|           print(json.loads(msg))
 | |
|         elif args.dump_json:
 | |
|           print(json.dumps(evt.to_dict()))
 | |
|         elif values:
 | |
|           print(f"logMonotime = {evt.logMonoTime}")
 | |
|           for value in values:
 | |
|             if hasattr(evt, value[0]):
 | |
|               item = evt
 | |
|               for key in value:
 | |
|                 item = getattr(item, key)
 | |
|               print(f"{'.'.join(value)} = {item}")
 | |
|           print("")
 | |
|         else:
 | |
|           try:
 | |
|             print(evt)
 | |
|           except UnicodeDecodeError:
 | |
|             w = evt.which()
 | |
|             s = f"( logMonoTime {evt.logMonoTime} \n  {w} = "
 | |
|             s += str(evt.__getattr__(w))
 | |
|             s += f"\n  valid = {evt.valid} )"
 | |
|             print(s)
 | |
| 
 |