145 lines
3.7 KiB
Bash
Executable File
145 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# NAME
|
|
# status.sh - Checks the status of the nevisIDM Service.
|
|
#
|
|
# SYNOPSIS
|
|
# status.sh
|
|
#
|
|
# DESCRIPTION
|
|
# Performs periodic checks until the service is up or broken or timeout is reached.
|
|
# The script terminates when the process of the service stops running.
|
|
# There are no arguments for this script.
|
|
#
|
|
# EXIT CODES
|
|
# 0 Service is up.
|
|
# 1 Service process is not running.
|
|
# 2 Service is broken.
|
|
# 3 Timeout reached.
|
|
|
|
# Defines how much we should sleep between checking if the service is up.
|
|
interval=1
|
|
# Defines how much we should wait the service to start up until we give up and exit.
|
|
timeout=180
|
|
((end_time=${SECONDS}+$timeout))
|
|
|
|
# Checks if the process of the service is still running.
|
|
# Arguments:
|
|
# None
|
|
# Returns:
|
|
# In case it is running, returns 0, otherwise non-zero (exit code of systemctl).
|
|
isProcessRunning() {
|
|
systemctl is-active --quiet nevisidm@default
|
|
IS_RUNNING=$?
|
|
return $IS_RUNNING
|
|
}
|
|
|
|
# Checks if the readiness (/health) management endpoint can be used for checking status.
|
|
# (nevisIDM introduced the readiness (/health) management endpoint in 2.73.1.15 version.)
|
|
# Arguments:
|
|
# None
|
|
# Returns:
|
|
# If the nevisIDM version is at least 2.73.1.15, returns 0.
|
|
# Otherwise returns 1.
|
|
canHealthCheckUsed() {
|
|
minimal=2.73.1.15
|
|
installed=`readlink -f /opt/nevisidm/bin | awk -F'/' '{print $4}' | sed 's/rc.*//'`
|
|
|
|
if [ "$installed" = "`echo -e "$installed\n$minimal" | sort -V | tail -n1`" ]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Checks if the service is up.
|
|
# Based on nevisIDM version uses different nevisIDM endpoints.
|
|
# Arguments:
|
|
# None
|
|
# Returns:
|
|
# The result of ServiceCheck function.
|
|
checkService() {
|
|
if canHealthCheckUsed; then
|
|
doServiceCheckHealth
|
|
return $?
|
|
else
|
|
doServiceCheckOld
|
|
return $?
|
|
fi
|
|
}
|
|
|
|
# Checks if the service is up. (Attempts connecting the service with curl.)
|
|
# In case the service is broken, exits with exit code 2.
|
|
# Arguments:
|
|
# None
|
|
# Returns:
|
|
# If the connection was successful and the service up (is not broken), returns 0.
|
|
# If the connection was not successful, returns the curl exit code.
|
|
doServiceCheckOld() {
|
|
HC=`curl --insecure --silent --output /dev/null --write-out "%{http_code}" https://idm-v1:8989/nevisidm/admin/`
|
|
CON=$?
|
|
|
|
if [ "$CON" -ne 0 ]; then
|
|
EXIT_CODE=$CON
|
|
elif [ $HC -ge 500 ]; then
|
|
echo "Service is broken (HTTP code $HC)."
|
|
exit 2
|
|
else
|
|
EXIT_CODE=0
|
|
fi
|
|
|
|
return $EXIT_CODE
|
|
}
|
|
|
|
# Checks if the service is up. (Attempts connecting the service with curl.)
|
|
# Note: With the health check endpoint there is no way fail early when the endpoint returns HTTP 503, because it can come up
|
|
# later and then return HTTP 200.
|
|
# Arguments:
|
|
# None
|
|
# Returns:
|
|
# If the connection was successful and the service up (is not broken), returns 0.
|
|
# If the connection was not successful, returns 1.
|
|
doServiceCheckHealth() {
|
|
HC=`curl --silent --output /dev/null --write-out "%{http_code}" http://0.0.0.0:8998/health`
|
|
CON=$?
|
|
|
|
if [ $HC -eq 200 ]; then
|
|
EXIT_CODE=0
|
|
else
|
|
EXIT_CODE=1
|
|
fi
|
|
|
|
return $EXIT_CODE
|
|
}
|
|
|
|
# This function encapsulates the logic of checking if the process is running and if the service is up.
|
|
# In case the process is not running, exits with exit code 1.
|
|
# Arguments:
|
|
# None
|
|
# Returns:
|
|
# If the service process is running, returns the result of the service check function.
|
|
check() {
|
|
if isProcessRunning
|
|
then
|
|
checkService
|
|
CS=$?
|
|
return $CS
|
|
else
|
|
echo "Process is not running."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Check the status of the service periodically.
|
|
while ((${SECONDS} < ${end_time}))
|
|
do
|
|
sleep ${interval}
|
|
if check
|
|
then
|
|
echo "Service is up."
|
|
exit 0
|
|
fi
|
|
done
|
|
|
|
echo "Exceeded check timeout (${timeout}s). Service is down."
|
|
exit 3 |