diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2014-11-26 17:56:23 +1300 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2014-11-26 17:56:23 +1300 |
commit | 2dd6caaa9b9b40b6f7ce690753d669ff918b1981 (patch) | |
tree | ec3f58b9681c227e420affb2e8950344ad535d10 /nscaw | |
download | nscaw-2dd6caaa9b9b40b6f7ce690753d669ff918b1981.tar.gz nscaw-2dd6caaa9b9b40b6f7ce690753d669ff918b1981.zip |
First commit of project
Diffstat (limited to 'nscaw')
-rwxr-xr-x | nscaw | 79 |
1 files changed, 79 insertions, 0 deletions
@@ -0,0 +1,79 @@ +#!/usr/bin/env bash + +# +# Command wrapper that sends an appropriate passive check to an NSCA server +# using send_nsca, depending on the command's outcome. +# +# Make sure send_nsca is in $PATH and that NSCAW_SERVER is set. +# +# $ nscaw IMPORTANT_JOB -- important-job -o options args ... +# +# Author: Tom Ryder <tom@sanctum.geek.nz> +# License: MIT +# + +# Name ourself +self=nscaw + +# If there's a defaults file with environment variables for us, source it +if [[ -r /etc/default/"$self" ]] ; then + source /etc/default/"$self" +fi + +# Define a function to explain how to use this script +usage() { + printf 'Usage: %s SERVICE -- COMMAND...\n' \ + "$self" +} + +# Respond to requests for help with usage (exit success) +case $1 in + -h|--help) + usage + exit 0 + ;; +esac + +# Check that at least three arguments are present and in the correct form +if (( $# < 3 )) || [[ $2 != -- ]] ; then + usage >&2 + exit 1 +fi + +# Pull the service from the first argument and shift the first two arguments +# off the arguments array; the rest of the array should be the command to run +service=$1 +shift 2 + +# Figure out our hostname; most of the time `hostname -s` will be fine, but +# it can be overridden with the value of NSCAW_HOSTNAME if defined +hostname=${NSCAW_HOSTNAME:-$(hostname -s)} + +# Attempt to run command +"$@" + +# Decide return code and message based on command exit value +case $? in + 0) + code=0 # OK + message=$(printf '%s: Command "%s" ran successfully' \ + "$self" "$*") + ;; + 127) + code=3 # UNKNOWN + message=$(printf '%s: Command "%s" could not be found' \ + "$self" "$*") + ;; + *) + code=2 # CRITICAL + message=$(printf '%s: Command "%s" ran with errors' \ + "$self" "$*") + ;; +esac + +# Format the passive check and pipe it into send_nsca; note that we ignore the +# stdout of send_nsca as it's just a diagnostic message +printf '%s\t%s\t%u\t%s\n' \ + "$hostname" "$service" "$code" "$message" | + send_nsca -H "${NSCAW_SERVER:?}" >/dev/null + |