3
0
mirror of https://github.com/rvalitov/zabbix-php-fpm.git synced 2023-11-05 03:30:27 +01:00

WIP timeout

This commit is contained in:
Ramil Valitov 2020-06-28 18:18:43 +03:00
parent edeeeaa2c0
commit 1fcb408790
No known key found for this signature in database
GPG Key ID: 2AB186DABDFE1914

View File

@ -3,6 +3,44 @@
#https://github.com/rvalitov/zabbix-php-fpm #https://github.com/rvalitov/zabbix-php-fpm
#This script scans local machine for active PHP-FPM pools and returns them as a list in JSON format #This script scans local machine for active PHP-FPM pools and returns them as a list in JSON format
#This parameter is used to limit the execution time of this script. Zabbix allows us to run maximum of 3 seconds, so
#we need to stop and save our state in case we need more time to run. This parameter sets the maximum number of
#seconds that the script is allowed to run. After this duration is reached, the script will stop running and save its
#state. So, the actual execution time will be slightly more than this parameter.
#We put value 2 here, because we can use only integers.
MAX_EXECUTION_TIME=2
#Reset the seconds variable
SECONDS=0
#Status path used in calls to PHP-FPM
STATUS_PATH="/php-fpm-status"
#Debug mode is disabled by default
DEBUG_MODE=""
#Local directory
LOCAL_DIR=$(${S_DIRNAME} "$0")
#Cache file for ondemand pools
#File format:
#<pool name> <socket or TCP>
ONDEMAND_CACHE_FILE="$LOCAL_DIR/php_fpm_ondemand.cache"
#Cache file for pending pools, used to store execution state
#File format:
#<pool name>
PENDING_FILE="$LOCAL_DIR/php_fpm_pending.cache"
#Cache file with list of active pools, used to store execution state
#File format:
#<pool name> <socket or TCP>
RESULTS_CACHE_FILE="$LOCAL_DIR/php_fpm_results.cache"
#Path to status script, another script of this bundle
STATUS_SCRIPT="$LOCAL_DIR/zabbix_php_fpm_status.sh"
#Checking all the required executables
S_PS=$(type -P ps) S_PS=$(type -P ps)
S_GREP=$(type -P grep) S_GREP=$(type -P grep)
S_AWK=$(type -P awk) S_AWK=$(type -P awk)
@ -66,8 +104,6 @@ if [[ ! -f ${S_WHOAMI} ]]; then
exit 1 exit 1
fi fi
STATUS_PATH="/php-fpm-status"
DEBUG_MODE=""
ACTIVE_USER=$(${S_WHOAMI}) ACTIVE_USER=$(${S_WHOAMI})
# Prints a string on screen. Works only if debug mode is enabled. # Prints a string on screen. Works only if debug mode is enabled.
@ -122,6 +158,15 @@ function IsInCache() {
return 0 return 0
} }
function CheckExecutionTime() {
if [[ $SECONDS -lt $MAX_EXECUTION_TIME ]]; then
#All good, we can continue
return 1;
fi
#We need to save our state and exit
}
# Validates the specified pool by getting its status and working with cache. # Validates the specified pool by getting its status and working with cache.
# Pass two arguments: pool name and pool socket # Pass two arguments: pool name and pool socket
# Function returns: # Function returns:
@ -188,9 +233,6 @@ done
PrintDebug "Current user is $ACTIVE_USER" PrintDebug "Current user is $ACTIVE_USER"
PrintDebug "Status path to be used: $STATUS_PATH" PrintDebug "Status path to be used: $STATUS_PATH"
LOCAL_DIR=$(${S_DIRNAME} "$0")
CACHE_FILE="$LOCAL_DIR/php_fpm.cache"
STATUS_SCRIPT="$LOCAL_DIR/zabbix_php_fpm_status.sh"
PrintDebug "Local directory is $LOCAL_DIR" PrintDebug "Local directory is $LOCAL_DIR"
if [[ ! -f ${STATUS_SCRIPT} ]]; then if [[ ! -f ${STATUS_SCRIPT} ]]; then
${S_ECHO} "Helper script $STATUS_SCRIPT not found" ${S_ECHO} "Helper script $STATUS_SCRIPT not found"
@ -206,11 +248,20 @@ PrintDebug "Helper script $STATUS_SCRIPT is reachable"
# The cache file consists of lines, each line contains pool name, then space, then socket (or TCP info) # The cache file consists of lines, each line contains pool name, then space, then socket (or TCP info)
CACHE=() CACHE=()
NEW_CACHE=() NEW_CACHE=()
if [[ -r ${CACHE_FILE} ]]; then if [[ -r ${ONDEMAND_CACHE_FILE} ]]; then
PrintDebug "Reading cache file $CACHE_FILE..." PrintDebug "Reading cache file of ondemand pools $ONDEMAND_CACHE_FILE..."
mapfile -t CACHE < <(${S_CAT} "${CACHE_FILE}") mapfile -t CACHE < <(${S_CAT} "${ONDEMAND_CACHE_FILE}")
else else
PrintDebug "Cache file $CACHE_FILE not found, skipping..." PrintDebug "Cache file of ondemand pools $ONDEMAND_CACHE_FILE not found, skipping..."
fi
#Loading pending tasks
PENDING_LIST=()
if [[ -r $PENDING_FILE ]]; then
PrintDebug "Reading file of pending pools ${PENDING_FILE}..."
mapfile -t PENDING_LIST < <(${S_CAT} "${PENDING_FILE}")
else
PrintDebug "List of pending pools ${PENDING_FILE} not found, skipping..."
fi fi
mapfile -t PS_LIST < <($S_PS ax | $S_GREP -F "php-fpm: pool " | $S_GREP -F -v "grep") mapfile -t PS_LIST < <($S_PS ax | $S_GREP -F "php-fpm: pool " | $S_GREP -F -v "grep")
@ -328,13 +379,13 @@ for CACHE_ITEM in "${CACHE[@]}"; do
fi fi
done done
if [[ -f ${CACHE_FILE} ]] && [[ ! -w ${CACHE_FILE} ]]; then if [[ -f ${ONDEMAND_CACHE_FILE} ]] && [[ ! -w ${ONDEMAND_CACHE_FILE} ]]; then
${S_ECHO} "Error: write permission is not granted to user $ACTIVE_USER for cache file $CACHE_FILE" ${S_ECHO} "Error: write permission is not granted to user $ACTIVE_USER for cache file $ONDEMAND_CACHE_FILE"
exit 1 exit 1
fi fi
PrintDebug "Saving new cache file $CACHE_FILE..." PrintDebug "Saving new cache file $ONDEMAND_CACHE_FILE..."
${S_PRINTF} "%s\n" "${NEW_CACHE[@]}" >"${CACHE_FILE}" ${S_PRINTF} "%s\n" "${NEW_CACHE[@]}" >"${ONDEMAND_CACHE_FILE}"
RESULT_DATA="$RESULT_DATA]}" RESULT_DATA="$RESULT_DATA]}"
PrintDebug "Resulting JSON data for Zabbix:" PrintDebug "Resulting JSON data for Zabbix:"