new files for dumping and parsing logs
[monitor.git] / statistics / harvest_site_history.py
diff --git a/statistics/harvest_site_history.py b/statistics/harvest_site_history.py
new file mode 100755 (executable)
index 0000000..8ec3335
--- /dev/null
@@ -0,0 +1,80 @@
+#!/usr/bin/python
+
+# Collect statistics from myops db on site failures and recovery times.
+# For every site that goes down we need:
+#    * site down time
+#    * site up time
+
+from monitor.database.info.model import *
+from math import *
+import sys
+from datetime import datetime, timedelta
+from monitor.common import *
+
+d_start = datetime(2009, 6, 10)
+d_end = datetime.now()
+
+#print "date_checked,date_changed,timestamp,last_changed,sitename,status"
+print "date,t,sitename,status,length"
+
+if len(sys.argv[1:]) > 0:
+    l = enumerate(sys.argv[1:])
+    l = [(i,HistorySiteRecord.get_by(loginbase=lb)) for i,lb in l ]
+else:
+    l = enumerate(HistorySiteRecord.query.all())
+
+for index,site in l:
+    d = d_start
+
+    time_at_level = 0
+    not_printed = True
+    start = False
+
+    last_level = site.versions[0].penalty_level
+    last_time = site.versions[0].timestamp
+
+    length = len(site.versions)
+    for i,v in enumerate(site.versions[1:]):
+
+        if v.nodes_up < 2 and not start:
+            last_time = v.timestamp
+            start = True
+
+        if v.nodes_up >= 2 and start and v.penalty_level == 0:
+            time_at_level = Time.dt_to_ts(v.timestamp) - Time.dt_to_ts(last_time)
+            print "%s,%s,%s,%s,%s" % (Time.dt_to_ts(v.timestamp), 
+                v.timestamp.strftime("%Y-%m-%d"), v.loginbase, last_level, time_at_level)
+            start = False
+
+        if last_level != v.penalty_level:
+            last_level = v.penalty_level
+
+        #print i,length-2, last_level != v.penalty_level, i == length-2
+        #if last_level != v.penalty_level or i == length-2:
+        #if last_level > v.penalty_level: # or i == length-2:
+            #print "last_time ", last_time
+            #print "diff times", v.timestamp
+            #print "timestamp ", v.timestamp 
+            #print "lastchange", v.last_changed
+        #    time_at_level = Time.dt_to_ts(v.timestamp) - Time.dt_to_ts(last_time)
+        #    print "%s,%s,%s,%s,%s" % (Time.dt_to_ts(v.timestamp), 
+        #        v.timestamp.strftime("%Y-%m-%d"), v.loginbase, last_level, time_at_level)
+
+        #if last_level != v.penalty_level:
+        #    #print "levels mis-match", last_level, v.penalty_level
+        #    last_level = v.penalty_level
+        #    if last_level != 2:
+        #    #    print "recording time", v.timestamp
+        #        last_time = v.timestamp
+
+
+        
+    #while d < d_end:
+#
+#        v = site.get_as_of(d)
+#        if v:
+#            print "%s,%s,%s,%s" % (Time.dt_to_ts(d),
+#                    d.strftime("%Y-%m-%d"), v.loginbase, v.penalty_level)
+##
+#        d += timedelta(1)
+