Added code for support of fix/healing logic. Command-line opion --no-fix & global var ARG_NO_FIX

This commit is contained in:
Patrick Van der Veken 2019-06-17 15:17:22 +02:00
parent a4868cda09
commit 8e779b6062
2 changed files with 24 additions and 7 deletions

View File

@ -38,7 +38,7 @@
# ------------------------- CONFIGURATION starts here ------------------------- # ------------------------- CONFIGURATION starts here -------------------------
# define the version (YYYY-MM-DD) # define the version (YYYY-MM-DD)
typeset -r SCRIPT_VERSION="2019-05-19" typeset -r SCRIPT_VERSION="2019-06-18"
# location of parent directory containing KSH functions/HC plugins # location of parent directory containing KSH functions/HC plugins
typeset -r FPATH_PARENT="/opt/hc/lib" typeset -r FPATH_PARENT="/opt/hc/lib"
# location of custom HC configuration files # location of custom HC configuration files
@ -134,6 +134,7 @@ typeset ARG_LAST=0 # report last events
typeset ARG_LIST="" # list all by default typeset ARG_LIST="" # list all by default
typeset ARG_LOCK=1 # lock for concurrent script executions is on by default typeset ARG_LOCK=1 # lock for concurrent script executions is on by default
typeset ARG_LOG=1 # logging is on by default typeset ARG_LOG=1 # logging is on by default
typeset ARG_NO_FIX=0 # fix/healing is not disabled by default
typeset ARG_LOG_HEALTHY=0 # logging of healthy health checks is off by default typeset ARG_LOG_HEALTHY=0 # logging of healthy health checks is off by default
typeset ARG_MONITOR=1 # killing long running HC processes is on by default typeset ARG_MONITOR=1 # killing long running HC processes is on by default
typeset ARG_NEWER="" typeset ARG_NEWER=""
@ -543,7 +544,7 @@ Execute/report simple health checks (HC) on UNIX hosts.
Syntax: ${SCRIPT_DIR}/${SCRIPT_NAME} [--help] | [--help-terse] | [--version] | Syntax: ${SCRIPT_DIR}/${SCRIPT_NAME} [--help] | [--help-terse] | [--version] |
[--list=<needle>] | [--list-core] | [--list-include] | [--fix-symlinks] | [--show-stats] | (--archive-all | --disable-all | --enable-all) | [--fix-logs [--with-history]] | [--list=<needle>] | [--list-core] | [--list-include] | [--fix-symlinks] | [--show-stats] | (--archive-all | --disable-all | --enable-all) | [--fix-logs [--with-history]] |
(--check-host | ((--archive | --check | --enable | --disable | --run [--timeout=<secs>] | --show) --hc=<list_of_checks> [--config-file=<configuration_file>] [hc-args="<arg1,arg2=val,arg3">])) (--check-host | ((--archive | --check | --enable | --disable | --run [--timeout=<secs>] | --show) --hc=<list_of_checks> [--config-file=<configuration_file>] [hc-args="<arg1,arg2=val,arg3">]))
[--display=<method>] ([--debug] [--debug-level=<level>]) [--log-healthy] [--no-monitor] [--no-log] [--no-lock] [[--flip-rc] [--with-rc=<count|max|sum>]]] [--display=<method>] ([--debug] [--debug-level=<level>]) [--log-healthy] [--no-fix] [--no-log] [--no-lock] [--no-monitor] [[--flip-rc] [--with-rc=<count|max|sum>]]]
[--notify=<method_list>] [--mail-to=<address_list>] [--sms-to=<sms_rcpt> --sms-provider=<name>] [--notify=<method_list>] [--mail-to=<address_list>] [--sms-to=<sms_rcpt> --sms-provider=<name>]
[--report=<method> [--with-history] ( ([--last] | [--today]) | [(--older|--newer)=<date>] | [--reverse] [--id=<fail_id> [--detail]] )] [--report=<method> [--with-history] ( ([--last] | [--today]) | [(--older|--newer)=<date>] | [--reverse] [--id=<fail_id> [--detail]] )]
@ -588,6 +589,7 @@ Parameters:
(can be overridden by --no-log to disable all logging) (can be overridden by --no-log to disable all logging)
--mail-to : list of e-mail address(es) to which an e-mail alert will be send to [requires mail core plugin] --mail-to : list of e-mail address(es) to which an e-mail alert will be send to [requires mail core plugin]
--newer : show the (failed) events for each HC that are newer than the given date --newer : show the (failed) events for each HC that are newer than the given date
--no-fix : do not apply fix/healing logic for failed health checks (if available)
--no-lock : disable locking to allow concurrent script executions --no-lock : disable locking to allow concurrent script executions
--no-log : do not log any messages to the script log file or health check results. --no-log : do not log any messages to the script log file or health check results.
--no-monitor : do not stop the execution of a HC after \$HC_TIME_OUT seconds --no-monitor : do not stop the execution of a HC after \$HC_TIME_OUT seconds
@ -952,8 +954,13 @@ do
# shellcheck disable=SC2034 # shellcheck disable=SC2034
ARG_NOTIFY="${CMD_PARAMETER#--notify=}" ARG_NOTIFY="${CMD_PARAMETER#--notify=}"
;; ;;
-no-fix|--no-fix)
ARG_NO_FIX=1
;;
-no-log|--no-log) -no-log|--no-log)
ARG_LOG=0 ARG_LOG=0
# --no-log always means --no-fix!
ARG_NO_FIX=1
;; ;;
-no-lock|--no-lock) -no-lock|--no-lock)
ARG_LOCK=0 ARG_LOCK=0

