hope I got the merge wright...
[monitor.git] / tools / automate / query.py
diff --git a/tools/automate/query.py b/tools/automate/query.py
new file mode 100755 (executable)
index 0000000..835883e
--- /dev/null
@@ -0,0 +1,75 @@
+#!/usr/bin/python
+
+import csv
+import sys
+import os
+import config
+from glob import glob
+import re
+from cgi import parse_qs
+
+import vxargs
+import parser as parsermodule
+
+from automate import *
+
+parser = parsermodule.getParser()
+parser.set_defaults(nodelist=None, 
+                                   outdir=None,
+                                       querystr=None,
+                                       simple=False,
+                                       run=False,
+                                       cmdfile=None,)
+
+parser.add_option("", "--nodelist", dest="nodelist", metavar="filename",
+                                       help="Read list of nodes from specified file")
+parser.add_option("", "--outdir", dest="outdir", metavar="dirname",
+                                       help="Name of directory to place output")
+parser.add_option("", "--query", dest="querystr", metavar="QUERY",
+                                       help="a simple query string: key=value")
+parser.add_option("", "--simple", dest="simple", action="store_true",
+                                       help="display simple output")
+
+config = parsermodule.parse_args(parser)
+
+if config.outdir == None: 
+       outdir="checkhosts"
+else: 
+       outdir=config.outdir
+
+nodelist = None
+if config.nodelist is not None:
+       nodelist = config.getListFromFile(config.nodelist)
+
+if config.querystr == None:
+       queries = parse_qs("IP_SUBNET=127.0.0.1")
+else:
+       queries = parse_qs(config.querystr)
+       #(key,query) = config.querystr.split("=")
+
+# Create a file list based on the provide nodelist or a simple pattern for all
+# files in the given 'outdir' directory
+filelist = None
+if nodelist is not None:
+       filelist = []
+       for node in nodelist:
+               filelist.append("%s/%s.out" % (outdir,node))
+else:
+       filelist = glob("%s/*.out" % outdir)
+
+for file in filelist:
+       vals = csv_to_hash(csv.reader(open(file,'r')))
+       hostname = file[len(outdir):-4]
+       m = True
+       for key in queries.keys():
+               q = re.compile(queries[key][0])
+               if key in vals and q.match(vals[key]):
+                       m=(m and True)
+               else:
+                       m=(m and False)
+                       
+       if m:
+               if config.simple:
+                       print hostname, vals[key]
+               else:
+                       print hostname, vals