clearer names for actions, and infer actions better
[monitor.git] / statistics / harvest_site_history.py
1 #!/usr/bin/python
2
3 # Collect statistics from myops db on site failures and recovery times.
4 # For every site that goes down we need:
5 #    * site down time
6 #    * site up time
7
8 from monitor.database.info.model import *
9 from math import *
10 import sys
11 from datetime import datetime, timedelta
12 from monitor.common import *
13
14 d_start = datetime(2009, 6, 10)
15 d_end = datetime.now()
16
17 #print "date_checked,date_changed,timestamp,last_changed,sitename,status"
18 print "date,t,sitename,status,length"
19
20 if len(sys.argv[1:]) > 0:
21     l = enumerate(sys.argv[1:])
22     l = [(i,HistorySiteRecord.get_by(loginbase=lb)) for i,lb in l ]
23 else:
24     l = enumerate(HistorySiteRecord.query.all())
25
26 for index,site in l:
27     d = d_start
28
29     time_at_level = 0
30     not_printed = True
31     start = False
32
33     last_level = site.versions[0].penalty_level
34     last_time = site.versions[0].timestamp
35
36     length = len(site.versions)
37     for i,v in enumerate(site.versions[1:]):
38
39         if v.nodes_up < 2 and not start:
40             last_time = v.timestamp
41             start = True
42
43         if v.nodes_up >= 2 and start and v.penalty_level == 0:
44             time_at_level = Time.dt_to_ts(v.timestamp) - Time.dt_to_ts(last_time)
45             print "%s,%s,%s,%s,%s" % (Time.dt_to_ts(v.timestamp), 
46                 v.timestamp.strftime("%Y-%m-%d"), v.loginbase, last_level, time_at_level)
47             start = False
48
49         if last_level != v.penalty_level:
50             last_level = v.penalty_level
51
52         #print i,length-2, last_level != v.penalty_level, i == length-2
53         #if last_level != v.penalty_level or i == length-2:
54         #if last_level > v.penalty_level: # or i == length-2:
55             #print "last_time ", last_time
56             #print "diff times", v.timestamp
57             #print "timestamp ", v.timestamp 
58             #print "lastchange", v.last_changed
59         #    time_at_level = Time.dt_to_ts(v.timestamp) - Time.dt_to_ts(last_time)
60         #    print "%s,%s,%s,%s,%s" % (Time.dt_to_ts(v.timestamp), 
61         #        v.timestamp.strftime("%Y-%m-%d"), v.loginbase, last_level, time_at_level)
62
63         #if last_level != v.penalty_level:
64         #    #print "levels mis-match", last_level, v.penalty_level
65         #    last_level = v.penalty_level
66         #    if last_level != 2:
67         #    #    print "recording time", v.timestamp
68         #        last_time = v.timestamp
69
70
71         
72     #while d < d_end:
73 #
74 #        v = site.get_as_of(d)
75 #        if v:
76 #            print "%s,%s,%s,%s" % (Time.dt_to_ts(d),
77 #                    d.strftime("%Y-%m-%d"), v.loginbase, v.penalty_level)
78 ##
79 #        d += timedelta(1)
80