Check the LDAPBuild Process to see the current file. This was as of 2005-07-28 {{{ #!/bin/bash #:ndsperf.sh # # Read eDirectory installation variables and subroutines if [ -f /var/nds/.ndsenv ]; then . /var/nds/.ndsenv_functions . /var/nds/.ndsenv else printf "\nMissing /var/nds/.ndsenv -- cannot run!\n" exit 1 fi # This routine parses the disk provided by df -k to find the corresponding # device name in the form of c?t?d?, which is how iostat identifies disks. # If slice is part of the name, it is truncated. f_parsedev () # Arg_1=file system name from 'df -k' { # Initialize local variables veritas=0 unset vxgroup unset part while [ $# -ge 1 ] do case $1 in dev|md|dsk) ;; vx) veritas=1 ;; *) if [ $veritas -eq 1 ] then if [ -z "$vxgroup" ] then vxgroup=$1 else part=$1 fi else part=$1 fi ;; esac shift done if [ $veritas -eq 1 ] then DEV=`/usr/sbin/vxprint -g $vxgroup | grep "sd.*${part}-" | cut -d" " -f2 | cut -d"-" -f1` else # Drop the slice number from the result, if present DEV=${part%s*} fi #printf "vxgroup=$vxgroup part=$part DEV=$DEV\n" #exit 0 } ### Main ####################################################### # Logging headers: # year,month,day,hour,minute,us,sy,wt,id,r/s,w/s,kr/s,kw/s,wait,actv,wsvc_t,asvc_t,%w,%b,device,searchStatus,searchTime ################################################################ # Define the ID and valid result to use for synthetic search uidCheck="E017122" snResult="sn: JOHNSON JR" # Define maintenance window (start/end time); ndsperf.sh will not process # during this window. In the form of "hhmmss". sMaintTime=000000 eMaintTime=050000 # Abort if current time is during maintenance hours, or if ndsd isn't running if [[ ${DATE:8}00 > ${sMaintTime} && ${DATE:8}00 < ${eMaintTime} ]]; then exit 0 fi if [ -z "`pgrep ndsd`" ]; then exit 0 fi # Initialize variables PATH=$PATH:/usr/local/bin USER=ndsuser USERhomedir=`grep ndsuser /etc/passwd|awk -F":" '{print $6}'` data_file=/var/nds/ndsperf.csv archPath=$USERhomedir archFile= # Check current time; if Sunday 23:59 prepare to generate gzip'd tar archive of ndsperf.csv data # WARNING -- assumes crontab is running the script on 1 minute cylces from 07:00am until 11:59pm, eg: # * 07-23 * * * $HOME/bin/ndsperf.sh>/dev/null 2>&1 # Be sure to change text below to match last run of each day if crontab is set differently if [ "`date +%a%H%M`" = "Sun2359" ]; then archFile=ndsperf.weekly`date +%Y%m%d`-$HOSTNAME.csv fi # Build header if the data file doesn't already exist if [ ! -f $data_file ]; then echo "year,month,day,hour,minute,us,sy,wt,id,r/s,w/s,kr/s,kw/s,wait,actv,wsvc_t,asvc_t,%w,%b,device,searchStatus,searchTime" > $data_file chown $USER:$ndsGROUP $data_file chmod 640 $data_file fi ## Set notification flags #NOTIFY="NO" #if test -f $ndsperfAlertFile; then # eval `grep "URGENT=" $ndsperfAlertFile` # eval `grep "RECURRENT=" $ndsperfAlertFile` #fi #URGENT=${URGENT:="NO"} #RECURRENT=${RECURRENT:="NO"} # #if test -f $ndsperfCountFile; then # STATUS_COUNT=`cat $ndsperfCountFile` #fi #let "STATUS_COUNT = $STATUS_COUNT + 1" DEV=`/usr/xpg4/bin/df -k /var/nds | tail -1 | awk '{print $1}' | sed -e 's/\// /g'` f_parsedev $DEV record=`date +%Y,%m,%d,%H,%M` cpuiostat=`iostat -cr 1 2 | tail -1` record=$record,$cpuiostat record=$record,`iostat -xnCr 1 2 | grep ",${DEV}$" | tail -1` searchresult=`(time -p $LDAPSEARCH -LLL -l40 -h$HOSTNAME -e$USERhomedir/bin/$TREENAME.der -D"cn=ndsperf,ou=Administration,$BaseDN" -wp3rftestp9ss uid=$uidCheck sn > /tmp/searchresult.$$ 2>&1) 2>&1` realseconds=`echo $searchresult | awk '{print $2}'` uscpu=`echo $cpuiostat | awk '{print $1}'` if [ "`tail -2 /tmp/searchresult.$$ | head -n 1`" = "$snResult" ]; then record=$record,OK,$realseconds else record=$record,"`cat /tmp/searchresult.$$`",$realseconds fi # Write the data to the log echo $record >> $data_file # Cleanup temp file if [ -f /tmp/searchresult.$$ ]; then rm /tmp/searchresult.$$ fi if [ ! -z "$archFile" ]; then # Backup the file, and move it out of the way for archive cp -p $data_file $data_file.bak mv $data_file $archPath/$archFile # zip it & chown it to ndsuser owner gzip $archPath/$archFile if [ $? -eq 0 ]; then chown $USER:$ndsGROUP $archPath/$archFile.gz chmod 640 $archPath/$archFile.gz else printf "\nError running 'gzip' -- not found in PATH.\n" chown $USER:$ndsGROUP $archPath/$archFile chmod 640 $archPath/$archFile fi fi # The remainder of this script is still under development -- just bail for now exit 0 # If high CPU or slow LDAP response, collect diagnostics if [ $uscpu -ge 50 -o ${realseconds%.*} -ge 10 ]; then $USERhomedir/bin/ndsdiag.sh & fi }}}