5 api = plc.PLC(auth.auth, auth.plc)
8 fb = soltesz.dbLoad("findbad")
9 from nodecommon import *
13 from config import config
14 from optparse import OptionParser
15 parser = OptionParser()
16 parser.set_defaults(node=None, category=None, nodelist=None)
17 parser.add_option("", "--category", dest="category", metavar="category",
18 help="List all nodes in the given category")
19 parser.add_option("", "--nodelist", dest="nodelist", metavar="nodelist.txt",
20 help="A list of nodes to bring out of debug mode.")
21 config = config(parser)
24 def diff_time(timestamp):
28 diff = now - timestamp
29 # return the number of seconds as a difference from current time.
31 if diff < 60: # sec in min.
33 t_str = "%s sec ago" % t
34 elif diff < 60*60: # sec in hour
36 t_str = "%s min ago" % int(t)
37 elif diff < 60*60*24: # sec in day
39 t_str = "%s hours ago" % int(t)
40 elif diff < 60*60*24*7: # sec in week
41 t = diff // (60*60*24)
42 t_str = "%s days ago" % int(t)
43 elif diff < 60*60*24*30: # approx sec in month
44 t = diff // (60*60*24*7)
45 t_str = "%s weeks ago" % int(t)
46 elif diff > 60*60*24*30: # approx sec in month
47 t = diff // (60*60*24*7*30)
48 t_str = "%s months ago" % int(t)
52 def fb_print_nodeinfo(fbnode, hostname):
53 fbnode['hostname'] = hostname
54 fbnode['checked'] = diff_time(fbnode['checked'])
56 fbnode['bootcd'] = fbnode['bootcd'].split()[-1]
58 fbnode['bootcd'] = "unknown"
59 fbnode['kernel'] = fbnode['kernel'].split()[2]
60 fbnode['pcu'] = color_pcu_state(fbnode)
61 print "%(hostname)-39s | %(checked)11.11s | %(state)10.10s | %(ssh)5.5s | %(pcu)6.6s | %(bootcd)6.6s | %(category)8.8s | %(kernel)s" % fbnode
64 nodelist = config.getListFromFile(config.nodelist)
66 nodelist = fb['nodes'].keys()
72 if node not in fb['nodes']:
75 fb_nodeinfo = fb['nodes'][node]['values']
77 if config.category and \
78 'state' in fb_nodeinfo and \
79 config.category == fb_nodeinfo['state']:
81 fb_print_nodeinfo(fb_nodeinfo, node)
82 elif config.nodelist and 'state' in fb_nodeinfo:
83 fb_print_nodeinfo(fb_nodeinfo, node)