aboutsummaryrefslogtreecommitdiff
path: root/nagios-exists
diff options
context:
space:
mode:
Diffstat (limited to 'nagios-exists')
-rwxr-xr-xnagios-exists79
1 files changed, 79 insertions, 0 deletions
diff --git a/nagios-exists b/nagios-exists
new file mode 100755
index 0000000..c9e6114
--- /dev/null
+++ b/nagios-exists
@@ -0,0 +1,79 @@
+#!/usr/bin/env bash
+
+#
+# nagios-exists(1) -- Return an exit status corresponding to whether HOST or
+# HOST/SERVICE exists in Nagios. Mostly for use in scripts.
+#
+# $ nex abc-example-mc-1
+# $ nex webhost/HTTP
+#
+# Author: Tom Ryder <tom@sanctum.geek.nz>
+# Copyright: 2016
+#
+
+# Name self
+self=nagios-exists
+
+# Usage printing function
+usage() {
+ printf 'USAGE: %s 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))"
+
+# We need exactly one argument remaining
+if (($# != 1)) ; then
+ usage >&2
+ exit 1
+fi
+
+# Define the path to the Livestatus socket
+socket=${MK_LIVESTATUS_SOCKET:-/usr/local/nagios/var/rw/live}
+
+# Which query to run depends on what the argument looks like.
+case $1 in
+
+ # If there's a slash in the argument, it's a host/service tuplet.
+ */*)
+ host_name=${1%/*}
+ service_description=${1#*/}
+ while read -r _ ; do
+ exit
+ done < <(unixcat "$socket" <<EOF
+GET services
+Columns: host_name service_description
+Filter: host_name = $host_name
+Filter: service_description = $service_description
+EOF
+ )
+ exit 1
+ ;;
+
+ # Otherwise, assume it's a host.
+ *)
+ host_name=$1
+ while read -r _ ; do
+ exit
+ done < <(unixcat "$socket" <<EOF
+GET hosts
+Columns: host_name
+Filter: host_name = $host_name
+EOF
+ )
+ exit 1
+ ;;
+esac