remove a lot of deprecated files ;
[monitor.git] / www / siteactions.cgi
1 #!/usr/bin/python
2
3 # Read in the act_* databases and print out a human readable version
4
5 import sys
6 import time
7 import getopt
8 import soltesz
9
10
11 def fields_to_html(fields):
12         colorMap = { 'PING'  : 'darkseagreen',
13                                  'NOPING': 'darksalmon',
14                                  'SSH': 'darkseagreen',
15                                  'NOSSH': 'indianred',
16                                  'PCU': 'darkseagreen',
17                                  'NOPCU': 'lightgrey',
18                                  'OLDBOOTCD': 'crimson',
19                                  'DOWN': 'indianred',
20                                  'ALPHA': 'gold',
21                                  'ERROR': 'crimson',
22                                  'PROD': 'darkseagreen',
23                                  'DEBUG': 'darksalmon',
24                                  'DEBUG': 'darksalmon',
25                                  'BOOT': 'lightgreen'}
26         r_str = ""
27         for f in fields:
28                 if f in colorMap:
29                         bgcolor="bgcolor='%s'" % colorMap[f]
30                 else:
31                         bgcolor=""
32                 r_str += "<td nowrap %s>%s</td>" % (bgcolor, f)
33         
34         return r_str
35         
36 def rtTicketLink(rt_ticket):
37         link = """<a href="https://rt.planet-lab.org/Ticket/Display.html?user=guest&pass=guest&id=%s">RT #%s</a>""" % (rt_ticket, rt_ticket)
38         return link
39
40 def main():
41
42         total_sites = 0
43         total_nodes = 0
44         total_restored = 0
45         total_down = 0
46
47         act_all = soltesz.dbLoad("act_all")
48         plcdb_hn2lb = soltesz.dbLoad("plcdb_hn2lb")
49         sickdb = {}
50
51         sorted_keys = act_all.keys()
52         sorted_keys.sort()
53         for nodename in sorted_keys:
54                 diag_nodelist = act_all[nodename]
55                 if nodename in plcdb_hn2lb:
56                         lb = plcdb_hn2lb[nodename]
57                         if lb not in sickdb:
58                                 sickdb[lb] = {}
59                         sickdb[lb][nodename] = diag_nodelist
60
61         sorted_keys = sickdb.keys()
62         sorted_keys.sort()
63         print "<table width=80% border=1>"
64         for loginbase in sorted_keys:
65                 nodedict = sickdb[loginbase]
66                 sort_nodekeys = nodedict.keys()
67                 sort_nodekeys.sort()
68                 print "<tr><td bgcolor=lightblue nowrap>",
69                 print loginbase,
70                 print "</td><td colspan=5>&nbsp;</td>",
71                 print "</tr>"
72                 total_sites += 1
73                 for nodename in sort_nodekeys:
74                         total_nodes += 1
75                         if len(act_all[nodename]) == 0:
76                                 #print "<tr><td>%s</td>" % (nodename) 
77                                 #print "<td>has no events</td></tr>"
78                                 continue
79                         else:
80                                 # print just the latest event
81                                 event = act_all[nodename][0]
82                                 fields = []
83                                 fields += [nodename]
84                                 if 'time' in event:
85                                         s_time=time.strftime("%Y/%m/%d %H:%M:%S",
86                                                                                         time.gmtime(event['time']))
87                                         fields += [s_time]
88                                 if 'ticket_id' in event and event['ticket_id'] != "":
89                                         link = rtTicketLink(event['ticket_id'])
90                                         fields += [link]
91                                 else:
92                                         if 'found_rt_ticket' in event and event['found_rt_ticket'] != "":
93                                                 link = rtTicketLink(event['found_rt_ticket'])
94                                                 fields += [link]
95                                         else:
96                                                 fields += ["No Known RT Ticket"]
97
98                                 if event['action'] == "close_rt":
99                                         total_restored += 1
100                                 else:
101                                         total_down += 1
102
103                                 for f in ['category', 'action', 'stage', 'info']:
104                                         if 'stage' in f and 'stage' in event and 'stage' in event['stage']:
105                                                 # truncate the stage_ part.
106                                                 event['stage'] = event['stage'][6:]
107                                         if f in event:
108                                                 if type(event[f]) == type([]):
109                                                         fields += event[f]
110                                                 else:
111                                                         fields += [event[f]]
112                                         else:
113                                                 fields += ["&nbsp;"]
114
115                                 print "<tr>",
116                                 print fields_to_html(fields),
117                                 print "</tr>"
118
119         print "</table>"
120         print "<table>"
121         print "<tr>"
122         print "<th>Sites</th>"
123         print "<th>Nodes</th>"
124         print "<th>Restored</th>"
125         print "<th>Down</th>"
126         print "</tr>"
127
128         print "<tr>"
129         print "<td>%s</td>" % total_sites
130         print "<td>%s</td>" % total_nodes
131         print "<td>%s</td>" % total_restored
132         print "<td>%s</td>" % total_down
133
134         print "</tr>"
135         print "</table>"
136
137
138         
139 if __name__ == '__main__':
140         print "Content-Type: text/html\r\n"
141         print "<html><body>\n"
142         main()
143         print "</body></html>\n"