import json import sys import glob import time import os import argparse def parseArguments(): """ Parse arguments for monitor statistics. """ parser = argparse.ArgumentParser() parser.add_argument('--history_folder', help='Path where history files are located and where stats will be generated.') return parser def buildStatistic(history_folder): now = time.time() for p in glob.glob("%s/*.history.json" % history_folder): result = {} stats_list = [] promise_name = p.split("/")[-1].replace(".history.json", "") stat_file_path = p.replace(".history.json", ".stats.json") if os.path.exists(stat_file_path): with open(stat_file_path) as f: stats_dict = json.load(f) f.close() else: stats_dict = {"date": now, "data": []} last_date = None if stats_dict["data"]: if "start-date" in stats_dict["data"][-1]: last_date = stats_dict["data"][-1]["start-date"] else: last_date = stats_dict["data"][-1]["date"] with open(p) as f: j = json.load(f) j_last_date = j['data'][-1]["date"] if last_date == j_last_date: # This file was already loaded, so skip continue for entry in j['data']: day = entry["date"].split("T")[0] result.setdefault(day, {"ERROR": 0, "OK": 0}) result[day][str(entry["status"])] += 1 f.close() for date, stat in result.iteritems(): stats_list.append( {"status": "ERROR" if stat["ERROR"] > 0 else "OK", "change-time": now, "date": j_last_date, "message": stat}) stats_dict["data"].extend(stats_list) with open(stat_file_path, "w+") as f: f.write(json.dumps(stats_dict)) f.truncate() f.close() def main(): arg_parser = parseArguments() config = arg_parser.parse_args() buildStatistic(config.history_folder) sys.exit(0)