You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
4.7 KiB
Bash
186 lines
4.7 KiB
Bash
#!/bin/bash
|
|
#
|
|
# By Igor Gubenko (igubenko@Princeton.EDU) - Modified 06/29/2012
|
|
#
|
|
# Wrapper script to email with custom headers
|
|
#
|
|
|
|
declare -a headers_unparsed head
|
|
declare keyret valret
|
|
|
|
associate () {
|
|
local ref key val index
|
|
ref="$1"
|
|
key="$2"
|
|
val="$3"
|
|
index="$(eval echo \${#$ref[@]})"
|
|
#echo "##$key##"
|
|
#echo "##$val##"
|
|
eval ${ref}[$index]=\"$key\"; let "index += 1"
|
|
eval ${ref}[$index]=\"$val\"
|
|
|
|
return 0
|
|
}
|
|
|
|
valof () {
|
|
local ref key numel i
|
|
ref="$1"
|
|
key="$2"
|
|
let "numel = $(eval echo \${#$ref[@]}) - 1"
|
|
|
|
for i in `seq 0 $numel`; do
|
|
if [[ "$(eval echo \${${ref}[$i]})" == "$key" ]]; then
|
|
let "i += 1"; valret="$(eval echo \${${ref}[$i]})"; return 0
|
|
fi
|
|
done
|
|
return 1
|
|
}
|
|
|
|
nagios_path="/usr/local/monitoring/nagios"
|
|
|
|
# Get options - -h => help, and exit; -H => can be used 1+ times to provide additional headers for the email in form of header_name:value
|
|
|
|
ind=0
|
|
while getopts "hH:" option
|
|
do
|
|
case $option in
|
|
H)
|
|
headers_unparsed[$ind]="$OPTARG###"
|
|
let "ind += 1"
|
|
;;
|
|
h)
|
|
echo "Usage: custommailsend [-h] [-H header1:headerdata [...]] email1 [...]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
shift $((OPTIND-1))
|
|
|
|
# Default headers - from and reply-to
|
|
associate head From "Groundwork Monitoring<groundwk@Princeton.EDU>"
|
|
associate head "Reply-to" "EPSM<epm-list@Princeton.EDU>"
|
|
|
|
#echo "#############${headers_unparsed[@]}#############"
|
|
|
|
# Record key => value (header_name => value) pairs in the "head" associative array
|
|
OLD_IFS="$IFS"
|
|
IFS="###"
|
|
for header in ${headers_unparsed[@]}
|
|
do
|
|
if [[ -z "$header" ]]; then continue; fi
|
|
#echo "##$header##"
|
|
key=${header%:*}
|
|
value=${header#*:}
|
|
#echo "key: $key"
|
|
#echo "val: $value"
|
|
associate head "$key" "$value"
|
|
done
|
|
IFS="$OLD_IFS"
|
|
|
|
# Record the destination email addresses. Quit if none were provided
|
|
emails="$*"
|
|
if [[ -z "$emails" ]]; then echo "Need at least one email to send to"; exit 1; fi
|
|
associate head To "$(echo $emails | sed 's/ /,/g')"
|
|
|
|
emllog="/tmp/eml.$$"
|
|
# Output all headers into the email file
|
|
ctr=0
|
|
while [ "$ctr" -ne "${#head[@]}" ];
|
|
do
|
|
valof head ${head[ctr]}
|
|
echo "${head[$ctr]}: $valret"
|
|
let "ctr += 2"
|
|
done > $emllog
|
|
|
|
# Read actual email data from STDIN
|
|
while read ln; do
|
|
echo "$ln" | sed 's/<[Bb][Rr]\/\?>/\n/g' >> $emllog
|
|
done
|
|
|
|
valof head Sub
|
|
if echo "$valret" | grep -q "is \(UP\|DOWN\)"; then
|
|
hst=`echo $valret | sed -n 's/ is [A-Z]\+//p'`
|
|
svc=""
|
|
else
|
|
hst=`echo $valret | sed -n 's/\/.*//p'`
|
|
svc=`echo $valret | sed -n 's/^[^\/]\+\///;s/ is [A-Z]\+//p'`
|
|
fi
|
|
|
|
excep_hosts="nebti amunra cctsf"
|
|
|
|
#if ! echo "$excep_hosts" | grep -q "\(^\|[[:space:]]\+\)${hst}\([[:space:]]\+\|$\)"; then
|
|
# if grep -q "\(check orphaned, is the mod-gearman worker on queue\|Service Check Timed Out\|Nagios time-out\|Plugin timed out while executing system call\)" $emllog; then
|
|
# if ! grep -q "^${hst}%%%%${svc}%%%%${emails}$" ${nagios_path}/var/timeout_block
|
|
# then
|
|
# echo "${hst}%%%%${svc}%%%%$emails" >> ${nagios_path}/var/timeout_block
|
|
# fi
|
|
# emails='igubenko@Princeton.EDU'
|
|
# sed -i '1,/^[[:space:]]*To:/{ s/^[[:space:]]*To:.*/To: '"$emails"'/;}' $emllog
|
|
#
|
|
# echo >> $emllog
|
|
# echo "########## Modified by custommailsend to block ############" >> $emllog
|
|
# echo >> $emllog
|
|
#
|
|
# # Make a record in the log
|
|
# {
|
|
# echo "------------------------------"
|
|
# cat $emllog
|
|
# echo "------------------------------"
|
|
# } >> /usr/local/monitoring/log/emnotify_blocked.log
|
|
# echo >> /usr/local/monitoring/log/emnotify_blocked.log
|
|
#
|
|
# #rm -f $emllog
|
|
# #exit 0
|
|
#
|
|
# elif grep -q "^${hst}%%%%${svc}%%%%${emails}$" ${nagios_path}/var/timeout_block
|
|
# then
|
|
# sed -i "/^${hst}%%%%${svc}%%%%${emails}$/d" ${nagios_path}/var/timeout_block
|
|
#
|
|
# if grep -q "is \(OK\|UP\)" $emllog; then
|
|
# emails='igubenko@Princeton.EDU'
|
|
# sed -i '4 s/^To:.*/To: '"$emails"'/' $emllog
|
|
#
|
|
# echo >> $emllog
|
|
# echo "########## Modified by custommailsend to block ############" >> $emllog
|
|
# echo >> $emllog
|
|
#
|
|
# # Make a record in the log
|
|
# {
|
|
# echo "------------------------------"
|
|
# cat $emllog
|
|
# echo "------------------------------"
|
|
# } >> /usr/local/monitoring/log/emnotify_blocked.log
|
|
# echo >> /usr/local/monitoring/log/emnotify_blocked.log
|
|
# fi
|
|
#
|
|
# #rm -f $emllog
|
|
# #exit 0
|
|
# fi
|
|
#else
|
|
# # Make a record in the log
|
|
# {
|
|
# echo "------------------------------"
|
|
# cat $emllog
|
|
# echo "------------------------------"
|
|
# } >> /usr/local/monitoring/log/emnotify_nonblock.log
|
|
#fi
|
|
|
|
# And send it
|
|
/usr/sbin/sendmail -oem -oi -t $emails < $emllog >> /usr/local/monitoring/log/emnotify_err.log 2>&1
|
|
|
|
# Make a record in the log
|
|
{
|
|
#valof head To
|
|
echo "------------------------------"
|
|
#echo -n "To:$valret; "
|
|
#valof head Subject
|
|
#echo -n "Sub=$valret;"
|
|
cat $emllog
|
|
echo "------------------------------"
|
|
} >> /usr/local/monitoring/log/emnotify.log
|
|
echo >> /usr/local/monitoring/log/emnotify.log
|
|
|
|
rm -f $emllog
|
|
|
|
exit 0
|