head 1.8; access; symbols; locks alexis:1.8; strict; comment @# @; 1.8 date 98.08.07.11.36.41; author alexis; state Exp; branches; next 1.7; 1.7 date 98.03.01.22.28.56; author alexis; state Exp; branches; next 1.6; 1.6 date 97.10.26.12.12.35; author alexis; state Exp; branches; next 1.5; 1.5 date 97.10.20.17.53.40; author alexis; state Exp; branches; next 1.4; 1.4 date 97.02.15.11.32.26; author alexis; state Exp; branches; next 1.3; 1.3 date 97.01.31.14.43.34; author alexis; state Exp; branches; next 1.2; 1.2 date 97.01.31.10.22.48; author alexis; state Exp; branches; next 1.1; 1.1 date 97.01.22.10.34.47; author alexis; state Exp; branches; next ; desc @@ 1.8 log @milepost - seems to work @ text @#!SCRIPTSHELLCMD_MARKER PATH=/bin:/usr/bin PROGNAME=`basename $0` ############################################################################### # # # LINK QUALITY TESTER # # # ############################################################################### ############################################################################### # # Things you should know about this script: # # It is stored under RCS! Keep it that way! If you want a history of # changes made to this script then refer to rlog(1) - don't look here! # ############################################################################### ############################################################################### # # CONFIGURABLE STUFF STARTS HERE # ############################################################################### COUNT=5 ############################################################################### # # CONFIGURABLE STUFF ENDS HERE # ############################################################################### VERSION="PATCHLEVEL_MARKER" # $Id: sndmail-sendmail.in,v 1.5 1998/02/05 12:27:22 alexis Exp $ SNDMSG=LCLSBINDIR_MARKER/sndmsg ############################################################################### # # MAIN FUNCTION (called from very bottom of script) # ############################################################################### main() { ########################################################################### # # PROCESS OPTIONS # ########################################################################### while [ "X$1" != X ]; do case "$1" in -V) if expr "$VERSION" : 'P.*R$' > /dev/null; then warning "this is a development version; use 'ident' for version information" exit 1 else echo "$PROGNAME version $VERSION" exit 0 fi ;; -d) [ "X$2" = X ] && usage VERBOSE_LEVEL=$2 shift ;; -v) VERBOSE_LEVEL=3 ;; -c) [ "X$2" = X ] && usage COUNT=$2 shift ;; -*) usage ;; *) break ;; esac shift done # One argument required - the host to use for the check [ "X$1" = X -o "X$2" != X ] && usage # Are locks required? No. This script should run very quickly. ########################################################################### # # CHECK QUALITY # ########################################################################### info "running, host=$1, count=$COUNT" QUALITY=`ping -c $COUNT -i 1 -n -q $1 2>/dev/null | sed -n -e 's/^.*ed, \([0-9].*\)% pack.*$/\1/p' | xargs expr 100 -` info "quality is ${QUALITY}%" $SNDMSG 40 $QUALITY } gen_lock_file_name() { echo LOCKDIR_MARKER/$PROGNAME.pid } usage() { { echo "Usage: $PROGNAME [ -d | -v ] [ -c ] " echo " $PROGNAME -V" } >&2 exit 1 } ############################################################################### # # RESILIANT MESSAGING FUNCTIONS # ############################################################################### internal() { MSG="INTERNAL ERROR: $*" DATE=`date` # echo it so that the user can see it or cron can trap it (split line # to avoid confusing 'ident') echo "$PROGNAME: \ $MSG" >&2 # try to write it into $LOG_FILE if that's defined - other message types # treat unwritable but defined LOG_FILE as an error ( echo "$DATE: \ $MSG" >> ${LOG_FILE:-/dev/null} ) 2>/dev/null # try to syslog it - other message types are only syslog'ed if there is # no controlling terminal (as when run from 'at' or 'cron') logger -i -p local0.alert -t $PROGNAME "$MSG" # try to log it on the console echo "$DATE: \ $MSG" > /dev/console exit 2 } error() { DO_EXIT=${ERRORS_CAUSE_EXITS:-true} STDIN=false while :; do case "$1" in -) STDIN=true ;; -e) DO_EXIT=true ;; -ne) DO_EXIT=false ;; -*) internal "invalid option to error() '$1'" ;; *) break ;; esac shift done if [ ${VERBOSE_LEVEL:-2} -ge 1 ]; then DATE=`date` { { [ $STDIN = false ] && echo "$@@"; } || cat; } | while read LINE; do MSG="ERROR: $LINE" ( echo "$DATE: \ $MSG" >> ${LOG_FILE:-/dev/null} ) 2>/dev/null || internal "log file $LOG_FILE not writable!" { [ -t 2 ] && echo "$PROGNAME: \ $MSG" >&2; } || logger -i -p $FACILITY.err -t $PROGNAME "$MSG" done fi [ $DO_EXIT = false ] && return 1 exitdel exit 1 } warning() { STDIN=false while :; do case "$1" in -) STDIN=true ;; -*) internal "invalid option to error() '$1'" ;; *) break ;; esac shift done if [ ${VERBOSE_LEVEL:-2} -ge 2 ]; then DATE=`date` { { [ $STDIN = false ] && echo "$@@"; } || cat; } | while read LINE; do MSG="WARNING: $LINE" ( echo "$DATE: \ $MSG" >> ${LOG_FILE:-/dev/null} ) 2>/dev/null || internal "log file $LOG_FILE not writable!" { [ -t 2 ] && echo "$PROGNAME: \ $MSG" >&2; } || logger -i -p $FACILITY.warning -t $PROGNAME "$MSG" done fi return 0 } debug() { STDIN=false while :; do case "$1" in -) STDIN=true ;; -*) internal "invalid option to error() '$1'" ;; *) break ;; esac shift done LEVEL=$1 shift if [ ${VERBOSE_LEVEL:-2} -ge $LEVEL ]; then DATE=`date` { { [ $STDIN = false ] && echo "$@@"; } || cat; } | while read LINE; do MSG="DEBUG[$LEVEL]: $LINE" ( echo "$DATE: \ $MSG" >> ${LOG_FILE:-/dev/null} ) 2>/dev/null || internal "log file $LOG_FILE not writable!" { [ -t 2 ] && echo "$PROGNAME: \ $MSG" >&2; } || logger -i -p $FACILITY.debug -t $PROGNAME "$MSG" done fi return 0 } info() { STDIN=false while :; do case "$1" in -) STDIN=true ;; -*) internal "invalid option to error() '$1'" ;; *) break ;; esac shift done if [ ${VERBOSE_LEVEL:-2} -ge 3 ]; then DATE=`date` { { [ $STDIN = false ] && echo "$@@"; } || cat; } | while read LINE; do MSG="INFO: $LINE" ( echo "$DATE: \ $MSG" >> ${LOG_FILE:-/dev/null} ) 2>/dev/null || internal "log file $LOG_FILE not writable!" { [ -t 2 ] && echo "$PROGNAME: \ $MSG" >&2; } || logger -i -p $FACILITY.info -t $PROGNAME "$MSG" done fi return 0 } ############################################################################### # # GENERIC SUPPORT FUNCTIONS (not specifically related to backup task) # ############################################################################### locatecmd() { for POSSCMD in $*; do [ X`whichcmd $POSSCMD` != X ] && { echo $POSSCMD; return 0; } done return 1 } whichcmd() { for DIR in `echo $PATH | sed 's/:/ /g'`; do [ -x $DIR/$1 ] && { echo $DIR/$1; return 0; } done return 1 } ############################################################################### # # TEMPORARY FILE MANAGEMENT FUNCTIONS # ############################################################################### delonexit() { DELONEXIT="$DELONEXIT $*" } dontdelonexit() { for FILE in $*; do DELONEXIT=`echo $DELONEXIT | sed "s@@$FILE@@@@g"` done } exitdel() { debug 5 "cleaning up" rm -f $DELONEXIT } sighandler() { warning "signal recieved, clearing up and exiting" exitdel exit 3 } ############################################################################### # # LOCKING ROUTINES # ############################################################################### lock() { debug 5 "lock: locking $1" LOCKFILE=`gen_lock_file_name $1` { echo $$ > $LOCKFILE.$$; } 2>/dev/null || error -e "can't create lock" ln $LOCKFILE.$$ $LOCKFILE 2>/dev/null && { rm $LOCKFILE.$$; return 0; } HOLDING_PID=`cat $LOCKFILE` [ "X$HOLDING_PID" = X ] && { rm $LOCKFILE.$$; error -e "empty lockfile: $LOCKFILE"; } [ -d /proc/$HOLDING_PID ] && { rm $LOCKFILE.$$; error -e "program running already! (pid=$HOLDING_PID)"; } info "removing stale lock (pid=$HOLDING_PID)" rm -f $LOCKFILE ln $LOCKFILE.$$ $LOCKFILE 2>/dev/null && { rm $LOCKFILE.$$; return 0; } rm $LOCKFILE.$$ error -e "couldn't lock after removing stale lockfile" } unlock() { debug 5 "unlock: unlocking $1" LOCKFILE=`gen_lock_file_name $1` rm -f $LOCKFILE } umask 022 main "$@@" exit $? @ 1.7 log @split a line that was confusing ident @ text @d1 1 a1 1 #!/bin/sh d4 30 d35 2 a36 1 RCS_ID_QTEST='$Id: qtest,v 1.6 1997/10/26 12:12:35 alexis Exp alexis $' d38 58 a95 2 DFLT_MINQ=80 DFLT_COUNT=5 d100 1 a100 1 echo "Usage: $PROGNAME [ -q ] [ -c ] [ ip_addr ]" d106 126 a231 1 main() d233 1 a233 2 MINQ=$DFLT_MINQ COUNT=$DFLT_COUNT d235 1 a235 1 while [ "X$1" != X ]; do d237 2 a238 9 -V) echo "$PROGNAME version $VERSION" exit 0 ;; -c) [ "X$2" = X ] && usage COUNT=$2 shift ;; -q) [ "X$2" = X ] && usage MINQ=$2 shift ;; -*) usage ;; d244 73 a316 2 [ "X$1" = X -o "X$2" != X ] && usage HOST=$1 d318 4 a321 5 echo "$PROGNAME: INFO: running, host=$HOST, minq=$MINQ, count=$COUNT" LOSS=`ping -c $COUNT -i 1 -n -q $HOST 2>/dev/null | sed -n -e 's/^.*ed, \([0-9].*\)% pack.*$/\1/p'` QUAL=`expr 100 - $LOSS` echo "$PROGNAME: quality \ $QUAL %" d323 10 a332 1 [ $QUAL -ge $MINQ ] d335 7 @ 1.6 log @stamped for release 1.0.6 @ text @d5 1 a5 1 RCS_ID_QTEST='$Id: qtest,v 1.5 1997/10/20 17:53:40 alexis Exp alexis $' d46 2 a47 1 echo "$PROGNAME: quality $QUAL %" @ 1.5 log @fiddled :) @ text @d5 1 a5 1 RCS_ID_QTEST='$Id: qtest,v 1.4 1997/02/15 11:32:26 alexis Exp alexis $' @ 1.4 log @improved version info. @ text @d5 1 a5 1 { expr $VERSION : 'P.*R' > /dev/null; } && VERSION="`echo '$Id$' | cut -f3 -d' '` (development)" d7 2 a8 8 [ "X$3" != X ] && { echo "Usage: $PROGNAME [ min_qual ] [ ip_addr ]" >&2; exit 1; } MINQ=${1:-50} HOST=${2:-158.152.1.65} echo "$PROGNAME: running, host=$HOST, minq=$MINQ" LOSS=`ping -c 10 -i 1 -n -q $HOST 2>/dev/null | sed -n -e 's/^.*ed, \([0-9].*\)% pack.*$/\1/p'` QUAL=`expr 100 - $LOSS` echo "$PROGNAME: quality $QUAL %" d10 44 a53 1 [ $QUAL -ge $MINQ ] @ 1.3 log @MILEPOST - MAY NOT WORK @ text @d4 2 @ 1.2 log @WORKING MILESTONE @ text @d5 1 a5 1 [ "X$3" != X ] && { echo "Usage: $PROGNAME min_qual ip_addr" >&2; exit 1; } @ 1.1 log @Initial revision @ text @d5 3 a7 1 DEFAULT_HOST=158.152.1.65 d9 4 a12 2 [ "X$2" != X ] && { echo "Usage: $PROGNAME ip_addr" >&2; exit 101; } [ "X$1" = X ] && HOST=$DEFAULT_HOST || HOST=$1 d14 1 a14 2 echo "$PROGNAME: running" exit `ping -c 10 -i 1 -n -q $HOST | sed -n -e 's/^.*ed, \([0-9].*\)% pack.*$/\1/p'` @