Commit c1673418 authored by Rafael Monnerat's avatar Rafael Monnerat

monitor: Automatic build statistics on promise hisotry for archive.

parent 82cf4505
......@@ -86,6 +86,7 @@ setup(name=name,
'killpidfromfile = slapos.systool:killpidfromfile', # BBB
'monitor.bootstrap = slapos.monitor.monitor:main',
'monitor.collect = slapos.monitor.collect:main',
'monitor.statistic = slapos.monitor.build_statistic:main',
'monitor.runpromise = slapos.monitor.runpromise:main',
'monitor.genstatus = slapos.monitor.globalstate:main',
'monitor.configwrite = slapos.monitor.monitor_config_write:main',
......
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):
for p in glob.glob("%s/*.history.json" % history_folder):
result = {}
stats_list = []
promise_name = p.split("/")[-1].replace(".history.json", "")
with open(p) as f:
j = json.load(f)
for entry in j['data']:
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})
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)
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)
......@@ -80,6 +80,7 @@ class Monitoring(object):
self.private_folder = config.get("monitor", "private-folder")
self.collector_db = config.get("monitor", "collector-db")
self.collect_script = config.get("monitor", "collect-script")
self.statistic_script = config.get("monitor", "statistic-script")
self.webdav_folder = config.get("monitor", "webdav-folder")
self.report_script_folder = config.get("monitor", "report-folder")
self.webdav_url = '%s/share' % config.get("monitor", "base-url")
......@@ -495,7 +496,9 @@ class Monitoring(object):
# Rotate public history status file, delete data of previous days
option_list = [
'daily', 'nocreate', 'rotate 0',
'nocompress', 'notifempty'
'nocompress', 'notifempty', 'prerotate',
' %s --history_folder %s' % (self.statistic_script, self.public_folder),
'endscript'
]
file_list = ["%s/*.history.json" % self.public_folder]
self.generateLogrotateEntry('monitor.service.status', file_list, option_list)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment