diff options
Diffstat (limited to 'nfc')
-rwxr-xr-x | nfc | 77 |
1 files changed, 77 insertions, 0 deletions
@@ -0,0 +1,77 @@ +#!/usr/bin/env bash + +# +# nagios-force-check(1) -- Force an immediate check of a nominated host or +# service. +# +# $ nac <host>[/<service>] +# +# Author: Tom Ryder <tom@sanctum.geek.nz> +# Copyright: 2014 Sanctum +# + +# Name self +self=nagios-force-check + +# Usage printing function +usage() { + printf 'USAGE: %s [-n] <host[/service]>\n' "$self" +} + +# Handle options, just -h help at the moment +OPTIND=1 +while getopts 'h' opt ; do + case "$opt" in + h) + usage + exit 0 + ;; + '?') + usage >&2 + exit 1 + ;; + esac +done +shift "$((OPTIND-1))" + +# Bail if no arguments left; we need at least the host/service name +if ! (($#)) ; then + usage >&2 + exit 1 +fi + +# Define relatively fixed/guaranteed fields for Nagios command; note that the +# comment has a default of 'no comment given' +now=$(date +%s) +spec=$1 +cmdfile=${NAGCMD_FILE:-/usr/local/nagios/var/rw/nagios.cmd} + +# If a service name is specified after a slash, figure that out +if [[ $spec == */* ]] ; then + host=${spec%/*} + service=${spec##*/} +else + host=$spec + service= +fi + +# Write command and print message if it fails; succeed silently +declare -a cmds +if [[ $service ]] ; then + cmds=("${cmds[@]}" "$(printf '[%lu] SCHEDULE_FORCED_SVC_CHECK;%s;%s;%lu' \ + "$now" "$host" "$service" "$now")") +else + cmds=("${cmds[@]}" "$(printf '[%lu] SCHEDULE_FORCED_HOST_CHECK;%s;%lu' \ + "$now" "$host" "$now")") + cmds=("${cmds[@]}" "$(printf '[%lu] SCHEDULE_HOST_SVC_CHECKS;%s;%lu' \ + "$now" "$host" "$now")") +fi + +# Attempt to write command to file +for cmd in "${cmds[@]}" ; do + if ! printf '%s\n' "$cmd" >> "$cmdfile" ; then + printf '%s: Failed to write command to file\n' "$self" >&2 + exit 1 + fi +done + |