116 lines
3.3 KiB
Bash
Executable File
116 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Check the status of a proxy server by downloading a sample URL directly and through the proxy and then comparing the two files
|
|
#
|
|
# -- Written 2008/03/13 TA
|
|
|
|
|
|
# establish the default settings
|
|
#
|
|
# this can be overridden on the command line, but as long as the Nagios instance is up, this URL should work
|
|
SAMPLE_URL=http://blog.fefe.de/
|
|
|
|
# This is always overriden with a single host URL and is only provided as an example
|
|
HTTP_PROXY=http://squid2.uhi.ac.uk:8080/
|
|
|
|
# This needs to be high enough to weather network glitches, but not so high that we end up with multiple instances waiting to finish
|
|
TIMEOUT=30
|
|
|
|
# The default error code is unknown in case I haven't thought of something
|
|
ERROR_CODE=3
|
|
|
|
# comment this out to see the output from wget on the command line (and in the cron output)
|
|
LOG="-o /dev/null"
|
|
|
|
# parse the command line options
|
|
#
|
|
if [ -z "$1" ]; then
|
|
echo "Usage: $0 PROXY_URL [TEST_URL] [TIMEOUT]";
|
|
echo " PROXY_URL: The full URL (including port number and protocol) of the proxy server to be tested";
|
|
echo " TEST_URL: The URL to attempt to load";
|
|
echo " TIMEOUT: The time (in seconds) to wait before giving up on loading the test URL";
|
|
echo;
|
|
exit $ERROR_CODE;
|
|
else
|
|
HTTP_PROXY=$1
|
|
fi
|
|
|
|
if [ ! -z "$2" ]; then
|
|
SAMPLE_URL=$2
|
|
fi
|
|
|
|
if [ ! -z "$3" ]; then
|
|
TIMEOUT=$3
|
|
fi
|
|
|
|
|
|
# required binaries
|
|
#
|
|
WGET=/usr/bin/wget
|
|
DIFF=/usr/bin/diff
|
|
DATE=/bin/date
|
|
BC=/usr/bin/bc
|
|
|
|
# The base timestamp used to uniquely tag the filenames as a matching set
|
|
TIMESTAMP=`$DATE +%s%N`
|
|
|
|
# the filenames we will create
|
|
#
|
|
PROXIED_FILE="$(mktemp)"
|
|
UNPROXIED_FILE="$(mktemp)"
|
|
|
|
|
|
# Remove the temporary files if they already exist
|
|
#
|
|
if [ -e $UNPROXIED_FILE ]; then rm $UNPROXIED_FILE; fi
|
|
if [ -e $PROXIED_FILE ]; then rm $PROXIED_FILE; fi
|
|
|
|
# Get the content directly
|
|
TIMESTAMP2=`$DATE +%s%N`
|
|
$WGET -t 1 --timeout=$TIMEOUT $SAMPLE_URL -O $UNPROXIED_FILE $LOG
|
|
|
|
# Get the content through the proxy
|
|
TIMESTAMP3=`$DATE +%s%N`
|
|
http_proxy=$HTTP_PROXY $WGET -t 1 --timeout=$TIMEOUT -O $PROXIED_FILE $SAMPLE_URL $LOG
|
|
TIMESTAMP4=`$DATE +%s%N`
|
|
|
|
# Compare the two files
|
|
DIFF_OUTPUT=`$DIFF $PROXIED_FILE $UNPROXIED_FILE`;
|
|
|
|
if [ ! -s "$UNPROXIED_FILE" ]; then
|
|
echo "WARNING: The test URL does not appear to be available or is unreachable...";
|
|
ERROR_CODE=1;
|
|
else
|
|
if [ -s "$UNPROXIED_FILE" -a ! -s "$PROXIED_FILE" ]; then
|
|
echo "CRITICAL: Could not load the content through the specified proxy server..."
|
|
ERROR_CODE=2;
|
|
else
|
|
if [ ! -z "$DIFF_OUTPUT" ]; then
|
|
echo "WARNING: The content downloaded through the proxy does not match the live content...";
|
|
ERROR_CODE=1;
|
|
else
|
|
DIRECT_TIME=`echo "scale=2; ($TIMESTAMP3-$TIMESTAMP2)/1000000" | $BC`;
|
|
PROXIED_TIME=`echo "scale=2; ($TIMESTAMP4-$TIMESTAMP3)/1000000" | $BC`;
|
|
ELAPSED_TIME=`echo "scale=2; ($TIMESTAMP4-$TIMESTAMP2)/1000000000" | $BC`;
|
|
echo "OK: Proxy server accessible and serving up the same content as a direct link. Run completed in $ELAPSED_TIME seconds";
|
|
echo "|'Proxy time'=${PROXIED_TIME}ms"
|
|
echo "|'Direct time'=${DIRECT_TIME}ms"
|
|
|
|
ERROR_CODE=0;
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
|
|
|
|
if [ -e $UNPROXIED_FILE ]; then rm $UNPROXIED_FILE; fi
|
|
if [ -e $PROXIED_FILE ]; then rm $PROXIED_FILE; fi
|
|
|
|
exit $ERROR_CODE;
|
|
|
|
# Predefined exit codes for Nagios/NetSaint
|
|
# UNKNOWN = 3
|
|
# OK = 0
|
|
# WARNING = 1
|
|
# CRITICAL = 2
|