debug, amélioration complétion
All checks were successful
Ansible Lint |Total|New|Outstanding|Fixed|Trend
|:-:|:-:|:-:|:-:|:-:
|2688|4|2684|4|:-1:
Reference build: <a href="https://jenkins.evolix.org/job/gitea/job/ansible-roles/job/monitoringctl/7//ansiblelint">Evolix » ansible-roles » monitoringctl #7</a>
gitea/ansible-roles/pipeline/head This commit looks good
All checks were successful
Ansible Lint |Total|New|Outstanding|Fixed|Trend
|:-:|:-:|:-:|:-:|:-:
|2688|4|2684|4|:-1:
Reference build: <a href="https://jenkins.evolix.org/job/gitea/job/ansible-roles/job/monitoringctl/7//ansiblelint">Evolix » ansible-roles » monitoringctl #7</a>
gitea/ansible-roles/pipeline/head This commit looks good
This commit is contained in:
parent
ff007b9543
commit
6aab5f1aa2
|
@ -4,8 +4,6 @@
|
|||
# https://gitea.evolix.org/evolix/ansible-roles/src/branch/stable/nagios-nrpe
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
readonly PROGNAME=$(basename $0)
|
||||
readonly base_dir="/var/lib/monitoringctl"
|
||||
readonly log_file="/var/log/monitoringctl.log"
|
||||
|
@ -41,28 +39,32 @@ time_to_seconds() {
|
|||
# $1: time in string format
|
||||
if echo "${1}" | grep -E -q '^([0-9]+[wdhms])+$'; then
|
||||
echo "${1}" | sed 's/w/ * 604800 + /g; s/d/ * 86400 + /g; s/h/ * 3600 + /g; s/m/ * 60 + /g; s/s/ + /g; s/+ $//' | xargs expr
|
||||
elif echo "${1}" | grep -E -q '^([0-9]+$)'; then
|
||||
echo "${1} * 3600" | xargs expr
|
||||
elif echo "${1}" | grep -E -q '^([0-9]+h[0-9]+$)'; then
|
||||
echo "${1}" | sed 's/h/ * 3600 + /g; s/$/ * 60/' | xargs expr
|
||||
elif echo "${1}" | grep -E -q '^([0-9]+m[0-9]+$)'; then
|
||||
echo "${1}" | sed 's/m/ * 60 + /g' | xargs expr
|
||||
else
|
||||
error "Invalid duration: '${1}'."
|
||||
fi
|
||||
}
|
||||
|
||||
get_disable_names() {
|
||||
grep "alerts_wrapper" -Rs /etc/nagios/ | grep -vE "^\s*#" | awk '{ for (i=1; i<=NF; i++) { if ($i ~ /(-n|--name)/) print $(i+1) } }' | tr ',' '\n' | sort | uniq
|
||||
grep "alerts_wrapper" -Rs /etc/nagios/ | grep -vE "^\s*#" | awk '{ for (i=1; i<=NF; i++) { if ($i ~ /^(-n|--name)$/) { print $(i+1); break } } }' | tr ',' '\n' | sort | uniq
|
||||
}
|
||||
|
||||
disable_alerts () {
|
||||
# $1: check name
|
||||
disable_file_path="${base_dir}/${check_name}_alerts_disabled"
|
||||
echo "${duration_sec}" > "${disable_file_path}"
|
||||
# $1: check name, $2: duration_sec
|
||||
now_secs=$(date +"%s")
|
||||
disable_until_secs=$(( now_secs + $2 ))
|
||||
disable_file_path="${base_dir}/${1}_alerts_disabled"
|
||||
echo "${disable_until_secs}" > "${disable_file_path}"
|
||||
chmod 0644 "${disable_file_path}"
|
||||
log_disable "$1"
|
||||
}
|
||||
|
||||
enable_alerts () {
|
||||
# $1: check name
|
||||
disable_file_path="${base_dir}/${check_name}_alerts_disabled"
|
||||
disable_file_path="${base_dir}/${1}_alerts_disabled"
|
||||
if [ -e "${disable_file_path}" ]; then
|
||||
rm "${disable_file_path}"
|
||||
fi
|
||||
|
@ -85,18 +87,25 @@ log_enable () {
|
|||
|
||||
|
||||
main () {
|
||||
mkdir -p "${base_dir}"
|
||||
|
||||
#TODO
|
||||
if all
|
||||
for check in $(get_disable_names); do
|
||||
done
|
||||
install --mode=0755 --directory "${base_dir}"
|
||||
|
||||
if [ "${action}" == 'enable' ]; then
|
||||
enable_alerts "${check_name}"
|
||||
if [ "${check_name}" == "all" ]; then
|
||||
for check in $(get_disable_names); do
|
||||
enable_alerts "${check}"
|
||||
done
|
||||
else
|
||||
enable_alerts "${check_name}"
|
||||
fi
|
||||
elif [ "${action}" == 'disable' ]; then
|
||||
duration_sec=$(time_to_seconds "${duration}")
|
||||
disable_alerts "${check_name}"
|
||||
if [ "${check_name}" == "all" ]; then
|
||||
for check in $(get_disable_names); do
|
||||
disable_alerts "${check}" "${duration_sec}"
|
||||
done
|
||||
else
|
||||
disable_alerts "${check_name}" "${duration_sec}"
|
||||
fi
|
||||
elif [ "${action}" == 'help' ]; then
|
||||
usage
|
||||
fi
|
||||
|
@ -116,20 +125,22 @@ while :; do
|
|||
fi
|
||||
shift; shift;;
|
||||
*)
|
||||
if [ -z "${action}" ]; then
|
||||
error "Missing action argument."
|
||||
elif [ -n "${check_name}" ]; then
|
||||
error "Unknown argument '$1'."
|
||||
elif [ -z "$1" ]; then
|
||||
break
|
||||
fi
|
||||
get_disable_names | grep --quiet -E "^$1$"
|
||||
arg_is_in_disable_names_rc=$?
|
||||
if [ "${arg_is_in_disable_names_rc}" -eq 0 ] || [ "$1" == "all" ]; then
|
||||
check_name="$1"
|
||||
if [ -n "$1" ]; then
|
||||
get_disable_names | grep --quiet -E "^$1$"
|
||||
arg_is_in_disable_names_rc=$?
|
||||
if [ "${arg_is_in_disable_names_rc}" -eq 0 ] || [ "$1" == "all" ]; then
|
||||
check_name="$1"
|
||||
else
|
||||
error "Unknown argument '$1', or NAME not defined in NRPE configuration."
|
||||
fi
|
||||
else
|
||||
error "Unknown argument '$1', or NAME not defined in NRPE configuration."
|
||||
if [ -z "${action}" ]; then
|
||||
error "Missing action argument."
|
||||
elif [ -z "$1" ]; then
|
||||
break
|
||||
fi
|
||||
fi
|
||||
|
||||
shift;;
|
||||
esac
|
||||
done
|
||||
|
|
|
@ -55,7 +55,7 @@ time_to_seconds() {
|
|||
|
||||
delay_from_disable_file() {
|
||||
# $1: disabled file containing the re-enable time in sec
|
||||
enable_secs=$(grep -v -E "^\s*#" "${1}" | grep -E "[0-9]+" | head -n1 | awk '{print $1}')
|
||||
enable_secs=$(grep -v -E "^\s*#" "${1}" | grep -E "^[0-9]+$" | head -n1 | awk '{print $1}')
|
||||
# If file is empty, use file last change date plus default disabled time
|
||||
if [ -z "${enable_secs}" ]; then
|
||||
file_last_change_secs=$(stat -c %Z "$1")
|
||||
|
@ -71,19 +71,19 @@ delay_to_string() {
|
|||
#$1 delay in secs
|
||||
delay_days="$(( delay /86400 ))"
|
||||
if [ "${delay_days}" -eq 0 ]; then delay_days=""
|
||||
else delay_days="${delay_days}d "; fi
|
||||
else delay_days="${delay_days}d"; fi
|
||||
|
||||
delay_hours="$(( (delay %86400) /3600 ))"
|
||||
if [ "${delay_hours}" -eq 0 ]; then delay_hours=""
|
||||
else delay_hours="${delay_hours}h "; fi
|
||||
else delay_hours="${delay_hours}h"; fi
|
||||
|
||||
delay_minutes="$(( ((delay %86400) %3600) /60 ))"
|
||||
if [ "${delay_minutes}" -eq 0 ]; then delay_minutes=""
|
||||
else delay_minutes="${delay_minutes}m "; fi
|
||||
else delay_minutes="${delay_minutes}m"; fi
|
||||
|
||||
delay_seconds="$(( ((delay %86400) %3600) %60 ))"
|
||||
if [ "${delay_seconds}" -eq 0 ]; then delay_seconds=""
|
||||
else delay_days="${delay_days}s "; fi
|
||||
else delay_seconds="${delay_seconds}s"; fi
|
||||
|
||||
echo "${delay_days}${delay_hours}${delay_minutes}${delay_seconds}"
|
||||
}
|
||||
|
@ -120,7 +120,7 @@ main() {
|
|||
timeout_command="timeout 9"
|
||||
fi
|
||||
|
||||
check_stdout=$(${timeout_command} "${check_command}")
|
||||
check_stdout=$(${timeout_command} ${check_command})
|
||||
check_rc=$?
|
||||
|
||||
if [ "${is_disabled}" == "True" ] && [ "${check_rc}" -eq 124 ] && [ -z "${check_stdout}" ]; then
|
||||
|
@ -130,11 +130,11 @@ main() {
|
|||
if [ "${is_disabled}" == "True" ]; then
|
||||
delay=$(delay_from_disable_file "${disable_file}")
|
||||
delay_str="$(delay_to_string "${delay}")"
|
||||
echo "ALERTS DISABLED for ${check_name} until ${delay_str}."
|
||||
echo "ALERT DISABLED until ${delay_str} - ${check_stdout}"
|
||||
else
|
||||
echo "${check_stdout}"
|
||||
fi
|
||||
|
||||
echo "${check_stdout}"
|
||||
|
||||
if [ "${is_disabled}" == "True" ]; then
|
||||
if [ ${check_rc} = 0 ]; then
|
||||
exit 0 # Nagios OK
|
||||
|
@ -179,7 +179,6 @@ if [[ "${1}" =~ -.* ]]; then
|
|||
printf 'ERROR: "--name" requires a non-empty option argument.\n' >&2
|
||||
exit 1
|
||||
;;
|
||||
|
||||
--)
|
||||
# End of all options.
|
||||
shift
|
||||
|
@ -210,11 +209,15 @@ fi
|
|||
|
||||
if [ -z "${check_name}" ]; then
|
||||
printf 'ERROR: You must specify a check name, with --names.\n' >&2
|
||||
exit 1
|
||||
exit 2
|
||||
fi
|
||||
if [ -z "${check_command}" ]; then
|
||||
printf 'ERROR: You must specify a command to execute.\n' >&2
|
||||
exit 1
|
||||
exit 2
|
||||
fi
|
||||
if [ -e "${base_dir}" ] && [ ! -x "${base_dir}" ]; then
|
||||
printf "ERROR: %s exists but is no reachable.\n" "${base_dir}"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
readonly check_name
|
||||
|
|
|
@ -20,7 +20,6 @@ GENERAL OPTIONS:
|
|||
|
||||
-h, --help Print this message and exit.
|
||||
-V, --version Print version number and exit.
|
||||
# -v, --verbose Print more informations.
|
||||
|
||||
ACTIONS:
|
||||
|
||||
|
@ -28,40 +27,30 @@ ACTIONS:
|
|||
|
||||
Ask CHECK_NAME status to NRPE as an HTTP request.
|
||||
Indicates which command NRPE has supposedly run (from its configuration).
|
||||
|
||||
Options:
|
||||
|
||||
-b, --bypass-nrpe Execute directly command from NRPE configuration,
|
||||
without requesting to NRPE.
|
||||
-b, --bypass-nrpe Execute directly command from NRPE configuration,
|
||||
without passing the request to NRPE.
|
||||
|
||||
status
|
||||
|
||||
Print :
|
||||
- Wether alerts are enabled or not (silenced).
|
||||
- If alerts are disabled (silenced):
|
||||
- Comment.
|
||||
- Time left before automatic re-enable.
|
||||
Print whether alerts are enabled or not (silenced).
|
||||
If alerts are disabled (silenced), show comment and time left before automatic re-enabling.
|
||||
|
||||
disable [--during DURATION] 'COMMENT'
|
||||
disable CHECK_NAME|all [--during DURATION] --comment 'COMMENT'
|
||||
|
||||
Disable (silence) all alerts (only global for now) for DURATION and write COMMENT into the log.
|
||||
Disable (silence) CHECK_NAME or all alerts for DURATION and write COMMENT into the log.
|
||||
Checks output is still printed, so alerts history won't be lost.
|
||||
|
||||
Options:
|
||||
|
||||
-d, --during DURATION Specify disable duration (default: 1h).
|
||||
|
||||
enable 'COMMENT'
|
||||
enable CHECK_NAME|all --comment 'COMMENT'
|
||||
|
||||
Re-enable all alerts (only global for now)
|
||||
|
||||
COMMENT:
|
||||
|
||||
(mandatory) Comment (string) to be written in log.
|
||||
Comment string to be written in log (mandatory).
|
||||
|
||||
DURATION:
|
||||
|
||||
(optional, default: "1h") Time (string) during which alerts will be disabled (silenced).
|
||||
Time (string) during which alerts will be disabled (optional, default: "1h").
|
||||
|
||||
Format:
|
||||
You can use 'd' (day), 'h' (hour) and 'm' (minute) , or a combination of them, to specify a duration.
|
||||
|
@ -89,7 +78,7 @@ function now {
|
|||
|
||||
function log {
|
||||
# $1: message
|
||||
echo "$(now) - $1" >> "${log_path}"
|
||||
echo "$(now) - monitoringctl: $1" >> "${log_path}"
|
||||
}
|
||||
|
||||
|
||||
|
@ -152,6 +141,10 @@ function get_check_commands {
|
|||
echo "$conf_lines" | grep -E "command\[check_$1\]" | cut -d'=' -f2-
|
||||
}
|
||||
|
||||
# Print the names that are defined in the wrappers of the checks
|
||||
function get_wrappers_names() {
|
||||
grep "alerts_wrapper" -Rs /etc/nagios/ | grep -v -E "^\s*#" | awk '{ for (i=1 ; i<=NF; i++) { if ($i ~ /^(-n|--name)$/) { print $(i+1); break } } }' | tr ',' '\n' | sort | uniq
|
||||
}
|
||||
|
||||
### CHECK ACTION ##########################
|
||||
|
||||
|
@ -164,10 +157,10 @@ function check {
|
|||
exit 1
|
||||
fi
|
||||
|
||||
server_address=$(echo "$conf_lines" | grep "server_address" | cut -d'=' -f2)
|
||||
server_address=$(echo "$conf_lines" | grep "server_address" | tail -n1 | cut -d'=' -f2)
|
||||
if [ -z "${server_address}" ]; then server_address="127.0.0.1"; fi
|
||||
|
||||
server_port=$(echo "$conf_lines" | grep "server_port" | cut -d'=' -f2)
|
||||
server_port=$(echo "$conf_lines" | grep "server_port" | tail -n1 | cut -d'=' -f2)
|
||||
if [ -z "${server_port}" ]; then server_port="5666"; fi
|
||||
|
||||
check_commands=$(get_check_commands "$1")
|
||||
|
@ -220,7 +213,7 @@ function check {
|
|||
function filter_duration {
|
||||
# Format (in brief): XdYhZm
|
||||
# Minutes unit 'm' is not mandatory after Xh
|
||||
time_regex="^([0-9]+[d])?(([0-9]+[h]([0-9]+[m]?)?)|(([0-9]+[m])?)))?$"
|
||||
time_regex="^([0-9]+d)?(([0-9]+h(([0-9]+m?)|([0-9]+m([0-9]+s?)?))?)|(([0-9]+m([0-9]+s?)?)?))?$"
|
||||
|
||||
if [[ "$1" =~ ${time_regex} ]]; then
|
||||
echo "$1"
|
||||
|
@ -243,7 +236,7 @@ function is_nrpe_wrapped {
|
|||
}
|
||||
|
||||
function disable_alerts {
|
||||
# $1: comment
|
||||
# $1: check name, $2: comment
|
||||
|
||||
if ! command -v alerts_switch &> /dev/null; then
|
||||
>&2 echo "Error: script 'alerts_switch' is not installed."
|
||||
|
@ -267,7 +260,7 @@ function disable_alerts {
|
|||
Alerts will be disabled for ${duration}${default_msg}
|
||||
Our monitoring system will continue to gather checks outputs, so alerts history won't be lost.
|
||||
To re-enable alerts before ${duration}, execute (as root or with sudo):
|
||||
monitoringctl enable
|
||||
monitoringctl enable $1 --comment 'YOUR REASON'
|
||||
EOF
|
||||
echo -n "Confirm (y/N)? "
|
||||
read -r answer
|
||||
|
@ -276,41 +269,39 @@ EOF
|
|||
exit 0
|
||||
fi
|
||||
|
||||
log "Action disable requested for ${duration} by user $(logname || echo unknown): '$1'"
|
||||
log "Action disable $1 requested for ${duration} by user $(logname || echo unknown). Comment: '$2'"
|
||||
|
||||
# Log a warning if a check has no wrapper
|
||||
for check in $(get_checks_list); do
|
||||
if [ "$1" == "all" ]; then
|
||||
checks=$(get_checks_list)
|
||||
else
|
||||
checks="$1"
|
||||
fi
|
||||
for check in ${checks}; do
|
||||
command=$(get_check_commands "${check}" | tail -n1)
|
||||
if ! echo "${command}" | grep --quiet --no-messages alerts_wrapper; then
|
||||
log "Warning: check '${check}' has no alerts_wrapper, it will not be disabled."
|
||||
fi
|
||||
done
|
||||
|
||||
#wrapper_names=$(get_check_commands "${check}" | tail -n1 | awk '{match($0, /.*--name\s+([^[:space:]]+)/, arr); print arr[1]}')
|
||||
#for name in $(echo "${wrapper_names=}" | tr ',' '\n'); do
|
||||
# log "Executing 'alerts_switch disable ${name}'"
|
||||
# alerts_switch disable "${name}"
|
||||
#done
|
||||
#done
|
||||
log "Executing 'alerts_switch disable $1 --during \"${duration}\"'"
|
||||
alerts_switch disable "$1" --during "${duration}"
|
||||
|
||||
log "Executing 'alerts_switch disable all --during \"${duration}\"'"
|
||||
alerts_switch disable all --during "${duration}"
|
||||
|
||||
echo "All alerts are now disabled for ${duration}."
|
||||
echo "$1 alerts are now disabled for ${duration}."
|
||||
}
|
||||
|
||||
function enable {
|
||||
# $1: comment
|
||||
# $1: check name, $2: comment
|
||||
|
||||
log "Action enable requested by user $(logname || echo unknown): '${1}'"
|
||||
log "Executing 'alerts_switch enable all'"
|
||||
alerts_switch enable all
|
||||
log "Action enable $1 requested by user $(logname || echo unknown). Comment: '$2'"
|
||||
log "Executing 'alerts_switch enable $1'"
|
||||
alerts_switch enable "$1"
|
||||
|
||||
echo "All alerts are now enabled."
|
||||
echo "$1 alerts are now enabled."
|
||||
}
|
||||
|
||||
|
||||
### status ACTION ##########################
|
||||
### STATUS ACTION ##########################
|
||||
|
||||
# Converts human writable duration into seconds
|
||||
function duration_to_seconds {
|
||||
|
@ -348,28 +339,6 @@ function seconds_to_duration {
|
|||
echo "${delay_days}${delay_hours}${delay_minutes}${delay_seconds}"
|
||||
}
|
||||
|
||||
# Get from NRPE / alerts_wrapper options the maximum duration of disable.
|
||||
# If different values are found for the same disable name, the lowest is keept.
|
||||
function get_max_disable_duration {
|
||||
min_of_max_duration=""
|
||||
min_of_max_sec=""
|
||||
for check in $(get_checks_list); do
|
||||
cmd=$(get_check_commands "${check}" | tail -n1)
|
||||
|
||||
max_duration=$(echo "${cmd}" | awk '{ for (i=1; i<=NF; i++) { if ($i ~ /(-m|--max|--maximum|--limit)[ =]/) print $(i+1) } }')
|
||||
if [ -z "${max_duration}" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
max_sec=$(duration_to_seconds "${max_duration}")
|
||||
if [ -z "${min_of_max_sec}" ] || [ "${max_sec}" -lt "${min_of_max_sec}" ]; then
|
||||
min_of_max_sec="${max_sec}"
|
||||
min_of_max_duration="${max_duration}"
|
||||
fi
|
||||
done
|
||||
echo "${min_of_max_duration:-"1d"}" # 1d is alerts_wrapper default --max
|
||||
}
|
||||
|
||||
function disabled_secs_left {
|
||||
disabled_file="${base_dir}/all_alerts_disabled"
|
||||
if [ ! -e "${disabled_file}" ]; then
|
||||
|
@ -377,13 +346,7 @@ function disabled_secs_left {
|
|||
return
|
||||
fi
|
||||
|
||||
max_disable_duration="$(get_max_disable_duration)"
|
||||
max_disable_secs="$(duration_to_seconds "${max_disable_duration}")"
|
||||
disable_secs="$(grep -v -E "^\s*#" "${disabled_file}" | grep -E "[0-9]+" | head -n1 | awk '{print$1}')"
|
||||
|
||||
if [ "${disable_secs}" -gt "${max_disable_secs}" ]; then
|
||||
disable_secs="${max_disable_secs}"
|
||||
fi
|
||||
disable_date=$(date --date "${disable_secs} seconds ago" +"%s")
|
||||
|
||||
last_change=$(stat -c %Z "${disabled_file}")
|
||||
|
@ -391,7 +354,9 @@ function disabled_secs_left {
|
|||
}
|
||||
|
||||
function alerts_status {
|
||||
local disabled_secs_left=$(disabled_secs_left)
|
||||
echo "Not implemented yet"
|
||||
exit 1
|
||||
disabled_secs_left=$(disabled_secs_left)
|
||||
disabled_duration_left="$(seconds_to_duration "${disabled_secs_left}")"
|
||||
|
||||
if [ -z "${disabled_duration_left}" ]; then
|
||||
|
@ -449,25 +414,46 @@ while :; do
|
|||
usage_error "Option --during: defined multiple times."
|
||||
fi
|
||||
if [ "$#" -gt 1 ]; then
|
||||
duration=$(filter_duration "$2")
|
||||
if ! duration=$(filter_duration "$2"); then
|
||||
exit 1
|
||||
fi
|
||||
default_duration="False"
|
||||
else
|
||||
usage_error "Option --during: missing value."
|
||||
fi
|
||||
shift; shift;;
|
||||
check|enable|disable|status)
|
||||
-c|--comment)
|
||||
if [ "$#" -gt 1 ]; then
|
||||
comment="$2"
|
||||
else
|
||||
usage_error "Option --comment: missing comment string."
|
||||
fi
|
||||
shift; shift;;
|
||||
status)
|
||||
action="$1"
|
||||
shift;;
|
||||
*)
|
||||
if [ "${action}" = "check" ] && [ -n "$1" ]; then
|
||||
if get_checks_list | grep --quiet -E "^$1$"; then
|
||||
check_name=$1
|
||||
shift
|
||||
check|enable|disable)
|
||||
action="$1"
|
||||
if [ "${action}" == "check" ]; then
|
||||
names="$(get_checks_list)"
|
||||
else
|
||||
names="all $(get_wrappers_names)"
|
||||
fi
|
||||
if [ "$#" -gt 1 ]; then
|
||||
if echo "${names}" | grep --quiet -E "^$2$"; then
|
||||
check_name="$2"
|
||||
shift; shift
|
||||
else
|
||||
usage_error "Action check: unknown argument '$1'."
|
||||
usage_error "Action ${action}: unknown check '$2'."
|
||||
fi
|
||||
else
|
||||
# Other arguments are the comment
|
||||
usage_error "Action ${action}: missing check argument."
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if [ -n "$1" ]; then
|
||||
usage_error "Action '${action}': unknown argument '$1'."
|
||||
else
|
||||
break
|
||||
fi
|
||||
;;
|
||||
|
@ -475,53 +461,37 @@ while :; do
|
|||
done
|
||||
|
||||
|
||||
if [ "$#" -gt 0 ]; then
|
||||
usage_error "Too many arguments."
|
||||
fi
|
||||
|
||||
if [ -z "${action}" ]; then
|
||||
usage_error "Missing or invalid ACTION argument."
|
||||
fi
|
||||
|
||||
if [ "${action}" = "check" ]; then
|
||||
if [ "$#" -gt 0 ]; then
|
||||
usage_error "Action check: too many arguments."
|
||||
fi
|
||||
if [ "${default_duration}" = "False" ]; then
|
||||
usage_error "Action check: there is no --during option."
|
||||
if [[ "${action}" =~ ((en|dis)able) ]]; then
|
||||
if [ -z "${comment}" ]; then
|
||||
usage_error "Action ${action}: missing --comment argument."
|
||||
fi
|
||||
fi
|
||||
|
||||
check "$check_name"
|
||||
if [ ! "${action}" == "disable" ]; then
|
||||
if [ "${default_duration}" = "False" ]; then
|
||||
usage_error "Action ${action}: there is no --during option."
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "${action}" = "check" ]; then
|
||||
check "${check_name}"
|
||||
|
||||
elif [ "${action}" = "enable" ]; then
|
||||
if [ "$#" = 0 ]; then
|
||||
usage_error "Action enable: missing COMMENT argument."
|
||||
fi
|
||||
if [ "$#" -gt 1 ]; then
|
||||
usage_error "Action enable: too many arguments."
|
||||
fi
|
||||
if [ "${default_duration}" = "False" ]; then
|
||||
usage_error "Action enable: there is no --during option."
|
||||
fi
|
||||
|
||||
comment="$1"
|
||||
enable "${comment}"
|
||||
enable "${check_name}" "${comment}"
|
||||
|
||||
elif [ "${action}" = "disable" ]; then
|
||||
if [ "$#" = 0 ]; then
|
||||
usage_error "Action disable: missing COMMENT argument."
|
||||
fi
|
||||
if [ "$#" -gt 1 ]; then
|
||||
usage_error "Action disable: too many arguments."
|
||||
fi
|
||||
|
||||
is_nrpe_wrapped
|
||||
|
||||
comment="$1"
|
||||
disable_alerts "${comment}"
|
||||
disable_alerts "${check_name}" "${comment}"
|
||||
|
||||
elif [ "${action}" = "status" ]; then
|
||||
if [ "$#" -gt 0 ]; then
|
||||
usage_error "Action status: too many arguments."
|
||||
fi
|
||||
|
||||
alerts_status
|
||||
fi
|
||||
|
||||
|
|
92
nagios-nrpe/files/monitoringctl_completion
Executable file → Normal file
92
nagios-nrpe/files/monitoringctl_completion
Executable file → Normal file
|
@ -1,25 +1,81 @@
|
|||
#!/usr/bin/env bash
|
||||
#!/usr/bin/bash
|
||||
#
|
||||
|
||||
# List of available checks
|
||||
_monitoringctl_completion() {
|
||||
local cur=${COMP_WORDS[COMP_CWORD]};
|
||||
|
||||
if [ "${#COMP_WORDS[@]}" == "1" ]; then
|
||||
COMPREPLY=($(compgen -W "check status enable disable" "${cur}"))
|
||||
elif [ "${COMP_WORDS[@]}" =~ (check|enable|disable) ]; then
|
||||
|
||||
fi
|
||||
|
||||
COMPREPLY=( $( compgen -W '$(grep "\[check_" -Rs /etc/nagios/ | grep -vE "^[[:blank:]]*#" | awk -F"[\\\[\\\]=]" "{print \$2}" | sed "s/check_//" | sort | uniq)' -- "${cur}" ) );
|
||||
_get_wrappers_names() {
|
||||
grep "alerts_wrapper" -Rs /etc/nagios/ | grep -v -E "^\s*#" | awk '{ for (i=1 ; i<=NF; i++) { if ($i ~ /^(-n|--name)$/) { print $(i+1); break } } }' | tr ',' '\n' | sort | uniq
|
||||
}
|
||||
|
||||
# List of available checks
|
||||
_disable_names_list_completion() {
|
||||
_monitoringctl_completion() {
|
||||
local cur=${COMP_WORDS[COMP_CWORD]};
|
||||
command="echo \"all\"; echo \$(grep \"alerts_wrapper\" -Rs /etc/nagios/ | awk '!/^\s*#/ { for (i=1; i<=NF; i++) if (\$i ~ /--name[s]?/) { sub(\",\", \"\n\", \$(i+1)); print \$(i+1) } }' | sort | uniq)"
|
||||
COMPREPLY=( $( compgen -W '$($command)' -- "$cur" ) );
|
||||
local prev=${COMP_WORDS[COMP_CWORD-1]};
|
||||
|
||||
complete -F _monitoringctl_completion monitoringctl
|
||||
#complete -F _disable_names_list_completion alerts_switch
|
||||
local action=""
|
||||
for w in "${COMP_WORDS[@]}"; do
|
||||
case "$w" in
|
||||
status|check|enable|disable)
|
||||
action="${w}"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
local words="--help"
|
||||
case "${action}" in
|
||||
status)
|
||||
words="${words}"
|
||||
;;
|
||||
check)
|
||||
local checks="$(_get_wrappers_names)"
|
||||
local check=""
|
||||
for w in "${COMP_WORDS[@]}"; do
|
||||
for c in ${checks}; do
|
||||
if [ "${c}" == "${w}" ]; then
|
||||
check="${w}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
done
|
||||
if [ -z "${check}" ]; then
|
||||
words="--bypass-nrpe ${checks} ${words}"
|
||||
else
|
||||
words="--bypass-nrpe ${words}"
|
||||
fi
|
||||
;;
|
||||
enable)
|
||||
if [ "${prev}" == "enable" ]; then
|
||||
words="all $(_get_wrappers_names)"
|
||||
else
|
||||
words="--comment ${words}"
|
||||
fi
|
||||
;;
|
||||
disable)
|
||||
if [ "${prev}" == "disable" ]; then
|
||||
words="all $(_get_wrappers_names)"
|
||||
elif [ "${prev}" == "-d" ] || [ "${prev}" == "--during" ]; then
|
||||
words="1d 1d12h 1h 1h30m 1m 1m30s 30s"
|
||||
else
|
||||
words="--during --comment ${words}"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
words="status check enable disable ${words}"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Avoid double
|
||||
opts=();
|
||||
for i in ${words}; do
|
||||
for j in "${COMP_WORDS[@]}"; do
|
||||
if [[ "$i" == "$j" ]]; then
|
||||
continue 2
|
||||
fi
|
||||
done
|
||||
opts+=("$i")
|
||||
done
|
||||
|
||||
COMPREPLY=($(compgen -W "${opts[*]}" -- "${cur}"))
|
||||
return 0
|
||||
|
||||
}
|
||||
|
||||
complete -F _monitoringctl_completion monitoringctl.sh
|
||||
|
||||
|
|
|
@ -1,95 +0,0 @@
|
|||
#!/usr/bin/bash
|
||||
#
|
||||
_monitoringctl_completion() {
|
||||
local cur=${COMP_WORDS[COMP_CWORD]};
|
||||
local prev=${COMP_WORDS[COMP_CWORD-1]};
|
||||
|
||||
local action=""
|
||||
for w in "${COMP_WORDS[@]}"; do
|
||||
if [[ "${w}" =~ (status|check|enable|disable) ]]; then
|
||||
action="${w}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
local words="--help --verbose"
|
||||
case "${action}" in
|
||||
status)
|
||||
words="${words}"
|
||||
;;
|
||||
check)
|
||||
local checks="load disk1 https ssl"
|
||||
local check=""
|
||||
for w in "${COMP_WORDS[@]}"; do
|
||||
for c in ${checks}; do
|
||||
if [ "${c}" == "${w}" ]; then
|
||||
check="${w}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
done
|
||||
if [ -z "${check}" ]; then
|
||||
words="--bypass-nrpe ${checks} ${words}"
|
||||
else
|
||||
words="--bypass-nrpe ${words}"
|
||||
fi
|
||||
;;
|
||||
enable)
|
||||
words="${words}"
|
||||
;;
|
||||
disable)
|
||||
if [[ "${prev}" =~ (-d|--during) ]]; then
|
||||
local last_char="${cur: -1}"
|
||||
if [ -z "${cur}" ]; then
|
||||
COMPREPLY=("1d" "1d12h" "1h" "1h30m" "1m" "1m30s" "30s")
|
||||
else
|
||||
if [[ "${last_char}" == "s" ]]; then
|
||||
COMPREPLY=()
|
||||
elif [[ "${last_char}" == "m" ]]; then
|
||||
COMPREPLY=("${cur}30s")
|
||||
elif [[ "${last_char}" == "h" ]]; then
|
||||
COMPREPLY=("${cur}15m" "${cur}30m" "${cur}45m")
|
||||
elif [[ "${last_char}" == "d" ]]; then
|
||||
COMPREPLY=("${cur}6h" "${cur}12h" "${cur}18h")
|
||||
elif [[ "${last_char}" =~ [0-9] ]]; then
|
||||
if [[ "${cur}" =~ s ]]; then
|
||||
COMPREPLY=()
|
||||
elif [[ "${cur}" =~ m ]]; then
|
||||
COMPREPLY=("${cur}s")
|
||||
elif [[ "${cur}" =~ h ]]; then
|
||||
COMPREPLY=("${cur}m")
|
||||
elif [[ "${cur}" =~ d ]]; then
|
||||
COMPREPLY=("${cur}h")
|
||||
else
|
||||
COMPREPLY=("${cur}d" "${cur}h" "${cur}m" "${cur}s")
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
return 0
|
||||
else
|
||||
words="--during ${words}"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
words="status check enable disable ${words}"
|
||||
;;
|
||||
esac
|
||||
|
||||
opts=();
|
||||
for i in ${words}; do
|
||||
for j in "${COMP_WORDS[@]}"; do
|
||||
if [[ "$i" == "$j" ]]; then
|
||||
continue 2
|
||||
fi
|
||||
done
|
||||
opts+=("$i")
|
||||
done
|
||||
|
||||
COMPREPLY=($(compgen -W "${opts[*]}" -- "${cur}"))
|
||||
return 0
|
||||
|
||||
}
|
||||
|
||||
complete -F _monitoringctl_completion ttt
|
||||
|
Loading…
Reference in a new issue