View File

@ -30,7 +30,7 @@
# RETURNS: 0 # RETURNS: 0
function version_include_core function version_include_core
{ {
typeset _VERSION="2019-05-19" # YYYY-MM-DD typeset _VERSION="2019-06-18" # YYYY-MM-DD
print "INFO: $0: ${_VERSION#version_*}" print "INFO: $0: ${_VERSION#version_*}"
@ -1569,6 +1569,7 @@ typeset FCONFIG=""
typeset FSTATE="" typeset FSTATE=""
typeset FFILE="" typeset FFILE=""
typeset FHEALTHY="" typeset FHEALTHY=""
typeset FFIX=0
typeset FSCHEDULED=0 typeset FSCHEDULED=0
typeset FSCRIPT="" typeset FSCRIPT=""
typeset HAS_FCONFIG=0 typeset HAS_FCONFIG=0
@ -1587,9 +1588,9 @@ fi
if [[ "${FACTION}" != "list" ]] if [[ "${FACTION}" != "list" ]]
then then
# shellcheck disable=SC1117 # shellcheck disable=SC1117
printf "%-40s\t%-8s\t%s\t\t%s\t%s\t%s\n" "Health Check" "State" "Version" "Config?" "Sched?" "H+?" printf "%-40s\t%-8s\t%s\t\t%s\t%s\t%s\t%s\n" "Health Check" "State" "Version" "Config?" "Sched?" "H+?" "Fix?"
# shellcheck disable=SC2183,SC1117 # shellcheck disable=SC2183,SC1117
printf "%100s\n" | tr ' ' - printf "%110s\n" | tr ' ' -
fi fi
print "${FPATH}" | tr ':' '\n' 2>/dev/null | grep -v "core$" 2>/dev/null | sort 2>/dev/null |\ print "${FPATH}" | tr ':' '\n' 2>/dev/null | grep -v "core$" 2>/dev/null | sort 2>/dev/null |\
while read -r FDIR while read -r FDIR
@ -1654,6 +1655,13 @@ do
FCONFIG="No" FCONFIG="No"
FHEALTHY="N/S" FHEALTHY="N/S"
fi fi
# check fix
if (( $(print -R "${FSCRIPT}" | grep -c -E -e "_HC_CAN_FIX=1" 2>/dev/null) > 0 ))
then
FFIX="Yes"
else
FFIX="No"
fi
# check state # check state
DISABLE_FFILE="$(print ${FFILE##*/} | sed 's/\.sh$//')" DISABLE_FFILE="$(print ${FFILE##*/} | sed 's/\.sh$//')"
if [[ -f "${STATE_PERM_DIR}/${DISABLE_FFILE}.disabled" ]] if [[ -f "${STATE_PERM_DIR}/${DISABLE_FFILE}.disabled" ]]
@ -1678,13 +1686,14 @@ do
if [[ "${FACTION}" != "list" ]] if [[ "${FACTION}" != "list" ]]
then then
# shellcheck disable=SC1117 # shellcheck disable=SC1117
printf "%-40s\t%-8s\t%s\t%s\t%s\t%s\n" \ printf "%-40s\t%-8s\t%s\t%s\t%s\t%s\t%s\n" \
"${FNAME#function *}" \ "${FNAME#function *}" \
"${FSTATE}" \ "${FSTATE}" \
"${FVERSION#typeset _VERSION=*}" \ "${FVERSION#typeset _VERSION=*}" \
"${FCONFIG}" \ "${FCONFIG}" \
"${FSCHEDULED}" \ "${FSCHEDULED}" \
"${FHEALTHY}" "${FHEALTHY}" \
"${FFIX}"
else else
# shellcheck disable=SC1117 # shellcheck disable=SC1117
printf "%s\n" "${FNAME#function *}" printf "%s\n" "${FNAME#function *}"
@ -1723,6 +1732,7 @@ then
print "Config?: plugin has a default configuration file (Yes/No)" print "Config?: plugin has a default configuration file (Yes/No)"
print "Sched? : plugin is scheduled through cron (Yes/No)" print "Sched? : plugin is scheduled through cron (Yes/No)"
print "H+? : plugin can choose whether to log/show passed health checks (Yes/No/Supported/Not supported)" print "H+? : plugin can choose whether to log/show passed health checks (Yes/No/Supported/Not supported)"
print "Fix? : plugin contains fix/healing logic (Yes/No) -- not used by default!"
fi fi
return 0 return 0