- add show_changed - python and much faster than the shell
- remove show-changed
This commit is contained in:
parent
cfaddae895
commit
8dc05c6294
2 changed files with 75 additions and 83 deletions
|
@ -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
|
||||
|
||||
|
75
scripts/show_changed
Executable file
75
scripts/show_changed
Executable file
|
@ -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:]))
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue