diff options
| author | Seth Vidal <skvidal@fedoraproject.org> | 2013-07-04 04:10:25 +0000 |
|---|---|---|
| committer | Seth Vidal <skvidal@fedoraproject.org> | 2013-07-04 04:10:25 +0000 |
| commit | c779358a994f03b7e43ff8dd89ba2bba4fcccb4b (patch) | |
| tree | 87108c5154c4ce70b484a72ec7cf5b1b27d2d176 /scripts/logview | |
| parent | d91f35cfba4a59e327a64b3e38d3e630addbff3b (diff) | |
| download | ansible-c779358a994f03b7e43ff8dd89ba2bba4fcccb4b.tar.gz ansible-c779358a994f03b7e43ff8dd89ba2bba4fcccb4b.tar.xz ansible-c779358a994f03b7e43ff8dd89ba2bba4fcccb4b.zip | |
rename show_changed to logview since that's what it is
Diffstat (limited to 'scripts/logview')
| -rwxr-xr-x | scripts/logview | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/scripts/logview b/scripts/logview new file mode 100755 index 000000000..fb1e6b45f --- /dev/null +++ b/scripts/logview @@ -0,0 +1,79 @@ +#!/usr/bin/python -tt +import sys +import json +import time +from optparse import OptionParser +import subprocess +import os +import glob + +logpath='/var/log/ansible' +search_terms=['CHANGED','FAILED'] + +def date_cheat(datestr): + dc = subprocess.Popen(['date', '-d', datestr, '+%Y/%m/%d'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0] + dc = dc.strip() + return dc + + +def parse_args(args): + usage = """ + show_changed [options] [-d datestr] [-p playbook] + """ + parser = OptionParser(usage=usage) + parser.add_option("-d", default='today', dest='datestr', help="time string of when you want logs") + parser.add_option("-p", default='*', dest='playbook', help="the playbook you want to look for") + parser.add_option("-v", default=False, dest='verbose', action='store_true', help='Verbose') + parser.add_option("-s", default=[], dest='search_terms', action='append', help="status to search for") + parser.add_option("-l", default=False, dest="list_pb", action='store_true', help="list playbooks for a specific date") + (opts, args) = parser.parse_args(args) + + opts.datestr = date_cheat(opts.datestr) + if not opts.search_terms: + opts.search_terms = search_terms + return opts, args + +def search_logs(opts, logfiles): + msg = '' + for fn in logfiles: + hostname=os.path.basename(fn).replace('.log', '') + timestamp = os.path.basename(os.path.dirname(fn)) + for line in open(fn): + things = line.split('\t') + if things[2] in opts.search_terms: + slurp = json.loads(things[4]) + msg += '%s\t%s\t%s\t%s\t%s\t%s' % (timestamp, hostname, things[0], things[1], things[2], things[3]) + if not opts.verbose: + if type(slurp) == dict: + for term in ['task_userid', 'cmd']: + if term in slurp: + msg += '\t%s:%s' % (term, slurp.get(term, None)) + msg += '\n' + else: + msg += '\n' + msg += json.dumps(slurp, indent=4) + msg += '\n' + + return msg + + +def main(args): + opts,args = parse_args(args) + for pb in glob.glob(logpath + '/' + opts.playbook): + pb_name = os.path.basename(pb) + for pb_logdir in glob.glob(pb + '/' + opts.datestr): + if opts.list_pb: + print pb_name + continue + + logfiles = glob.glob(pb_logdir + '/*/*.log') + msg = search_logs(opts, logfiles) + if msg: + print pb_name + print msg + + + +if __name__ == "__main__": + sys.exit(main(sys.argv[1:])) + |
