80 lines
1.6 KiB
Bash
80 lines
1.6 KiB
Bash
#!/bin/bash
|
|
|
|
# rburkholder@quovadis.bm
|
|
# raymond@burkholder.net
|
|
|
|
# user defined settings
|
|
txtEmail="user@example.com"
|
|
txtSubject="Path Loss Report"
|
|
txtSeparator="==============================\n"
|
|
nTrigger=4
|
|
nAttempts=5
|
|
|
|
declare -A nodes
|
|
nodes=( \
|
|
[8.8.8.8]="google1" \
|
|
[8.8.4.4]="google2" \
|
|
)
|
|
|
|
# local variables
|
|
cntNotify=0
|
|
status="|"
|
|
tmpLog=$(mktemp)
|
|
tmpPing=$(mktemp)
|
|
|
|
# preload output
|
|
date > ${tmpLog}
|
|
|
|
# loop through nodes and test
|
|
for node in ${!nodes[*]}; do
|
|
echo -e ${txtSeparator} >> ${tmpLog};
|
|
echo "checking node ${nodes[${node}]}:" >> ${tmpLog};
|
|
echo "" >> ${tmpLog}
|
|
|
|
ping -W 1 -c ${nAttempts} ${node} > ${tmpPing}
|
|
cat ${tmpPing} >> ${tmpLog}
|
|
|
|
value=$(grep transmitted ${tmpPing} | cut -d ' ' -f 4)
|
|
if [[ nTrigger -ge value ]]; then flagNxt="dn"
|
|
else flagNxt="up"; fi
|
|
|
|
flagPrv="na"
|
|
|
|
if [[ -f /tmp/pl.dn.${node} ]]; then
|
|
flagPrv="dn"
|
|
if test "up" = "${flagNxt}"; then
|
|
rm /tmp/pl.dn.${node}
|
|
fi
|
|
fi
|
|
|
|
if [[ -f /tmp/pl.up.${node} ]]; then
|
|
flagPrv="up"
|
|
if test "dn" = "${flagNxt}"; then
|
|
rm /tmp/pl.up.${node}
|
|
fi
|
|
fi
|
|
|
|
if test "${flagPrv}" != "${flagNxt}"; then
|
|
touch /tmp/pl.${flagNxt}.${node}
|
|
((cntNotify++));
|
|
mtr -w -b --report ${node} >> ${tmpLog};
|
|
status="${status} ${nodes[${node}]} ${flagPrv}>${flagNxt} |"
|
|
echo "" >> ${tmpLog}
|
|
echo "Above State Change: ${flagPrv}>${flagNxt}" >> ${tmpLog}
|
|
fi
|
|
|
|
done
|
|
|
|
# footer
|
|
echo -e ${txtSeparator} >> ${tmpLog};
|
|
date >> ${tmpLog}
|
|
|
|
# notify on failure
|
|
if [[ cntNotify -gt 0 ]]; then
|
|
cat ${tmpLog} | mail -s "${txtSubject}:${status}" ${txtEmail};
|
|
fi
|
|
|
|
# clean up
|
|
rm ${tmpLog}
|
|
rm ${tmpPing}
|