| #!/usr/bin/env python |
| |
| r""" |
| BMC FFDC will at times include the journal in json format |
| (journalctl -o json-pretty ). This is a quick and dirty script which |
| will convert that json output into the standard journalctl output |
| """ |
| |
| import json |
| import re |
| import time |
| from argparse import ArgumentParser |
| |
| |
| def jpretty_to_python(buf): |
| entries = [] |
| |
| for entry in re.findall( |
| '^{$(.+?)^}$', buf, re.DOTALL | re.MULTILINE): |
| entries += [json.loads('{{{}}}'.format(entry))] |
| |
| return entries |
| |
| |
| if __name__ == '__main__': |
| parser = ArgumentParser() |
| parser.add_argument( |
| 'journalfile', metavar='FILE', help='the file to parse') |
| |
| args = parser.parse_args() |
| |
| with open(args.journalfile) as fd: |
| entries = jpretty_to_python(fd.read()) |
| entries = sorted(entries, key=lambda k: k['__REALTIME_TIMESTAMP']) |
| |
| for e in entries: |
| e['ts'] = time.ctime( |
| float(e['__REALTIME_TIMESTAMP']) / 1000000).rstrip() |
| try: |
| print ('{ts} {_HOSTNAME} {SYSLOG_IDENTIFIER}: {MESSAGE}'.format(**e)) |
| except: |
| print ("Unable to parse msg: " + str(e)) |
| continue |