Jeroen De Meerleer
05220c207a
This commit adds formatting improvements to the output of check-url.sh. Specifically, it formats the response time, DNS lookup time, and connect time to three decimal places. This makes the output more readable and easier to understand.
115 lines
3.3 KiB
Bash
115 lines
3.3 KiB
Bash
#!/bin/bash
|
|
|
|
#
|
|
#/
|
|
#/ Usage:
|
|
#/ check-url.sh --proxy=<proxy-url> --warning=<level> --critical=<level> --help <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)
|
|
#/ -h, --help Display this help message
|
|
#/
|
|
#/ 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:h
|
|
LONGOPTS=proxy:,warning:,critical:,help
|
|
|
|
# -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
|
|
;;
|
|
-h|--help)
|
|
Usage
|
|
exit 0
|
|
;;
|
|
--)
|
|
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)
|
|
response_time=$(printf %.3f $(echo ${RESPONSE_TIME}))
|
|
dns_time=$(printf %.3f $(echo ${DNS_TIME}))
|
|
connect_time=$(printf %.3f $(echo ${CONNECT_TIME}))
|
|
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
|