#!/usr/bin/env python3 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) try: print( f'{e["ts"]} {e["_HOSTNAME"]} {e["SYSLOG_IDENTIFIER"]}:' f' {e["MESSAGE"]}' ) except Exception: print("Unable to parse msg: " + str(e)) continue