diff options
Diffstat (limited to 'monitor/josef_monitor.py')
-rwxr-xr-x | monitor/josef_monitor.py | 59 |
1 files changed, 33 insertions, 26 deletions
diff --git a/monitor/josef_monitor.py b/monitor/josef_monitor.py index c52f29c..af5067b 100755 --- a/monitor/josef_monitor.py +++ b/monitor/josef_monitor.py @@ -17,21 +17,29 @@ from josef_reader import monitored_domain from josef_leveldb import db_add_certs, db_open import os.path + +parser = argparse.ArgumentParser(description="") +parser.add_argument('--config', default="monitor_conf.py") +args = parser.parse_args() + # Import from config file -if os.path.isfile("monitor_conf.py"): - from monitor_conf import ctlogs, OUTPUT_DIR, INTERVAL, DEFAULT_CERT_FILE, DB_PATH, MONITORED_DOMAINS, DOMAINS_FILE +if os.path.isfile(args.config): + moduleNames = [args.config[:-2]] + modules = map(__import__, moduleNames) + # print modules + CONFIG = modules[0] + # from monitor_conf import ctlogs, OUTPUT_DIR, INTERVAL, DEFAULT_CERT_FILE, DB_PATH, MONITORED_DOMAINS, DOMAINS_FILE else: print "Config file not found!" sys.exit() -if not os.path.exists(OUTPUT_DIR): - os.makedirs(OUTPUT_DIR) +if not os.path.exists(CONFIG.OUTPUT_DIR): + os.makedirs(CONFIG.OUTPUT_DIR) -if not os.path.exists(DB_PATH): - os.makedirs(DB_PATH) +if not os.path.exists(CONFIG.DB_PATH): + os.makedirs(CONFIG.DB_PATH) -parser = argparse.ArgumentParser(description="") class ctlog: def __init__(self, name, url, key, log_id=None): @@ -39,8 +47,8 @@ class ctlog: self.url = url self.key = key self.log_id = log_id - self.logfile = OUTPUT_DIR + name + ".log" - self.savefile = OUTPUT_DIR + name + "-state-info.json" + self.logfile = CONFIG.OUTPUT_DIR + name + ".log" + self.savefile = CONFIG.OUTPUT_DIR + name + "-state-info.json" self.subtree = [[]] self.sth = None self.entries = 0 @@ -71,7 +79,6 @@ class ctlog: else: self.log("ERROR Failed to build tree from entries.") - def fetch_and_increment_subtree(self, first, last, url, subtree =[[]]): new_leafs = [] if first <= last: @@ -84,14 +91,13 @@ class ctlog: tmp_data["leaf_hash"] = base64.b64encode(entry_hash) tmp_cert_data.append(tmp_data) new_leafs.append(entry_hash) - if DB_PATH: - db_add_certs(DB_PATH, tmp_cert_data) - if DEFAULT_CERT_FILE: - append_file(DEFAULT_CERT_FILE, tmp_cert_data) + if CONFIG.DB_PATH: + db_add_certs(CONFIG.DB_PATH, tmp_cert_data) + if CONFIG.DEFAULT_CERT_FILE: + append_file(CONFIG.DEFAULT_CERT_FILE, tmp_cert_data) subtree = reduce_tree(new_leafs, subtree) return subtree, len(new_leafs) + first - def to_dict(self): d = {} d["entries"] = self.entries @@ -141,7 +147,6 @@ class ctlog: self.log("STH updated. Size: " + str(new_sth["tree_size"]) + ", Time: " + sth_time) self.sth = new_sth - def update_roots(self): try: roots = get_all_roots(self.url) @@ -153,7 +158,7 @@ class ctlog: if new_root_hash != self.root_hash: self.root_hash = new_root_hash - cert_dir = OUTPUT_DIR + self.name + "-roots" + cert_dir = CONFIG.OUTPUT_DIR + self.name + "-roots" if not os.path.exists(cert_dir): os.makedirs(cert_dir) @@ -367,14 +372,12 @@ def get_proof_by_index(baseurl, index, tree_size): def get_all_roots(base_url): result = urlopen(base_url + "ct/v1/get-roots").read() certs = json.loads(result)["certificates"] - # print time.strftime('%H:%M:%S') + " Received " + str(len(certs)) + " root certs from " + base_url return certs - def setup_domain_monitoring(): monitored_domains = [] try: - with open(DOMAINS_FILE) as fp: + with open(CONFIG.DOMAINS_FILE) as fp: for line in fp: tmp = json.loads(line) for domain in tmp: @@ -384,7 +387,7 @@ def setup_domain_monitoring(): except IOError: pass - for md in MONITORED_DOMAINS: + for md in CONFIG.MONITORED_DOMAINS: tmp = monitored_domain(md) if not tmp in monitored_domains: print "New domain (not in file) " + md @@ -392,14 +395,18 @@ def setup_domain_monitoring(): monitored_domains.append(tmp) return monitored_domains + +def load_config(path): + pass + def main(args): - global DB + monitored_domains = setup_domain_monitoring() # Create logs logs = [] try: - for item in ctlogs: + for item in CONFIG.CTLOGS: logs.append(ctlog(item["name"], item["url"], item["key"], item["id"])) print time.strftime('%H:%M:%S') + " Setting up monitor for " + str(len(logs)) + " logs..." @@ -439,7 +446,7 @@ def main(args): domain_dict = [] for md in monitored_domains: domain_dict.append(md.to_dict()) - open(DOMAINS_FILE, 'w').write(json.dumps(domain_dict)) + open(CONFIG.DOMAINS_FILE, 'w').write(json.dumps(domain_dict)) # Something went horribly wrong! except Exception, err: @@ -451,12 +458,12 @@ def main(args): domain_dict = [] for md in monitored_domains: domain_dict.append(md.to_dict()) - open(DOMAINS_FILE, 'w').write(json.dumps(domain_dict)) + open(CONFIG.DOMAINS_FILE, 'w').write(json.dumps(domain_dict)) if __name__ == '__main__': - main(parser.parse_args()) + main(args) |