From 3b6548d92ae0533851d7ccd0a4ed879bedbc3769 Mon Sep 17 00:00:00 2001 From: Willem Melching Date: Mon, 22 Feb 2021 17:55:47 +0100 Subject: [PATCH] offline usage for filter_log_message.py (#20131) * offline usage for filter_log_message.py * cleanup old-commit-hash: cb9f860e0c985d11cb7610de5b86e2b4ca44353f --- selfdrive/debug/filter_log_message.py | 64 ++++++++++++++++++--------- 1 file changed, 44 insertions(+), 20 deletions(-) diff --git a/selfdrive/debug/filter_log_message.py b/selfdrive/debug/filter_log_message.py index 162a6381bd..4ca69f5e92 100755 --- a/selfdrive/debug/filter_log_message.py +++ b/selfdrive/debug/filter_log_message.py @@ -3,7 +3,8 @@ import argparse import json import cereal.messaging as messaging - +from tools.lib.logreader import LogReader +from tools.lib.route import Route LEVELS = { "DEBUG": 10, @@ -23,32 +24,55 @@ ANDROID_LOG_SOURCE = { } +def print_logmessage(t, msg, min_level): + try: + log = json.loads(msg) + if log['levelnum'] >= min_level: + print(f"[{t / 1e9:.6f}] {log['filename']}:{log.get('lineno', '')} - {log.get('funcname', '')}: {log['msg']}") + except json.decoder.JSONDecodeError: + print(f"[{t / 1e9:.6f}] decode error: {msg}") + + +def print_androidlog(t, msg): + source = ANDROID_LOG_SOURCE[msg.id] + print(f"[{t / 1e9:.6f}] {source} {msg.pid} {msg.tag} - {msg.message}") + + if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--level', default='DEBUG') parser.add_argument('--addr', default='127.0.0.1') - parser.add_argument("socket", type=str, nargs='*', help="socket name") + parser.add_argument("route", type=str, nargs='*', help="route name + segment number for offline usage") args = parser.parse_args() - sm = messaging.SubMaster(['logMessage', 'androidLog'], addr=args.addr) + logs = None + if len(args.route): + r = Route(args.route[0]) + logs = r.log_paths() # TODO: switch to qlogs when logs are in there + + if len(args.route) == 2 and logs: + n = int(args.route[1]) + logs = [logs[n]] min_level = LEVELS[args.level] - while True: - sm.update() - - if sm.updated['logMessage']: - t = sm.logMonoTime['logMessage'] - try: - log = json.loads(sm['logMessage']) - if log['levelnum'] >= min_level: - print(f"[{t / 1e9:.6f}] {log['filename']}:{log.get('lineno', '')} - {log.get('funcname', '')}: {log['msg']}") - except json.decoder.JSONDecodeError: - print(f"[{t / 1e9:.6f}] decode error: {sm['logMessage']}") - - if sm.updated['androidLog']: - t = sm.logMonoTime['androidLog'] - m = sm['androidLog'] - source = ANDROID_LOG_SOURCE[m.id] - print(f"[{t / 1e9:.6f}] {source} {m.pid} {m.tag} - {m.message}") + if logs: + for log in logs: + if log: + lr = LogReader(log) + for m in lr: + if m.which() == 'logMessage': + print_logmessage(m.logMonoTime, m.logMessage, min_level) + elif m.which() == 'androidLog': + print_androidlog(m.logMonoTime, m.androidLog) + else: + sm = messaging.SubMaster(['logMessage', 'androidLog'], addr=args.addr) + while True: + sm.update() + + if sm.updated['logMessage']: + print_logmessage(sm.logMonoTime['logMessage'], sm['logMessage'], min_level) + + if sm.updated['androidLog']: + print_androidlog(sm.logMonoTime['androidLog'], sm['androidLog'])