#!/bin/bash # Sat Apr 16 09:39:35 EDT 2016 # Description : Check the uptime of the cable modem # Version : 1.0 # Author : Vince Herried # License : GPLv3 # Commands CMD_GREP="/bin/grep" CMD_AWK="/usr/bin/awk" CMD_EXPR="/usr/bin/expr" CMD_WGET="/usr/bin/wget" SCRIPTNAME=$(basename $0) # Version VERSION="1.0" # Plugin return codes STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 # Default options HOSTNAME="192.168.100.1" WARNING=0 CRITICAL=0 STATUS="Cable Modem Status" OPERATIONAL="Operational" print_version() { echo $SCRIPTNAME version $VERSION echo "" echo "The nagios plugins come with ABSOLUTELY NO WARRANTY." echo "You may redistribute copies of the plugins under the terms of the GNU General Public License v3." } # Option processing print_usage() { echo "Usage: ./check_cableModem -H 192.168.100.1 -w 4 -c 1" echo " $SCRIPTNAME -H ADDRESS" echo " $SCRIPTNAME -w INTEGER" echo " $SCRIPTNAME -c INTEGER" echo " $SCRIPTNAME -h" echo " $SCRIPTNAME -V" } print_help() { print_version echo "" print_usage echo "" echo "Check the days of uptime on a Surfboard cable modem" echo "" echo "-H ADDRESS" echo " Name or IP address of cable modem (default: 192.168.100.1)" echo "-w INTEGER" echo " Warning level for number of days up (default: 0)" echo "-c INTEGER" echo " Critical level for number of days up (default: 0)" echo "-h" echo " Print this help screen" echo "-V" echo " Print version and license information" echo "" echo "" } while getopts H:w:c:hV OPT do case $OPT in H) HOSTNAME="$OPTARG" ;; w) WARNING=$OPTARG ;; c) CRITICAL=$OPTARG ;; h) print_help exit $STATE_UNKNOWN ;; V) print_version exit $STATE_UNKNOWN ;; esac done # Plugin processing # does this look like the modem? $CMD_WGET --output-document=- http://$HOSTNAME/indexData.htm 2>/dev/null | $CMD_GREP "$STATUS" >/dev/null RC=$? if [ $RC -ne 0 ] ; then echo "This doesn't appear to be a valid cable modem page" echo "The first page of the web interface does not include the character string $STATUS" print_help exit $STATE_UNKNOWN fi # is the modem operational ? $CMD_WGET --output-document=- http://$HOSTNAME/indexData.htm 2>/dev/null | $CMD_GREP "$OPERATIONAL" >/dev/null RC=$? if [ $RC -ne 0 ] ; then echo "The cable modem is not operational" exit $STATE_CRITICAL fi #get number of days uptime DAYS=`$CMD_WGET --output-document=- http://$HOSTNAME/indexData.htm 2>/dev/null | $CMD_GREP days | $CMD_AWK '{ print $1 }' | $CMD_AWK -F ">" '{print $NF}'` if [ $WARNING != 0 ] || [ $CRITICAL != 0 ]; then if [ $DAYS -lt $CRITICAL ] && [ $CRITICAL != 0 ]; then STATE=$STATE_CRITICAL elif [ $DAYS -lt $WARNING ] && [ $WARNING != 0 ]; then STATE=$STATE_WARNING else STATE=$STATE_OK fi else STATE=$STATE_OK fi DESCRIPTION="Cable modem uptime is $DAYS days" echo $DESCRIPTION exit $STATE