monitor: Logrotate can call this script multiple times
Consider the last start date to not include same entry multiple times
Showing
... | ... | @@ -15,35 +15,47 @@ def parseArguments(): |
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"]: | ||
last_date = stats_dict["data"][-1]["start-date"] | ||
with open(p) as f: | ||
j = json.load(f) | ||
j_last_date = j['data'][-1]["start-date"] | ||
if last_date == j_last_date: | ||
# This file was already loaded, so skip | ||
continue | ||
|
||
for entry in j['data']: | ||
day = entry["start-date"].split(" ")[0] | ||
day = entry["start-date"].split(" ")[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": 0, | ||
"start-date": "%s 00:00:00" % date, | ||
"message": stat}) | ||
{"status": "ERROR" if stat["ERROR"] > 0 else "OK", | ||
"change-time": now, | ||
"start-date": j_last_date, | ||
"message": stat}) | ||
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": time.time(), "data": []} | ||
stats_dict["data"].extend(stats_list) | ||
... | ... |