fix check_curl

This commit is contained in:
Cyberes 2023-06-15 13:32:23 -06:00
parent 792838d50d
commit 2c2a105480
Signed by: cyberes
GPG Key ID: 6B4A33836A9500FE
1 changed files with 32 additions and 11 deletions

View File

@ -1,8 +1,24 @@
#!/bin/bash
usage() {
echo "Usage: $0 -u <url> [-w <warning>] [-c <critical>] [-C <contains>] [-L] [-I] [-H <headers>] [-p] [-R] [-s]"
echo "[Arguments]:
-u Specify the URL to check (required).
-w Set the warn level for response time (default: 1 second).
-c Set the critical level for response time (default: 2 seconds).
-C If the body does not contain this string, return CRITICAL.
-L Follow redirects.
-I Insecure mode (--insecure).
-H Specify headers. Formatted like \"Header1: value,Header2: value\"
-p Print the curl command and exit
-R Set curl --resolve option.
-s Ignore the response status code."
exit 3
}
# Default values
WARN_TIME=1
CRIT_TIME=2
WARN_TIME=700
CRIT_TIME=1000
FOLLOW_REDIRECTS=""
INSECURE=""
HEADERS=""
@ -12,7 +28,7 @@ IGNORE_STATUS=""
TIMEOUT=""
# Parse arguments
while getopts "u:w:c:C:LH:IpR:st:" opt; do
while getopts "u:w:c:C:LH:IpR:st:h" opt; do
case $opt in
u)
URL="$OPTARG"
@ -47,8 +63,12 @@ while getopts "u:w:c:C:LH:IpR:st:" opt; do
t)
TIMEOUT="--max-time $OPTARG"
;;
h)
usage
;;
*)
echo "Invalid option: -$OPTARG" >&2
usage
exit 3
;;
esac
@ -355,28 +375,29 @@ fi
# Check HTTP code
if [ "$IGNORE_STATUS" != "yes" ] && [ "$HTTP_CODE" -ne 200 ]; then
echo "CRITICAL - Server returned HTTP code $HTTP_CODE -> $URL"
echo "CRITICAL - server returned HTTP code $HTTP_CODE -> $URL"
exit 2
fi
RESPONSE_TIME_MS=$(echo "$RESPONSE_TIME * 1000" | bc)
# Check response time
if [ $(echo "$RESPONSE_TIME > $CRIT_TIME" | bc) -eq 1 ]; then
echo "CRITICAL - Response time $RESPONSE_TIME seconds -> $URL | response_time=${RESPONSE_TIME}s"
if [ $(echo "$RESPONSE_TIME_MS > $CRIT_TIME" | bc) -eq 1 ]; then
echo "CRITICAL - Response time $RESPONSE_TIME seconds -> $URL | response_time=${RESPONSE_TIME_MS}ms"
exit 2
elif [ $(echo "$RESPONSE_TIME > $WARN_TIME" | bc) -eq 1 ]; then
echo "WARNING - Response time $RESPONSE_TIME seconds -> $URL | response_time=${RESPONSE_TIME}s"
elif [ $(echo "$RESPONSE_TIME_MS > $WARN_TIME" | bc) -eq 1 ]; then
echo "WARNING - response time $RESPONSE_TIME seconds -> $URL | response_time=${RESPONSE_TIME}s"
exit 1
fi
# Check critical string
if [ -n "$CRIT_STRING" ]; then
BODY=$(curl -s $FOLLOW_REDIRECTS $INSECURE $HEADERS $RESOLVE $TIMEOUT $URL)
if [[ ! $BODY =~ $CRIT_STRING ]]; then
echo "CRITICAL - Response body does not contain '$CRIT_STRING'"
if ! echo "$BODY" | grep -q "$CRIT_STRING"; then
echo "CRITICAL - response body does not contain '$CRIT_STRING': $BODY"
exit 2
fi
fi
# All checks passed
echo "OK - Response time $RESPONSE_TIME seconds -> $URL | response_time=${RESPONSE_TIME}s"
echo "OK - response time was $RESPONSE_TIME seconds -> $URL | response_time=${RESPONSE_TIME_MS}ms;$WARN_TIME;$CRIT_TIME;0;;"
exit 0