#!/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
