Annotation of badi/public_scripts/canardien/canardien, revision 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>