File:  [Local Repository] / badi / public_scripts / canardien / canardien
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Dec 1 04:36:47 2009 UTC (14 years, 6 months ago) by adi
Branches: information_kinematics
CVS tags: badi
Various bash scripts.

    1: #!/bin/bash
    2: 
    3: # canardien 0.0.2
    4: # (c) 2005 under GPL by Adrian Zaugg
    5: 
    6: # canardiens pings ente.limmat.ch to determine wether she is gone diving.
    7: 
    8: # ToDo: multi host, multi eMail
    9: 
   10: ## Settings
   11: #
   12: 
   13: # Host to ping. It's ente.limmat.ch
   14: HOST="ente.limmat.ch"
   15: 
   16: # eMail Alerts
   17: # Send alert email messages to the following address(es). Leave empty
   18: # for no alert. For multiple destinations use a comma separated list.
   19: ALERT_TO=""
   20: 
   21: # Subject of alert email
   22: ALERT_SUBJECT="Achtung: $HOST antwortet nicht mehr!"
   23: 
   24: # Text of Message (But in 'single quotes' to protect variables. They should get
   25: # expanded at the time the message is sent!)
   26: ALERT_TEXT='"\n[$TIME_STAMP]\n\nALERT!!\n\n\t$HOST is down!\n\nYou should probably do something, please.\nKind regards, $PINGHOST."'
   27: 
   28: # path to fping
   29: PING=`which fping`
   30: 
   31: # answer of fping to reachable hosts
   32: ALIVE_ANSWER="is alive"
   33: 
   34: # Temporary file path
   35: TMPDIR="/tmp"
   36: 
   37: # This hosts name
   38: PINGHOST=`uname -n`
   39: 
   40: # set to an empty string to avoid debug output,
   41: # to "low" for a few, output and to anything else
   42: # for verbose output
   43: DEBUG=loud
   44: 
   45: # for silent (non-error) operation set to anything,
   46: # comment out to enable text output
   47: # (migration to use shout is in progress)
   48: SILENT=shshsh
   49: 
   50: 
   51: # -----------functions-----------
   52: 
   53: # If ente.limmat.ch responds to pings, she is considered up.
   54: function checkconnection {
   55:    unset UP
   56: 	if [ ${#PING} -eq 0 ]; then
   57: 		echo "Error: fping external program not in path. Exitting."
   58: 		exit 1
   59: 	fi
   60:    
   61:    PING_ANSWER="$($PING "$HOST")"
   62:    PING_ERRNUM=$?
   63:    if [ $PING_ERRNUM -gt 2 ]; then
   64:    		echo "Error $PING_ERRNUM in fping $(head -1 "$PING_ANSWER") . Exitting."
   65:    		exit 1
   66:    fi
   67:    
   68:    if [ `echo "$PING_ANSWER" | grep -c "$ALIVE_ANSWER"` -gt 0 ]; then
   69:       UP=true
   70:    fi
   71:    TIME_STAMP=`date +"%a %e.%m.%y %H:%M:%S"`
   72:    if [ -n "$UP" ]; then
   73:       if [ ! "$DEBUG" = "low" ] && [ -n "$DEBUG"  ]; then
   74:          shout "The connection is up."
   75:       fi
   76:    else 
   77:       if [ -n "$DEBUG" ]; then
   78:          shout "The connection is down."
   79:       fi
   80:    fi
   81: }
   82: 
   83: # Rember recent state of ente.limmat.ch, trigger alert
   84: function rememberstate {
   85:    # Put a simple time stamp in a tmp file, when host gets down
   86:    if [ -z "$UP" ]; then
   87: 		if [ ! -e "$TMPDIR/.canardien-$PINGHOST-$HOST" ]; then 
   88:       		# set time stamp
   89:       		echo -ne "$TIME_STAMP" > "$TMPDIR/.canardien-$PINGHOST-$HOST"
   90:       		# send alert
   91:       		sendalert
   92:       	elif [ -n "$DEBUG" ]; then
   93:          	shout "Down since `cat $TMPDIR/.canardien-$PINGHOST-$HOST`."
   94:       	fi
   95:    else 
   96:      # Host is up
   97:       if [ -e "$TMPDIR/.canardien-$PINGHOST-$HOST" ]; then
   98:          if [ -n "$DEBUG" ]; then
   99:             shout "$HOST is up again."
  100:          fi
  101: 		  # send alert
  102:           ALERT_SUBJECT="$HOST antwortet wieder!"
  103:           ALERT_TEXT='"[$(date +"%a %e.%m.%y %H:%M:%S")]\n\n\n$HOST is up again.\n--------------------------------------\n(downtime began $(cat "$TMPDIR/.canardien-$PINGHOST-$HOST"))\n\n\n      Kind regards, $PINGHOST."'
  104:           sendalert
  105:          # delete tmp file
  106:          rm "$TMPDIR/.canardien-$PINGHOST-$HOST"
  107:       else 
  108:          # still running
  109:          if [ ! "$DEBUG" = "low" ] && [ -n "$DEBUG"  ]; then
  110:             shout "$HOST is still up."
  111:          fi
  112:       fi
  113:    fi
  114: }
  115: 
  116: # Send an email alert
  117: function sendalert {
  118:    # send mail
  119: 	if [ ! -z "$ALERT_TO" ]; then
  120:    		eval MSG=\$$ALERT_TEXT
  121:    		echo -e -n "$MSG" | mail -s "$ALERT_SUBJECT" "$ALERT_TO"
  122:    		if [ -n "$DEBUG" ]; then
  123:     		shout "Alert sent to $ALERT_TO."
  124:    		fi
  125: 	fi
  126: }
  127: 
  128: # To avoid any output in case of a silent operation,
  129: # shout instead of echo.
  130: function shout()
  131: {
  132:    if [ -z "$SILENT" ]; then
  133:       echo -e "$1"
  134:    fi
  135: }
  136: 
  137: 
  138: # -----------main-----------
  139: 
  140: checkconnection
  141: rememberstate
  142: exit 0
  143: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>