clearer names for actions, and infer actions better
[monitor.git] / statistics / harvest_tt_respond.py
1 #!/usr/bin/python
2
3 # Collect statistics from myops db on node downtimes.
4 # For every site that goes down we need:
5
6 from monitor.database.info.model import *
7 from math import *
8 import sys
9
10 def find_next(history_list, from_index, status):
11         list_len = len(history_list)
12         #for i in range(min(list_len-1, from_index), 0, -1):
13         for i in range(max(0, from_index), list_len, 1):
14                 v = history_list[i]
15                 if status in v.action_type:
16                         return i
17
18         return list_len
19
20 def diff_time(t1, t2):
21         d = t1-t2
22         return d.days*60*60*24 + d.seconds
23
24
25 times = []
26 for index,site in enumerate(HistorySiteRecord.query.all()):
27
28         acts = ActionRecord.query.filter_by(loginbase=site.loginbase).order_by(ActionRecord.date_created.asc()).all()
29         act_len = len(acts)
30         print site.loginbase, act_len
31
32         #for a in acts:
33         #       print a.date_created, a.loginbase, a.action_type
34         i=0
35         pairs = []
36         while i < act_len:
37                 i = find_next(acts, i, 'notice')
38                 i2= find_next(acts, i, 'pause_penalty')
39                 print i, i2
40                 if i == act_len or i2 == act_len:
41                         break
42
43                 print i, i2
44                 a1 = acts[i]
45                 print a1.date_created, a1.loginbase, a1.action_type
46                 a2 = acts[i2]
47                 print a2.date_created, a2.loginbase, a2.action_type
48                 i = i2
49                 pairs.append((a1,a2))
50         
51 #       # list of all times
52 #
53         for p in pairs:
54                 if diff_time(p[1].date_created,p[0].date_created) < 0:
55                         print "fuck!"
56                         sys.exit(1)
57                 times.append(diff_time(p[1].date_created,p[0].date_created))
58
59
60 times.sort()
61 bins = {}
62 for i in range(0,200,1):
63         step = i/2.0
64         bins[step] = []
65         
66 for t in times:
67         t = t/60/60/24
68         b = floor(t*2)/2.0
69         bins[b].append(t)
70
71 keys = bins.keys()
72 keys.sort()
73 total = 0
74 for k in keys:
75         total += len(bins[k])
76         print k, len(bins[k]), total