DB2 ist ein Produkt der
IBM Corporation. Bitte Copyright- und Trademark-Hinweise beachten!
#!/bin/ksh
# iostat.ksh
# Raanon Reutlinger, IBM Israel, May 2000
display_syntax()
{
echo "\
SYNTAX: `basename $0` -c \"comment\" [-i m] [-p] [-o N] [-s n ] [-r] [-b]
Summerize the output of iostat.
-c: Comment placed on first line of Summary output file (required).
-i: Interval for iostat (default=1).
-p: Only display peak values, when they change, for all disks, etc.
Default is to display all values, as they change.
-o: Save output in dir N under \$RESULTS (-1=current dir, default).
-s: Save iostat output with n in the filename (0=dont save,default).
-r: Don't get iostat, reuse iostat output specifies by -s.
-b: DONT save prior (old) results to bak directory (default=save)
(Not saved anyway unless -o is greater than 0)
Notes:
Stop the utility by hitting Ctrl-C.
Values for -i, -s and -p are part of Summary output filename.
In most cases, best viewed in window-width which is multiple of 10.
"
}
# Constants
RESULTS=~/results
RESULTS_FILE="`basename $0 .ksh`"
RES_EXT=".out"
SUM_EXT=".sum"
AWKSCRIPT="`dirname $0`/`basename $0 .ksh`.awk"
# Defaults
RESULTS_DIR=-1# -1 defaults to current dir
REUSE_OUT=0
SAVE_OLD_RESULTS=1
PARSE_ERROR=""
PARAMS=$*
INTERVAL=1
SAVE_NAME=0
ONLYPEAKS=0
# Parse parameters
while [ "$1" != "" ]
do
case "$1" in
"-c") shift; COMMENT=$1; shift;;
"-i") shift; INTERVAL=$1; shift;;
"-p") shift; ONLYPEAKS=1;;
"-o") shift; RESULTS_DIR=$1; shift;;
"-s") shift; SAVE_NAME=$1; shift;;
"-r") shift; REUSE_OUT=1; ;;
"-b") shift; SAVE_OLD_RESULTS=0;;
*) shift; PARSE_ERROR="Invalid Param";;
esac
done
# Verify parameters
[ "$COMMENT" = "" ] && \
PARSE_ERROR="${PARSE_ERROR} -Comment is required"
[ $RESULTS_DIR -ge -1 ] 2>/dev/null || \
PARSE_ERROR="${PARSE_ERROR} -Invalid number following -o param"
[ $INTERVAL -ge 1 ] 2>/dev/null || \
PARSE_ERROR="${PARSE_ERROR} -Invalid number following -i param"
[ $SAVE_NAME -ge 0 ] 2>/dev/null || \
PARSE_ERROR="${PARSE_ERROR} -Invalid number following -s param"
[ $REUSE_OUT -eq 1 -a $SAVE_NAME -eq 0 ] && \
PARSE_ERROR="${PARSE_ERROR} -Cant use -r with -s 0 or missing -s"
if [ "$PARSE_ERROR" != "" ]
then
echo ""
echo $PARSE_ERROR
echo ""
display_syntax
exit
fi
RES_EXT="_${INTERVAL}${SAVE_NAME}${RES_EXT}"
SUM_EXT="_${INTERVAL}${SAVE_NAME}${ONLYPEAKS}${SUM_EXT}"
if [ $RESULTS_DIR -ge 0 ]
then
RES_OUT=${RESULTS}/${RESULTS_DIR}/${RESULTS_FILE}${RES_EXT}
SUM_OUT=${RESULTS}/${RESULTS_DIR}/${RESULTS_FILE}${SUM_EXT}
RES_BAK=${RESULTS}/${RESULTS_DIR}/bak/${RESULTS_FILE}${RES_EXT}.$$
SUM_BAK=${RESULTS}/${RESULTS_DIR}/bak/${RESULTS_FILE}${SUM_EXT}.$$
mkdir $RESULTS 2>/dev/null
mkdir $RESULTS/$RESULTS_DIR 2>/dev/null
if [ $SAVE_OLD_RESULTS -eq 1 ]
then
mkdir $RESULTS/$RESULTS_DIR/bak2>/dev/null
[ $REUSE_OUT -eq 0 ] && \
cp $RES_OUT $RES_BAK 2>/dev/null && echo "[Created: $RES_BAK]"
cp $SUM_OUT $SUM_BAK 2>/dev/null && echo "[Created: $SUM_BAK]"
fi
else
RES_OUT=${RESULTS_FILE}${RES_EXT}
SUM_OUT=${RESULTS_FILE}${SUM_EXT}
fi
export ONLYPEAKS
# BEGIN .......
[ $SAVE_NAME -eq 0 ] && TEE_OUT="" || TEE_OUT="| tee -a $SUM_OUT"
rm $SUM_OUT 2>/dev/null
[ $SAVE_NAME -ne 0 ] && echo "[Creating: $SUM_OUT]"
eval echo "$COMMENT"$TEE_OUT
eval echo "----------------------------------------"$TEE_OUT
eval echo "Invocation: $0 $PARAMS"$TEE_OUT
eval echo " `date`"$TEE_OUT
eval echo $TEE_OUT
if [ $REUSE_OUT -eq 1 ]
then
[ ! -f $RES_OUT ] && echo "Can't reuse $RES_OUT - Missing" && exit
awk -f $AWKSCRIPT $RES_OUT | tee -a $SUM_OUT
else
echo "Hit Ctrl-C to stop..."
trap "" 1 2 3
if [ $SAVE_NAME -eq 0 ]
then
echo "iostat output and summary not saved"
echo "Waiting for disk i/o ..."
iostat $INTERVAL | awk -f $AWKSCRIPT
else
echo "[Creating: $RES_OUT]"
echo "Waiting for disk i/o ..."
iostat $INTERVAL | tee $RES_OUT | awk -f $AWKSCRIPT
awk -f $AWKSCRIPT $RES_OUT >> $SUM_OUT
fi
fi
© Gernot Ruban