nagios-scripts/check-url.sh
Jeroen De Meerleer 9db3ebbce6
Improve check-url.sh script documentation
The script's usage message has been updated to reflect the correct functionality of the script. The previous message was incorrect and referred to disk usage instead of checking if a URL is available.
2023-05-31 17:05:53 +02:00

107 lines
3.0 KiB
Bash

#!/bin/bash
#
#/
#/ Usage:
#/ check-url.sh --proxy=<proxy-url> --warning=<level> --critical=<level> <URL>
#/
#/ Checks if URL is available
#/
#/ Options:
#/ -p, --proxy=<proxy-url> The proxy server to use
#/ -w, --warning=<sec> The amount of response time to trigger a warning (in sec)
#/ -c, --critical=<sec> The amount of response time to trigger a critcal warning (in sec)
#/
#/ Exit Codes:
#/ 0 Everything OK
#/ 1 Warning level exceeded
#/ 2 Critical level exceeded
#/ 3 Unknown status
#/
Usage() {
grep '^#/' "${script_dir}/${script_name}" | sed 's/^#\/\w*//'
}
GetOptions() {
# https://stackoverflow.com/a/29754866
OPTIONS=p:w:c:
LONGOPTS=proxy:,warning:,critical:
# -use ! and PIPESTATUS to get exit code with errexit set
# -temporarily store output to be able to check for errors
# -activate quoting/enhanced mode (e.g. by writing out “--options”)
# -pass arguments only via -- "$@" to separate them correctly
! PARSED=$(getopt --options=$OPTIONS --longoptions=$LONGOPTS --name "$0" -- "$@")
if [[ ${PIPESTATUS[0]} -ne 0 ]]; then
# e.g. return value is 1
# then getopt has complained about wrong arguments to stdout
Usage
exit 2
fi
# read getopt's output this way to handle the quoting right:
eval set -- "$PARSED"
# now enjoy the options in order and nicely split until we see --
while true; do
case "$1" in
-p|--proxy)
proxy="$2"
shift 2
;;
-w|--warning)
warn="$2"
shift 2
;;
-c|--critical)
crit="$2"
shift 2
;;
--)
shift
break
;;
*)
echo "URL UNKNOWN - ${1} is not a valid parameter"
exit 3
;;
esac
done
if [ -z ${1+x} ]; then
echo "URL UNKNOWN - url not given"
exit 3
else
url=${1}
fi
}
LC_NUMERIC="C"
warn=1
crit=2
script_name=$(basename "${0}")
script_dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
url=''
GetOptions "$@"
eval $(curl -L -o /dev/null -s -w 'RESPONSE_CODE=%{response_code}\nRESPONSE_TIME=%{time_total}\nDNS_TIME=%{time_namelookup}\nCONNECT_TIME=%{time_connect}' ${proxy:+"--proxy" "$proxy"} $url)
rdetail=""
if (( $(echo "$RESPONSE_CODE != 200" | bc -l) )); then
rval=2
rmsg="CRITICAL"
rdetail="$url was not available"
elif (( $(echo "$RESPONSE_TIME < ${warn}" | bc -l) )); then
rval=0
rmsg="OK"
elif (( $(echo "$RESPONSE_TIME < ${crit}" | bc -l) )); then
rval=1
rmsg="WARNING"
else
rval=2
rmsg="CRITICAL"
fi
unit='s'
echo "URL ${rmsg} - ${rdetail:+"$rdetail - "}Response code: ${RESPONSE_CODE} Response Time: ${RESPONSE_TIME} DNS Lookup time: ${DNS_TIME} Connect time: ${CONNECT_TIME}|response=${RESPONSE_TIME}${unit} dns-query=${DNS_TIME}${unit} connect=${CONNECT_TIME}${unit}"
exit $rval