summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorSeth Vidal <skvidal@fedoraproject.org>2013-07-04 03:03:58 +0000
committerSeth Vidal <skvidal@fedoraproject.org>2013-07-04 03:03:58 +0000
commit8dc05c6294fa7d3bb94dd11b11c1a9fc2ef09c3d (patch)
treeaff78db7c0dc2993cdf132c531d71c0b9b003d68 /scripts
parentcfaddae895ceb6c8f4f2942eccde8e975076cfba (diff)
downloadansible-8dc05c6294fa7d3bb94dd11b11c1a9fc2ef09c3d.tar.gz
ansible-8dc05c6294fa7d3bb94dd11b11c1a9fc2ef09c3d.tar.xz
ansible-8dc05c6294fa7d3bb94dd11b11c1a9fc2ef09c3d.zip
- add show_changed - python and much faster than the shell
- remove show-changed
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/show-changed83
-rwxr-xr-xscripts/show_changed75
2 files changed, 75 insertions, 83 deletions
diff --git a/scripts/show-changed b/scripts/show-changed
deleted file mode 100755
index 5e64c5111..000000000
--- a/scripts/show-changed
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/bin/bash
-# view the ansible logs
-# takes all the options of grep and passes them straight through - then parses the output so it looks better and readable
-# should only be used on the .log files not the .info files. info files are flat readable
-# example:
-# show-changed -v today mirrorlist
-
-
-logpath='/var/log/ansible'
-search_terms="CHANGED|FAILED"
-
-
-function search_logs ()
- {
-IFS='
-'
-
-for line in `grep -H -E $search_terms $@`
-do
- logpath=`echo $line| cut -d: -f1`
- hostname=`basename $logpath`
- dir=`dirname $logpath`
- runtime=`basename $dir`
- echo -n "$runtime - $hostname "
- pre=`echo $line | cut -d: -f2-| cut -f3-4`
- json=`echo $line | cut -d: -f2- |cut -f5-`
- echo $json| python -m json.tool 2>/dev/null >&2
- if [ $? != 0 ]; then
- echo "Error parsing json"
- else
- if [ "$verbose" == 'yes' ]; then
- echo $pre
- echo $json| python -m json.tool
- else
- echo -n $pre
- for term in task_userid cmd task_args task_module; do
- res=`echo $json| /srv/web/infra/ansible/scripts/keyreturn $term 2>/dev/null`
- if [ $? == 0 ]; then
- echo -n " $res"
- #$json| /srv/web/infra/ansible/scripts/keyreturn $term
- fi
- done
- echo ''
- fi
- fi
-done
-
-}
-
-while getopts ":v" opt; do
- case $opt in
- v)
- export verbose='yes'
- ;;
- \?)
- echo "Invalid option: -$OPTARG" >&2
- ;;
- esac
-done
-
-shift $(( OPTIND - 1 ));
-
-when='yesterday'
-if [ -n "$1" ]; then
-when=$1
-fi
-
-ts=`date -d "$when" +%Y/%m/%d`
-
-if [ -z "$2" ]; then
- where='*'
-else
- where=$2
-fi
-
-for pb in $logpath/$where/; do
- if [ -d $pb/$ts ]; then
- echo `basename $pb`
- search_logs $pb/$ts/*/*.log
- fi
- done
-
-
diff --git a/scripts/show_changed b/scripts/show_changed
new file mode 100755
index 000000000..52c2d08e1
--- /dev/null
+++ b/scripts/show_changed
@@ -0,0 +1,75 @@
+#!/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")
+ (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):
+ 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:]))
+ \ No newline at end of file