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.
43 lines
1.1 KiB
43 lines
1.1 KiB
#!/usr/bin/env python3
|
|
import json
|
|
import subprocess
|
|
|
|
import cereal.messaging as messaging
|
|
from openpilot.common.swaglog import cloudlog
|
|
|
|
|
|
def main():
|
|
pm = messaging.PubMaster(['androidLog'])
|
|
cmd = ['journalctl', '-f', '-o', 'json']
|
|
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, text=True)
|
|
assert proc.stdout is not None
|
|
try:
|
|
for line in proc.stdout:
|
|
line = line.strip()
|
|
if not line:
|
|
continue
|
|
try:
|
|
kv = json.loads(line)
|
|
except json.JSONDecodeError:
|
|
cloudlog.exception("failed to parse journalctl output")
|
|
continue
|
|
|
|
msg = messaging.new_message('androidLog')
|
|
entry = msg.androidLog
|
|
entry.ts = int(kv.get('__REALTIME_TIMESTAMP', 0))
|
|
entry.message = json.dumps(kv)
|
|
if '_PID' in kv:
|
|
entry.pid = int(kv['_PID'])
|
|
if 'PRIORITY' in kv:
|
|
entry.priority = int(kv['PRIORITY'])
|
|
if 'SYSLOG_IDENTIFIER' in kv:
|
|
entry.tag = kv['SYSLOG_IDENTIFIER']
|
|
|
|
pm.send('androidLog', msg)
|
|
finally:
|
|
proc.terminate()
|
|
proc.wait()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
|