########################################################### # pu9.sh - count portal users for the last X minutes # for LSF 9 environments # J. David Schronce - Tue Jan 1 01:24:35 CST 2008 ########################################################### # BACKTIME - how many minutes into the past to look for # portal users - maximum 59 # # An attempt is made here to standardize the web server # log directories. On my servers they have a consistant # beginning, which I call LOGDIR, followed by the Environment # name, and ending with "access.log" - which I call # LOGEXT. Hopefully you can find similarities for your # log files. # ########################################################### BACKTIME=20 LOGDIR=/apps/ihs/*/logs LOGEXT=access.log ########################################################### # End of User Defined Variables ########################################################### USAGE="\nUSAGE: $0 [HH] [MM]\n HH and MM are optional\n \n\n Examples:\n $0 prod will show the number of unique users using PROD env in the\n last $BACKTIME minutes\n \n $0 prod 11 20 will show the number of unique users using PROD env in the\n $BACKTIME minutes preceeding 11:20 AM\n \n HH and MM must be used together\n" if [ $# -lt 1 ] then echo $USAGE exit fi if [ $# -eq 2 ] then echo $USAGE exit fi if [ $# -gt 3 ] then echo $USAGE exit fi ############################################################## # Validate Environment Name LAENV=$1 ############################################################## > /tmp/LIST.$$ MIN=`date +%M` HR=`date +%H` if [ $# -eq 4 ]; then HR=$3 MIN=$4 fi # calc minutes CHKMIN=`echo "$MIN - $BACKTIME" | bc` case $CHKMIN in ?) CHKMIN="0$CHKMIN";; esac if [ $CHKMIN -lt 0 ]; then CHKMIN=`echo "$CHKMIN + 60" | bc` CHKHR=`echo "$HR - 1" | bc` else CHKHR=$HR fi if [ $CHKHR -lt 0 ]; then CHKHR=23 fi case $CHKHR in ?) CHKHR="0$CHKHR" esac DATE=`date +%d/%b/%Y` ######################################################################## # Count Users ######################################################################## # cycle thru times ######################################################################## STARTMIN=$CHKMIN STARTHR=$CHKHR if [ $CHKMIN -gt $MIN ]; then MAXMIN=`echo "$MIN + 60" | bc ` case $MAXMIN in ?) MAXMIN="0$MAXMIN";; esac else MAXMIN=$MIN fi while [ $CHKMIN -le $MAXMIN ] do if [ $CHKMIN -gt 59 ]; then RMIN=`echo "$CHKMIN - 60" | bc` RHR=`echo "$CHKHR + 1" | bc` else RMIN=$CHKMIN RHR=$CHKHR fi case $RHR in ?) RHR="0$RHR";; esac case $RMIN in ?) RMIN="0$RMIN";; esac # Write out IP Addresses if [ -f $LOGDIR/$LAENV.$LOGEXT ]; then grep "$DATE:$RHR:$RMIN" $LOGDIR/$LAENV.$LOGEXT | awk '{print $1}' | sort -u >> /tmp/LIST.$$ fi CHKMIN=`echo "$CHKMIN + 1 " | bc` done HEADER="User(s) between $STARTHR:$STARTMIN and $HR:$MIN" if [ -f /tmp/LIST.$$ ]; then echo "`grep -v ^$ /tmp/LIST.$$ | sort -u | wc -l` $HEADER" # Cleanup rm /tmp/LIST.$$ else echo "0 $HEADER" fi