Skip to content

Instantly share code, notes, and snippets.

@mattbailey
Created August 8, 2012 19:27
Show Gist options
  • Save mattbailey/3297885 to your computer and use it in GitHub Desktop.
Save mattbailey/3297885 to your computer and use it in GitHub Desktop.
swatchout.sh
#!/bin/bash
### USAGE:
# execute from swatch and only swatch
# exec echo '$_' | swatchout.sh <NAME> <SECONDS> <WARNING_EVENTS> <CRITICAL_EVENTS>
EMAIL="[email protected]"
NAME=$1
SECONDS=$2
EVENTS_WARN=$3
EVENTS_CRIT=$4
LOGFILE=/tmp/${NAME}
NOW=`date +%s`
trap 'rm $LOGFILE 2> /dev/null ; rm $LOGFILE.btime 2> /dev/null ; exit 255' TERM INT
if [ -f ${LOGFILE}.btime ]
then
AGE=`stat -c %Z ${LOGFILE}.btime`
sec=`expr $NOW - $AGE`
lines=`wc -l ${LOGFILE} | awk '{print $1}'`
if [ $sec -ge $SECONDS ]
then
if [ $lines -ge $EVENTS_CRIT ]; then
report=`mktemp`
echo "Subject: ${NAME} ERRORS CRITICAL: MORE THAN ${EVENTS_CRIT} EVENTS IN ${SECONDS} SECONDS: ${lines} EVENTS" > $report
echo "Relevant log output below:" >> $report
echo "" >> $report
cat $LOGFILE >> $report
rm ${LOGFILE}
rm ${LOGFILE}.btime
sleep 2
sendmail $EMAIL < $report
rm $report
elif [ $lines -gt $EVENTS_WARN ]; then
report=`mktemp`
echo "Subject: ${NAME} ERRORS WARNING: MORE THAN ${EVENTS_WARN} EVENTS IN ${SECONDS} SECONDS: ${lines} EVENTS" > $report
echo "Relevant log output below:" >> $report
echo "" >> $report
cat $LOGFILE >> $report
rm ${LOGFILE}
rm ${LOGFILE}.btime
sleep 2
sendmail $EMAIL < $report
rm $report
fi
rm ${LOGFILE} 2> /dev/null
rm ${LOGFILE}.btime 2> /dev/null
fi
else
touch ${LOGFILE}.btime
fi
read input
echo $input >> $LOGFILE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment