#!/usr/bin/python
# Read in the act_* databases and print out a human readable version
import sys
import time
import getopt
import soltesz
def fields_to_html(fields):
colorMap = { 'PING' : 'darkseagreen',
'NOPING': 'darksalmon',
'SSH': 'darkseagreen',
'NOSSH': 'indianred',
'PCU': 'darkseagreen',
'NOPCU': 'lightgrey',
'OLDBOOTCD': 'crimson',
'DOWN': 'indianred',
'ALPHA': 'gold',
'ERROR': 'crimson',
'PROD': 'darkseagreen',
'DEBUG': 'darksalmon',
'DEBUG': 'darksalmon',
'BOOT': 'lightgreen'}
r_str = ""
for f in fields:
if f in colorMap:
bgcolor="bgcolor='%s'" % colorMap[f]
else:
bgcolor=""
r_str += "
%s | " % (bgcolor, f)
return r_str
def rtTicketLink(rt_ticket):
link = """RT #%s""" % (rt_ticket, rt_ticket)
return link
def main():
total_sites = 0
total_nodes = 0
total_restored = 0
total_down = 0
act_all = soltesz.dbLoad("act_all")
plcdb_hn2lb = soltesz.dbLoad("plcdb_hn2lb")
sickdb = {}
sorted_keys = act_all.keys()
sorted_keys.sort()
for nodename in sorted_keys:
diag_nodelist = act_all[nodename]
if nodename in plcdb_hn2lb:
lb = plcdb_hn2lb[nodename]
if lb not in sickdb:
sickdb[lb] = {}
sickdb[lb][nodename] = diag_nodelist
sorted_keys = sickdb.keys()
sorted_keys.sort()
print ""
for loginbase in sorted_keys:
nodedict = sickdb[loginbase]
sort_nodekeys = nodedict.keys()
sort_nodekeys.sort()
print "",
print loginbase,
print " | | ",
print "
"
total_sites += 1
for nodename in sort_nodekeys:
total_nodes += 1
if len(act_all[nodename]) == 0:
#print "%s | " % (nodename)
#print "has no events |
"
continue
else:
# print just the latest event
event = act_all[nodename][0]
fields = []
fields += [nodename]
if 'time' in event:
s_time=time.strftime("%Y/%m/%d %H:%M:%S",
time.gmtime(event['time']))
fields += [s_time]
if 'ticket_id' in event and event['ticket_id'] != "":
link = rtTicketLink(event['ticket_id'])
fields += [link]
else:
if 'found_rt_ticket' in event and event['found_rt_ticket'] != "":
link = rtTicketLink(event['found_rt_ticket'])
fields += [link]
else:
fields += ["No Known RT Ticket"]
if event['action'] == "close_rt":
total_restored += 1
else:
total_down += 1
for f in ['category', 'action', 'stage', 'info']:
if 'stage' in f and 'stage' in event and 'stage' in event['stage']:
# truncate the stage_ part.
event['stage'] = event['stage'][6:]
if f in event:
if type(event[f]) == type([]):
fields += event[f]
else:
fields += [event[f]]
else:
fields += [" "]
print "",
print fields_to_html(fields),
print "
"
print "
"
print ""
print ""
print "Sites | "
print "Nodes | "
print "Restored | "
print "Down | "
print "
"
print ""
print "%s | " % total_sites
print "%s | " % total_nodes
print "%s | " % total_restored
print "%s | " % total_down
print "
"
print "
"
if __name__ == '__main__':
print "Content-Type: text/html\r\n"
print "\n"
main()
print "\n"