summaryrefslogtreecommitdiffstats
path: root/retiolum/scripts/adv_graphgen/tinc_graphs/Availability.py
diff options
context:
space:
mode:
Diffstat (limited to 'retiolum/scripts/adv_graphgen/tinc_graphs/Availability.py')
-rwxr-xr-xretiolum/scripts/adv_graphgen/tinc_graphs/Availability.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/retiolum/scripts/adv_graphgen/tinc_graphs/Availability.py b/retiolum/scripts/adv_graphgen/tinc_graphs/Availability.py
new file mode 100755
index 00000000..42f28ef9
--- /dev/null
+++ b/retiolum/scripts/adv_graphgen/tinc_graphs/Availability.py
@@ -0,0 +1,60 @@
+#!/usr/bin/python
+# -*- coding: utf8 -*-
+
+import sys,json,os
+""" TODO: Refactoring needed to pull the edges out of the node structures again,
+it should be easier to handle both structures"""
+DUMP_FILE = os.environment.get("AVAILABILITY_FILE","tinc-availability.json")
+hostpath=os.environment.get("TINC_HOSTPATH", "/etc/tinc/retiolum/hosts")
+
+def get_all_nodes():
+ return os.listdir(hostpath)
+
+def generate_stats():
+ """ Generates availability statistics of the network and nodes
+ """
+ import json
+ jlines = []
+ try:
+ f = open(DUMP_FILE,'r')
+ for line in f:
+ jlines.append(json.loads(line))
+ f.close()
+ except Exception as e:
+ print("Unable to open and parse Availability DB: {} (override with AVAILABILITY_FILE)".format(DUMP_FILE)
+ sys.exit(1)
+
+ all_nodes = {}
+ for k in get_all_nodes():
+ all_nodes[k] = get_node_availability(k,jlines)
+ print (json.dumps(all_nodes))
+
+def get_node_availability(name,jlines):
+ """ calculates the node availability by reading the generated dump file
+ adding together the uptime of the node and returning the time
+ parms:
+ name - node name
+ jlines - list of already parsed dictionaries node archive
+ """
+ begin = last = current = 0
+ uptime = 0
+ for stat in jlines:
+ if not stat['nodes']:
+ continue
+ ts = stat['timestamp']
+ if not begin:
+ begin = last = ts
+ current = ts
+ if stat['nodes'].get(name,{}).get('to',[]):
+ uptime += current - last
+ else:
+ pass
+ last = ts
+ all_the_time = last - begin
+ try:
+ return uptime/ all_the_time
+ except:
+ return 1
+
+if __name__ == "__main__":
+ generate_stats()