3 # Collect statistics from myops db on node downtimes.
4 # For every node that goes down we need:
10 # then for each node, order events by time
11 # for each event sequence extract sub-sequences like:
13 # for each such sub-sequence extract
14 # time between down and up
16 from monitor.database.info.model import *
19 from datetime import datetime
21 def find_next(history_list, from_index, node_status):
22 list_len = len(history_list)
23 for i in range(min(list_len-1, from_index), 0, -1):
25 if v.status == node_status:
30 def diff_time(t1, t2):
32 return d.days*60*60*24 + d.seconds
37 for index,node in enumerate(HistoryNodeRecord.query.all()):
38 frequency[node.hostname] = 0
41 #if index > 3: sys.exit(1)
43 if node.hostname == 'planetlab-02.kyushu.jgn2.jp':
44 for h in node.versions:
45 print h.last_checked, h.status
49 i = len(node.versions)
50 ret = find_next(node.versions, i, 'online')
54 print node.last_checked
55 print node.last_changed
56 #if count > 3: sys.exit(1)
58 pairs.append((datetime.now(), node.versions[-1].last_checked))
62 i = find_next(node.versions, i, 'down')
63 i2 = find_next(node.versions, i, 'offline')
64 if i == 0 and i2 == 0:
67 #print i, h1.last_checked, h1.status
68 h2 = node.versions[i2]
69 #print i2, h2.last_checked, h2.status
71 pairs.append((h1.last_checked,h2.last_checked))
72 frequency[node.hostname] += 1
77 times.append(diff_time(p[0],p[1]))
82 for key in hash.keys():
83 if hash[key] not in fk:
85 fk[hash[key]].append(key)
88 freq = flip_key(frequency)
89 freq_list = freq.keys()
92 print f, len(freq[f]), freq[f]
96 for i in range(0,200,1):
109 total += len(bins[k])
110 print k, len(bins[k]), total