Files
dragonpilot/selfdrive/debug/dump.py

97 lines
3.0 KiB
Python
Raw Normal View History

2019-10-09 18:43:53 +00:00
#!/usr/bin/env python3
2017-01-09 20:59:00 -08:00
import sys
import argparse
import zmq
2017-10-31 02:27:39 -07:00
import json
2017-01-09 20:59:00 -08:00
from hexdump import hexdump
2018-03-17 00:01:50 -07:00
from threading import Thread
2017-01-09 20:59:00 -08:00
2018-03-17 00:01:50 -07:00
from cereal import log
2017-01-09 20:59:00 -08:00
import selfdrive.messaging as messaging
2017-05-11 12:41:17 -07:00
from selfdrive.services import service_list
2017-01-09 20:59:00 -08:00
2018-03-17 00:01:50 -07:00
def run_server(socketio):
socketio.run(app, host='0.0.0.0', port=4000)
2017-01-09 20:59:00 -08:00
if __name__ == "__main__":
poller = zmq.Poller()
parser = argparse.ArgumentParser(description='Sniff a communcation socket')
2018-01-18 15:46:12 -08:00
parser.add_argument('--pipe', action='store_true')
2017-01-09 20:59:00 -08:00
parser.add_argument('--raw', action='store_true')
2017-10-31 02:27:39 -07:00
parser.add_argument('--json', action='store_true')
2018-01-30 12:58:14 -08:00
parser.add_argument('--dump-json', action='store_true')
2018-03-17 00:01:50 -07:00
parser.add_argument('--no-print', action='store_true')
parser.add_argument('--proxy', action='store_true', help='republish on localhost')
parser.add_argument('--map', action='store_true')
2017-10-31 02:27:39 -07:00
parser.add_argument('--addr', default='127.0.0.1')
2019-02-20 01:39:02 +00:00
parser.add_argument('--values', help='values to monitor (instead of entire event)')
2017-05-11 12:41:17 -07:00
parser.add_argument("socket", type=str, nargs='*', help="socket name")
2017-01-09 20:59:00 -08:00
args = parser.parse_args()
2018-03-17 00:01:50 -07:00
republish_socks = {}
2017-05-11 12:41:17 -07:00
for m in args.socket if len(args.socket) > 0 else service_list:
2017-10-31 02:27:39 -07:00
if m in service_list:
2018-03-17 00:01:50 -07:00
port = service_list[m].port
2017-10-31 02:27:39 -07:00
elif m.isdigit():
2018-03-17 00:01:50 -07:00
port = int(m)
2017-10-31 02:27:39 -07:00
else:
print("service not found")
sys.exit(-1)
2019-06-28 21:11:30 +00:00
sock = messaging.sub_sock(port, poller, addr=args.addr)
2018-03-17 00:01:50 -07:00
if args.proxy:
2019-06-28 21:11:30 +00:00
republish_socks[sock] = messaging.pub_sock(port)
2018-03-17 00:01:50 -07:00
if args.map:
2018-03-31 07:33:16 +00:00
from flask.ext.socketio import SocketIO #pylint: disable=no-name-in-module, import-error
2018-03-17 00:01:50 -07:00
from flask import Flask
app = Flask(__name__)
socketio = SocketIO(app, async_mode='threading')
server_thread = Thread(target=run_server, args=(socketio,))
server_thread.daemon = True
server_thread.start()
2019-04-23 01:41:19 +00:00
print('server running')
2017-01-09 20:59:00 -08:00
2019-02-20 01:39:02 +00:00
values = None
if args.values:
values = [s.strip().split(".") for s in args.values.split(",")]
2017-01-09 20:59:00 -08:00
while 1:
polld = poller.poll(timeout=1000)
for sock, mode in polld:
if mode != zmq.POLLIN:
continue
2018-03-17 00:01:50 -07:00
msg = sock.recv()
evt = log.Event.from_bytes(msg)
if sock in republish_socks:
republish_socks[sock].send(msg)
if args.map and evt.which() == 'liveLocation':
2019-04-23 01:41:19 +00:00
print('send loc')
2018-03-31 07:33:16 +00:00
socketio.emit('location', {
2018-03-17 00:01:50 -07:00
'lat': evt.liveLocation.lat,
'lon': evt.liveLocation.lon,
'alt': evt.liveLocation.alt,
})
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:
2019-04-23 01:41:19 +00:00
print(json.dumps(evt.to_dict()))
2019-02-20 01:39:02 +00:00
elif values:
2019-04-23 01:41:19 +00:00
print("logMonotime = {}".format(evt.logMonoTime))
2019-02-20 01:39:02 +00:00
for value in values:
if hasattr(evt, value[0]):
item = evt
for key in value:
item = getattr(item, key)
2019-04-23 01:41:19 +00:00
print("{} = {}".format(".".join(value), item))
print("")
2018-03-17 00:01:50 -07:00
else:
2019-04-23 01:41:19 +00:00
print(evt)