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

