adding files
[monitor.git] / nodequery.py
1 #!/usr/bin/python
2
3 import plc
4 import auth
5 api = plc.PLC(auth.auth, auth.plc)
6
7 import soltesz
8 fb = soltesz.dbLoad("findbad")
9 from nodecommon import *
10
11 import time
12
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)
22 config.parse_args()
23
24 def diff_time(timestamp):
25         now = time.time()
26         if timestamp == None:
27                 return "unknown"
28         diff = now - timestamp
29         # return the number of seconds as a difference from current time.
30         t_str = ""
31         if diff < 60: # sec in min.
32                 t = diff
33                 t_str = "%s sec ago" % t
34         elif diff < 60*60: # sec in hour
35                 t = diff // (60)
36                 t_str = "%s min ago" % int(t)
37         elif diff < 60*60*24: # sec in day
38                 t = diff // (60*60)
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)
49         return t_str
50
51
52 def fb_print_nodeinfo(fbnode, hostname):
53         fbnode['hostname'] = hostname
54         fbnode['checked'] = diff_time(fbnode['checked'])
55         if fbnode['bootcd']:
56                 fbnode['bootcd'] = fbnode['bootcd'].split()[-1]
57         else:
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
62
63 if config.nodelist:
64         nodelist = config.getListFromFile(config.nodelist)
65 else:
66         nodelist = fb['nodes'].keys()
67
68
69 for node in nodelist:
70         config.node = node
71
72         if node not in fb['nodes']:
73                 continue
74
75         fb_nodeinfo  = fb['nodes'][node]['values']
76
77         if config.category and \
78                 'state' in fb_nodeinfo and \
79                 config.category == fb_nodeinfo['state']:
80
81                         fb_print_nodeinfo(fb_nodeinfo, node)
82         elif config.nodelist and 'state' in fb_nodeinfo:
83                 fb_print_nodeinfo(fb_nodeinfo, node)
84         else:
85                 pass
86                 
87
88