automate scripts
[monitor.git] / automate / query.py
1 #!/usr/bin/python
2
3 import csv
4 import sys
5 import os
6 import config
7 from glob import glob
8 import re
9 from cgi import parse_qs
10
11 import vxargs
12 import parser as parsermodule
13
14 from automate import *
15
16 parser = parsermodule.getParser()
17 parser.set_defaults(nodelist=None, 
18                                     outdir=None,
19                                         querystr=None,
20                                         simple=False,
21                                         run=False,
22                                         cmdfile=None,)
23
24 parser.add_option("", "--nodelist", dest="nodelist", metavar="filename",
25                                         help="Read list of nodes from specified file")
26 parser.add_option("", "--outdir", dest="outdir", metavar="dirname",
27                                         help="Name of directory to place output")
28 parser.add_option("", "--query", dest="querystr", metavar="QUERY",
29                                         help="a simple query string: key=value")
30 parser.add_option("", "--simple", dest="simple", action="store_true",
31                                         help="display simple output")
32
33 config = parsermodule.parse_args(parser)
34
35 if config.outdir == None: 
36         outdir="checkhosts"
37 else: 
38         outdir=config.outdir
39
40 nodelist = None
41 if config.nodelist is not None:
42         nodelist = config.getListFromFile(config.nodelist)
43
44 if config.querystr == None:
45         queries = parse_qs("IP_SUBNET=127.0.0.1")
46 else:
47         queries = parse_qs(config.querystr)
48         #(key,query) = config.querystr.split("=")
49
50 # Create a file list based on the provide nodelist or a simple pattern for all
51 # files in the given 'outdir' directory
52 filelist = None
53 if nodelist is not None:
54         filelist = []
55         for node in nodelist:
56                 filelist.append("%s/%s.out" % (outdir,node))
57 else:
58         filelist = glob("%s/*.out" % outdir)
59
60 for file in filelist:
61         vals = csv_to_hash(csv.reader(open(file,'r')))
62         hostname = file[len(outdir):-4]
63         m = True
64         for key in queries.keys():
65                 q = re.compile(queries[key][0])
66                 if key in vals and q.match(vals[key]):
67                         m=(m and True)
68                 else:
69                         m=(m and False)
70                         
71         if m:
72                 if config.simple:
73                         print hostname, vals[key]
74                 else:
75                         print hostname, vals