3 from monitor.wrapper import plc
6 from monitor import database
8 from datetime import datetime, timedelta
13 from monitor.model import *
15 from monitorstats import *
19 from monitor import parser as parsermodule
21 parser = parsermodule.getParser()
22 parser.set_defaults(node=None, aggname='aggregatenm', archivedir='archive-pdb', field='nm', value='Y', fromtime=None, load=False, state='BOOT')
23 parser.add_option("", "--node", dest="node", metavar="nodename.edu",
24 help="A single node name to add to the nodegroup")
25 parser.add_option("", "--archivedir", dest="archivedir", metavar="filename",
26 help="Pickle file aggregate output.")
27 parser.add_option("", "--aggname", dest="aggname", metavar="filename",
28 help="Pickle file aggregate output.")
29 parser.add_option("", "--field", dest="field", metavar="key",
30 help="Which record field to extract from all files.")
31 parser.add_option("", "--value", dest="value", metavar="val",
32 help="Which value to look for in field.")
33 parser.add_option("", "--state", dest="state", metavar="key",
34 help="Which boot state to accept.")
35 parser.add_option("", "--load", action="store_true",
36 help="load aggregatenm rather than recreate it.")
37 parser.add_option("", "--fromtime", dest="fromtime", metavar="YYYY-MM-DD",
38 help="Specify a starting date from which to begin the query.")
39 config = parsermodule.parse_args(parser)
41 archive = get_archive(config.archivedir)
45 begin = config.fromtime
49 d = datetime_fromstr(begin)
55 file = get_filefromglob(d, "production.findbad", config.archivedir)
57 fb = archive.load(file)
59 print "nodes: ", len(fb['nodes'])
61 for node in fb['nodes']:
62 fb_nodeinfo = fb['nodes'][node]['values']
63 time = d.strftime("%Y-%m-%d")
65 if type(fb_nodeinfo) == type([]):
68 if fb_nodeinfo['state'] != config.state:
73 agg[node] = { 'total' : 0, 'up' : 0}
75 agg[node]['total'] += 1
76 if fb_nodeinfo[config.field] == config.value:
78 print "%s nodes in state %s" % ( state_count, config.state )
84 except KeyboardInterrupt:
87 import traceback; print traceback.print_exc()
88 print d.strftime("%Y-%m-%d"), "No record"
91 if d > datetime.now(): break
93 agg = database.dbLoad(config.aggname)
96 if agg[node]['total'] > 0:
97 if agg[node]['up'] != agg[node]['total']:
98 print "%s %s" % (node, float(agg[node]['up']) / float(agg[node]['total']))
100 database.dbDump(config.aggname, agg)
102 if __name__ == "__main__":