contchk.sh (submission)

Charles Jones jonescr at cisco.com
Wed Jan 30 19:22:05 CET 2008


The past week I've been trying to share any of the hobbit ext scripts 
that I wrote.  Here's another, contchk.sh. I initially created it 
because Hobbits content check does not follow "302 Redirect" response 
codes, and I also had a need to check a URL which was expecting a 
certain referrer.  I remembered I was using this script when I saw Gary 
Baluha's urlplus.pl.

Incidentally, I cannot use urlplus, as it makes use of bbhostgrep, which 
I discovered fails if your bb-host entries are too long.

contchk.sh is a fairly short bash script which makes use of curl. You 
can optionally specify a referrer to spoof. For most folks, Garys script 
is probably best to use, as it has more enhanced error messages and 
such. If anything, it's interesting to see different ways multiple 
people tackle a problem :)

Note: besides the script itself (which should reside in $BBHOME/ext), 
you will need to add this to your $BBHOME/etc/hobbitlaunch.cfg:
[contchk]
        ENVFILE /home/monitor/server/etc/hobbitserver.cfg
        NEEDS hobbitd
        CMD $BBHOME/ext/contchk.sh
        LOGFILE $BBSERVERLOGS/contchk.log
        INTERVAL 5m

-Charles

#!/bin/bash
# contchk.sh written by Charles Jones (blazer0x at gmail.com) 6/6/2007
# This script is designed to perform a content check on a URL and report the
# status to a Hobbit server.
#
# This script was created because Hobbits built-in content check 
functionality
# does not follow 302 redirects.
#
# The script parses out a "contchk" tag in the bb-hosts file. The proper
# syntax is: contchk;URL;REFERRER;CHECKSTRING
#
# Note that CHECKSTRING cannot contain spaces so you must use regular
# expression metacharacters, so use something like string.with.spaces
BBHTAG=contchk     # Name of the tag in bb-hosts
COLUMN=cont        # Column display name in Hobbit
CURL=/usr/bin/curl # Location of curl binary
CURLOPTS="--connect-timeout 30 -m 30 -s -L -b cookiejar" # Curl options
# Note: using grep because bbhostgrep fails on long lines
grep $BBHTAG $BBHOME/etc/bb-hosts | while read L
   do
      set $L    # To get one line of output from bbhostgrep
      HOSTIP="$1"
      MACHINEDOTS="$2"
      MACHINE=`echo $2 | $SED -e's/\./,/g'`
      CHECKURL=`echo $4 | awk -F";" '{print $2}'`    # Parse out the 
check URL
      REFERRER=`echo $4 | awk -F";" '{print $3}'`    # Parse out the 
referrer string
      if [ "" != "$REFERRER" ];
         then
           REFERRER="-e $REFERRER"
      fi
      CHECKSTRING=`echo $4 | awk -F";" '{print $4}'` # Parse out the 
check string
      $CURL $CURLOPTS $REFERRER $CHECKURL |grep -q "$CHECKSTRING"
      status=$? # Save greps return status
      if [ 0 -eq $status ]; then # grep returns 0 if it found something
        COLOR=green
        MSG="String <b>\"$CHECKSTRING\"</b> was found in <a 
href=$CHECKURL>$CHECKURL</a>"
        $BB $BBDISP "status $MACHINE.$COLUMN $COLOR `date` Content Check OK
        ${MSG}
        "
      else # grep didn't find anything
        COLOR=red
        MSG="String <b>\"$CHECKSTRING\"</b> was NOT FOUND in <a 
href=$CHECKURL>$CHECKURL</a>"
        $BB $BBDISP "status $MACHINE.$COLUMN $COLOR `date` Content Check 
FAILED
        ${MSG}
        "
      fi
   done
exit 0




More information about the Xymon mailing list