aboutsummaryrefslogtreecommitdiff
path: root/nfc
diff options
context:
space:
mode:
Diffstat (limited to 'nfc')
-rwxr-xr-xnfc77
1 files changed, 77 insertions, 0 deletions
diff --git a/nfc b/nfc
new file mode 100755
index 0000000..99d9534
--- /dev/null
+++ b/nfc
@@ -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
+