New Xymon probe for Maco
This commit is contained in:
parent
06b03ea27c
commit
5cdfcd7751
|
@ -0,0 +1,179 @@
|
|||
#!/bin/sh
|
||||
|
||||
# This script will check if upgrade is available for local Maco script
|
||||
|
||||
# Vars {{{
|
||||
readonly PROGNAME=$(basename "${0}")
|
||||
|
||||
[ -z "${DEBUG}" ] && DEBUG=1
|
||||
|
||||
## Xymon
|
||||
readonly TEST="maco"
|
||||
readonly PLUGIN_RESULT="${XYMONTMP}/${MACHINEDOTS}.${TEST}.plugin_result"
|
||||
readonly PLUGIN_STATE="${XYMONTMP}/${MACHINEDOTS}.${TEST}.plugin_state"
|
||||
readonly XYMON_USERNAME="xymon"
|
||||
readonly XYMON_GROUPNAME="xymon"
|
||||
|
||||
# By default, don't empty files newer than 10hours (600 minutes)
|
||||
readonly DEFAULT_MTIME_MINUTES="600"
|
||||
|
||||
## Colors {{{
|
||||
readonly PURPLE='\033[1;35m'
|
||||
## }}}
|
||||
|
||||
# }}}
|
||||
|
||||
# Print message with DEBUG prefix and color {{{
|
||||
debug_message() {
|
||||
|
||||
local_debug_message="${1}"
|
||||
|
||||
## Print message if DEBUG is enable (=0)
|
||||
[ "${DEBUG}" -eq "0" ] && printf '\e[1;35m%-6b\e[m\n' "DEBUG − ${PROGNAME} : ${local_debug_message}"
|
||||
|
||||
}
|
||||
# }}}
|
||||
# Create or empty a file if it's too old {{{
|
||||
## First argument (required): Absolut path to the file
|
||||
## Second argument (optionnal): Maximum number of minutes since last modification
|
||||
regenerate_if_too_old() {
|
||||
## Set variables according to the number of passed arguments {{{
|
||||
case $# in
|
||||
0 )
|
||||
debug_message "regenerate_if_too_old − \
|
||||
Need at least 1 argument."
|
||||
exit 1
|
||||
;;
|
||||
1 )
|
||||
_file="${1}"
|
||||
debug_message "regenerate_if_too_old − \
|
||||
Use DEFAULT_MTIME_MINUTES value: ${DEFAULT_MTIME_MINUTES}."
|
||||
_max_mtime_minutes="${DEFAULT_MTIME_MINUTES}"
|
||||
;;
|
||||
2 )
|
||||
_file="${1}"
|
||||
_max_mtime_minutes="${2}"
|
||||
;;
|
||||
esac
|
||||
|
||||
## }}}
|
||||
|
||||
## If the file exists
|
||||
if [ -f "${_file}" ]; then
|
||||
_current_timestamp=$(date "+%s")
|
||||
_file_mtime_timestamp=$(stat --format="%Y" -- "${_file}")
|
||||
|
||||
## Substract last modification timestamp of the file to current timestamp
|
||||
: $(( _file_mtime_seconds=_current_timestamp-_file_mtime_timestamp ))
|
||||
## Get maximum allowed mtime in seconds
|
||||
: $(( _max_mtime_seconds=_max_mtime_minutes*60 ))
|
||||
|
||||
## Compare last modification mtime with the maximum allowed
|
||||
if [ "${_file_mtime_seconds}" -gt "${_max_mtime_seconds}" ]; then
|
||||
debug_message "regenerate_if_too_old − \
|
||||
Need to empty ${_file} last modification happened ${_file_mtime_seconds} seconds ago (maximum is ${_max_mtime_seconds})."
|
||||
true > "${_file}"
|
||||
chown -- "${XYMON_USERNAME}":"${XYMON_GROUPNAME}" "${_file}"
|
||||
else
|
||||
debug_message "regenerate_if_too_old − \
|
||||
Don't need to empty ${_file} last modification happened ${_file_mtime_seconds} seconds ago (maximum is ${_max_mtime_seconds})."
|
||||
fi
|
||||
else ## Else if the file don't exists, just create it
|
||||
debug_message "regenerate_if_too_old − \
|
||||
Need to create ${_file}."
|
||||
true > "${_file}"
|
||||
fi
|
||||
|
||||
}
|
||||
# }}}
|
||||
# Test if a file is empty {{{
|
||||
is_file_empty() {
|
||||
_file_empty=$1
|
||||
|
||||
if [ ! -s "${_file_empty}" ]; then
|
||||
debug_message "is_file_empty − \
|
||||
${_file_empty} file is empty."
|
||||
return 0
|
||||
else
|
||||
debug_message "is_file_empty − \
|
||||
${_file_empty} file is not empty."
|
||||
return 1
|
||||
fi
|
||||
|
||||
}
|
||||
# }}}
|
||||
# Get Maco status {{{
|
||||
get_maco_status() {
|
||||
|
||||
maco_status_script_path="/opt/repos/ipr.scripts/cluster/maco.check.update.sh"
|
||||
maco_status_script_options="--simulate"
|
||||
|
||||
## Run status_script and store result in PLUGIN_RESULT file
|
||||
debug_message "get_maco_status − \
|
||||
Run \"${maco_status_script_path}\" script with \"${maco_status_script_options}\" options."
|
||||
sh "${maco_status_script_path}" "${maco_status_script_options}" >> "${PLUGIN_RESULT}"
|
||||
|
||||
}
|
||||
# }}}
|
||||
# Analyze maco result to define colors to send to Xymon {{{
|
||||
analyze_maco_status() {
|
||||
|
||||
debug_message "analyze_maco_status − \
|
||||
Try to detect Maco status with ${PLUGIN_RESULT} content."
|
||||
|
||||
if grep -qE '^Local.* up to date.*' "${PLUGIN_RESULT}"
|
||||
then
|
||||
echo "3&green Maco is uptodate" >> "${PLUGIN_STATE}"
|
||||
elif grep -qE '^Latest.* available.*' "${PLUGIN_RESULT}"
|
||||
then
|
||||
echo "2&yellow Maco needs upgrade" >> "${PLUGIN_STATE}"
|
||||
elif grep -qE '^Urgent.* available.*' "${PLUGIN_RESULT}"
|
||||
then
|
||||
echo "1&red Maco needs urgent upgrade" >> "${PLUGIN_STATE}"
|
||||
else
|
||||
echo "4&clear Maco status is unknown" >> "${PLUGIN_STATE}"
|
||||
fi
|
||||
|
||||
}
|
||||
# }}}
|
||||
# Send plugin results to Xymon server {{{
|
||||
send_result_to_xymon_server() {
|
||||
|
||||
# Set the main color according to the highest alert
|
||||
COLOR=$(< "${PLUGIN_STATE}" awk '{print $1}' | sort | uniq | head -1 | cut -c3-)
|
||||
|
||||
# Send informations to Xymon server
|
||||
$XYMON "${XYMSRV}" "status ${MACHINE}.${TEST} ${COLOR} $(cat ${PLUGIN_RESULT})"
|
||||
#For testing only
|
||||
#echo $XYMON "${XYMSRV}" "status ${MACHINE}.${TEST} ${COLOR} $(cat ${PLUGIN_RESULT})" > /tmp/xymon.maco.tmp
|
||||
|
||||
}
|
||||
# }}}
|
||||
|
||||
main() { # {{{
|
||||
|
||||
# Create or empty previous file only if too old
|
||||
regenerate_if_too_old "${PLUGIN_RESULT}"
|
||||
regenerate_if_too_old "${PLUGIN_STATE}"
|
||||
|
||||
# If previous result is empty
|
||||
## Re-check Maco status
|
||||
is_file_empty "${PLUGIN_RESULT}" \
|
||||
&& get_maco_status
|
||||
|
||||
# If previous state is empty
|
||||
## analyze Maco's result
|
||||
is_file_empty "${PLUGIN_STATE}" \
|
||||
&& analyze_maco_status
|
||||
|
||||
# Send data to Xymon server
|
||||
## and exit
|
||||
send_result_to_xymon_server \
|
||||
&& exit 0
|
||||
|
||||
}
|
||||
# }}}
|
||||
|
||||
main
|
||||
|
||||
exit 255
|
Loading…
Reference in New Issue