Annotation of badi/public_scripts/canardien/canardien, revision 1.1.1.1

1.1       adi         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>