#!/usr/bin/env python3

import json
import re
import logging
import argparse


def parse_arguments():
    parser = argparse.ArgumentParser(description="startup timings parser")
    parser.add_argument("log", help="snap startup log")
    parser.add_argument(
        "-v", "--verbose", help="verbose", action="store_true", default=False
    )
    return parser.parse_args()


def main(opts):
    if opts.verbose:
        logging.basicConfig(level=logging.DEBUG)

    with open(opts.log, encoding="utf-8") as inf:
        lines = inf.readlines()

    steps = []
    for line in lines:
        match = re.match(r".*-- snap startup ({.*?})", line)
        if match:
            logging.debug("got match: %s", match.group(1))
            cleaned_data = match.group(1).replace('\\"', '"')
            rawdata = json.loads(cleaned_data)
            steps.append(rawdata)
    if not steps:
        print("no logs found")

    total = 0.0
    for idx, current in enumerate(steps):
        if idx == 0:
            last = current
            continue
        diff = float(current["time"]) - float(last["time"])
        total += diff
        print("{2:3f}s\t{0} -> {1}".format(last["stage"], current["stage"], diff))
        last = current

    print("approx. total: {0:3f}s".format(total))


if __name__ == "__main__":
    main(parse_arguments())
