Skip to content

Instantly share code, notes, and snippets.

@rmueck
Forked from keijodputt/check_shoutcast_v2
Created October 5, 2018 13:51
Show Gist options
  • Save rmueck/acfe40fdd4873cef34abd9db36100d58 to your computer and use it in GitHub Desktop.
Save rmueck/acfe40fdd4873cef34abd9db36100d58 to your computer and use it in GitHub Desktop.
Simple Nagios plugin to check on a SHOUTCast V2 server -- Based on 'Check SHOUTcast Server' by ChrisWi/Juliano Jeziorny
#!/bin/sh
# Nagios shoutcast plug-in
# By Juliano Jeziorny (djkadu@gmail.com)
# Rev 0.1
# 23/11/2010
# *********************************************************
# Modified and adapted for Shoutcast 2 to parse xml stats
# and detect unconnected source
# Rev 0.2 by Keijo D. Putt
# 07-Dec-2017
WARN=128 # default Warning threshold if none is specified
ALER=96 # default Alert threshold if none is specified
SOUR=1 # Enable source reporting if none is specified
CURL=`which curl` # you can also specify the full path to curl
[[ -z $CURL ]] && exit 3 # if curl is not present exit with unknown error
XML2=`which xml2` # We need XML2 to parse the stats output
[[ -z $XML2 ]] && exit 3 # Exit with unknown if we can't find xml2
while getopts ":H:p:w:a:s" OPT; do # check supplied arguments
case $OPT in
H ) HOST=$OPTARG;;
p ) PORT=$OPTARG;;
w ) WARN=$OPTARG;;
a ) ALER=$OPTARG;;
s ) SOUR=$OPTARG;;
esac
done
if [[ -n $HOST && -n $PORT ]] # test if minimum required arguments are present
then
STR=`$CURL http://$HOST:$PORT/stats -A Mozilla/4.0 -s -m 5` # access stats on the specified host:port
case $? in
0 ) ;;
6 ) echo "Invalid Host"; exit 1;;
7 ) echo "SHOUTCAST ALERT - Failed to connect to host on port $PORT"; exit 2;;
* ) echo "SHOUTCAST UNKNOWN - Unknown error"; exit 3;;
esac
STA=`echo $STR | $XML2 | grep /SHOUTCASTSERVER/STREAMSTATUS= | sed 's/.*=//'` # source connected
if [[ "$STA" -ne 1 ]] && [[ "$SOUR" -eq 1 ]]
then
echo "SHOUTCast CRITICAL - No source connected on port $PORT" ; exit 2 # When source reporting is enabled (1) check will trip if there is no source connected
fi
CUR=`echo $STR | $XML2 | grep /SHOUTCASTSERVER/CURRENTLISTENERS= | sed 's/.*=//'` # current listenens
MAX=`echo $STR | $XML2 | grep /SHOUTCASTSERVER/MAXLISTENERS= | sed 's/.*=//'` # max listeners
TOP=`echo $STR | $XML2 | grep /SHOUTCASTSERVER/PEAKLISTENERS= | sed 's/.*=//'` # listeners peak
LEVEL="OK" && EXIT=0 # if we got to this point with no error assume level is OK
[[ "$CUR" -ge "$WARN" ]] && LEVEL="WARNING" && EXIT=1 # current listeners higher than warning threshold?
[[ "$CUR" -ge "$ALER"-1 ]] && LEVEL="ALERT" && EXIT=2 # listeners count higher than alarm threshold?
echo "SHOUTCast $LEVEL - $CUR out of $MAX listeners (peak: $TOP) on $HOST:$PORT"
exit $EXIT
fi
echo "Usage:
check_shoutcast -H <ip address> -p <port>
[-w warning level (default 96 listeners)] [-a alert level (default 128 listeners)]"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment