1
0
This commit is contained in:
root
2018-05-03 20:27:22 +02:00
commit 3ca191dd2f
10 changed files with 767 additions and 0 deletions

115
check_proxy.sh Executable file
View File

@@ -0,0 +1,115 @@
#!/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 $PROXIED_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 $PROXIED_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