4 from monitor import config
5 from monitor.wrapper import plc
6 from monitor import parser as parsermodule
7 from monitor.model import *
8 from monitorstats import *
9 from monitor import database
14 from datetime import datetime, timedelta
16 from nodequeryold import verify,query_to_dict,node_select
18 api = plc.getAuthAPI()
20 def nodes_from_time(arch, file):
23 nodelist = fb['nodes'].keys()
24 nodelist = node_select(config.select, nodelist, fb)
28 def print_nodelist(nodelist, file):
36 parser = parsermodule.getParser()
37 parser.set_defaults(archivedir='archive-pdb', begin=None, end=None,
38 sequential=False, printnodes=False, select=None)
40 parser.add_option("", "--archivedir", dest="archivedir", metavar="filename",
41 help="Pickle file aggregate output.")
42 parser.add_option("", "--select", dest="select", metavar="key",
44 parser.add_option("", "--sequential", dest="sequential", action="store_true",
45 help="Compare EVERY timestep between begin and end .")
46 parser.add_option("", "--print", dest="printnodes", action="store_true",
47 help="print the nodes that have come up or down.")
48 parser.add_option("", "--begin", dest="begin", metavar="YYYY-MM-DD",
49 help="Specify a starting date from which to begin the query.")
50 parser.add_option("", "--end", dest="end", metavar="YYYY-MM-DD",
51 help="Specify a ending date at which queries end.")
53 config = parsermodule.parse_args(parser)
54 archive = get_archive(config.archivedir)
56 if not config.begin or not config.end:
57 print parsermodule.usage(parser)
61 d_s1 = datetime_fromstr(config.begin)
62 d_s2 = datetime_fromstr(config.begin) + tdelta
63 d_end = datetime_fromstr(config.end)
70 # then the iterations are day-based.
72 f_s1 = get_filefromglob(d_s1, "production.findbad", config.archivedir, True)
73 if not config.sequential:
74 file_list.append(f_s1)
82 file_list = file_list[4:]
84 xaxis = get_xaxis(file_list)
90 for file in file_list:
98 s1 = set(nodes_from_time(archive, f_s1))
99 s2 = set(nodes_from_time(archive, f_s2))
102 print "[ %s, %s, %s ]," % ( len(s2), len(s2-s1), len(s1-s2) )
103 data.append( [ len(s2), len(s2-s1), len(s1-s2)] )
105 print "%s nodes up" % len(s2-s1)
106 print "Nodes s2 minus s1: len(s2-s1) = %s" % len(s2-s1)
110 if config.printnodes:
111 print_nodelist(s2-s1, f_up)
114 print "%s nodes down" % len(s1-s2)
115 print "Nodes s1 minus s2: len(s1-s2) = %s" % len(s1-s2)
117 if config.printnodes:
118 print_nodelist(s1-s2, f_down)
123 print_graph(data, config.begin, config.end, xaxis)
124 # takes two arguments as dates, comparing the number of up nodes from one and
127 if __name__ == "__main__":