#!/usr/bin/ksh ############################################################################### # # Module: uf_onstatd.sh # Author: Peter R. Schmidt # Description: User friendly onstat -d (uses sysmaster) # # Change Log # # Date Name Description................. # 07/09/99 Peter R. Schmidt Start Program # 07/27/99 Peter R. Schmidt Option to show % free or % used # ############################################################################### OUTPUT=uf_onstatd.out TMPFILE=uf_onstatd.tmp XDATE=`date +%D-%T` MACHINE=`uname -n` BG=false BOLD=`tput smso` NORM=`tput rmso` ############################################################################### if [ $# != 0 ] then ARG1=$1 case $ARG1 in 1|2|3|4) OPTION1=$ARG1;; *) OPTION1=2;; esac ARG2=$2 case $ARG1 in 1|2) OPTION2=$ARG2;; *) OPTION2=1;; esac BG=true else while true do echo echo "1 = Report in Megs" echo "2 = Report in Kbytes" echo "3 = Report in Pages" echo "4 = Report in Bytes" echo "0 = Exit this program" echo echo "Enter reporting unit desired (0,1,2,3,4)" read OPTION1 case $OPTION1 in 0|1|2|3|4) break;; esac echo echo "Error - you must enter 0,1,2,3 or 4!" echo done while true do echo echo "1 = Print Percent USED" echo "2 = Print Percent FREE" echo "0 = Exit this program" echo echo "Enter display option desired (0,1,2)" read OPTION2 case $OPTION2 in 0|1|2) break;; esac echo echo "Error - you must enter 0, 1 or 2!" echo done fi case $OPTION1 in 0) echo "End requested by user"; exit;; 1) UNIT=M; UNITDESC=Mbytes;; 2) UNIT=K; UNITDESC=Kbytes;; 3) UNIT=P; UNITDESC=Pages;; 4) UNIT=B; UNITDESC=Bytes;; esac case $OPTION2 in 0) echo "End requested by user"; exit;; 1) PERCENT_TYPE=Used;; 2) PERCENT_TYPE=Free;; esac if [ -f $OUTPUT ] then rm -f $OUTPUT fi #---------------------------------------------------------------------- echo "Collecting dbs/chunk info from the sysmaster database..." dbaccess << EOF database sysmaster; unload to '$TMPFILE' delimiter "|" select syschktab.dbsnum, syschktab.chknum, syschktab.chksize, syschktab.nfree, (chksize - nfree) nused, syschktab.flags, syschktab.fname, sysdbstab.name from syschktab, sysdbstab where syschktab.dbsnum = sysdbstab.dbsnum and sysdbstab.name <> "sysmaster" order by 1,2 EOF echo echo "Completed - formatting report..." echo #---------------------------------------------------------------------- awk ' \ BEGIN { pagesize=2 pre_dbs_num=0 pre_dbs_name="" chunk_cnt = 0 FS="|" } { if (NR == 1) { split (xdate,b,"-") udate=b[1] utime=b[2] printf "\n%s %s Informix Disk Report for %s@%s\n", udate, utime, server, machine printf " (Numbers in %s)\n\n", unitdesc print "DBS Chk Allocated Used Free Percent Dbspace" printf "Num Num Space Space Space %s Chunk\n\n", percent_type } dbs_num = $1 chunk_num = $2 chunk_size_P = $3 chunk_free_P = $4 chunk_used_P = $5 chunk_flags = $6 chunk_name = $7 dbs_name = $8 #------------ BEFORE GROUP ----------------------------------------- if (dbs_num != pre_dbs_num) { #-------- PRINT DBSPACE SUBTOTALS IF MULTIPLE CHUNKS ------- if ((pre_dbs_num != 0) && (chunk_cnt > 1)) { dbs_percent=0 if (dbs_size_P > 0) { dbs_percent_used = ((dbs_used_P/dbs_size_P)*100) dbs_percent_free = ((dbs_free_P/dbs_size_P)*100) if (percent_type == "Used") { dbs_percent = dbs_percent_used } else { dbs_percent = dbs_percent_free } } if (unit == "B") { printf "%3d %10d*%10d*%10d*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_B, dbs_used_B, dbs_free_B, dbs_percent, pre_dbs_name } if (unit == "P") { printf "%3d %10d*%10d*%10d*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_P, dbs_used_P, dbs_free_P, dbs_percent, pre_dbs_name } if (unit == "K") { printf "%3d %10d*%10d*%10d*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_K, dbs_used_K, dbs_free_K, dbs_percent, pre_dbs_name } if (unit == "M") { printf "%3d %10.1f*%10.1f*%10.1f*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_M, dbs_used_M, dbs_free_M, dbs_percent, pre_dbs_name } } chunk_cnt = 0 if (pre_dbs_num != 0) { print "" } dbs_size_P = 0 dbs_size_K = 0 dbs_size_M = 0 dbs_size_B = 0 dbs_free_P = 0 dbs_free_K = 0 dbs_free_M = 0 dbs_free_B = 0 dbs_used_P = 0 dbs_used_K = 0 dbs_used_M = 0 dbs_used_B = 0 printf "%3d Dbspace: %s\n",dbs_num, dbs_name } #------------ ON EVERY ROW ------------------------------------- chunk_size_K = chunk_size_P*pagesize chunk_size_M = chunk_size_K/1024 chunk_size_B = chunk_size_K*1024 chunk_free_K = chunk_free_P*pagesize chunk_free_M = chunk_free_K/1024 chunk_free_B = chunk_free_K*1024 chunk_used_K = chunk_used_P*pagesize chunk_used_M = chunk_used_K/1024 chunk_used_B = chunk_used_K*1024 chunk_percent=0 if (chunk_size_P > 0) { chunk_percent_used = ((chunk_used_P/chunk_size_P)*100) chunk_percent_free = ((chunk_free_P/chunk_size_P)*100) } if (percent_type == "Used") { chunk_percent = chunk_percent_used } else { chunk_percent = chunk_percent_free } dbs_size_P += chunk_size_P dbs_size_K += chunk_size_K dbs_size_M += chunk_size_M dbs_size_B += chunk_size_B dbs_free_P += chunk_free_P dbs_free_K += chunk_free_K dbs_free_M += chunk_free_M dbs_free_B += chunk_free_B dbs_used_P += chunk_used_P dbs_used_K += chunk_used_K dbs_used_M += chunk_used_M dbs_used_B += chunk_used_B tot_size_P += chunk_size_P tot_size_K += chunk_size_K tot_size_M += chunk_size_M tot_size_B += chunk_size_B tot_free_P += chunk_free_P tot_free_K += chunk_free_K tot_free_M += chunk_free_M tot_free_B += chunk_free_B tot_used_P += chunk_used_P tot_used_K += chunk_used_K tot_used_M += chunk_used_M tot_used_B += chunk_used_B if (unit == "B") { printf "%3d %3d %10d %10d %10d %5.1f %s\n", dbs_num, chunk_num, chunk_size_B, chunk_used_B, chunk_free_B, chunk_percent, chunk_name } if (unit == "P") { printf "%3d %3d %10d %10d %10d %5.1f %s\n", dbs_num, chunk_num, chunk_size_P, chunk_used_P, chunk_free_P, chunk_percent, chunk_name } if (unit == "K") { printf "%3d %3d %10d %10d %10d %5.1f %s\n", dbs_num, chunk_num, chunk_size_K, chunk_used_K, chunk_free_K, chunk_percent, chunk_name } if (unit == "M") { printf "%3d %3d %10.1f %10.1f %10.1f %5.1f %s\n", dbs_num, chunk_num, chunk_size_M, chunk_used_M, chunk_free_M, chunk_percent, chunk_name } pre_dbs_num = dbs_num pre_dbs_name = dbs_name chunk_cnt++ } END { #-------- PRINT DBSPACE SUBTOTALS IF MULTIPLE CHUNKS ------- if ((pre_dbs_num != 0) && (chunk_cnt > 1)) { dbs_percent=0 if (dbs_size_P > 0) { dbs_percent_used = ((dbs_used_P/dbs_size_P)*100) dbs_percent_free = ((dbs_free_P/dbs_size_P)*100) } if (percent_type == "Used") { dbs_percent = dbs_percent_used } else { dbs_percent = dbs_percent_free } if (unit == "B") { printf "%3d %10d*%10d*%10d*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_B, dbs_used_B, dbs_free_B, dbs_percent, pre_dbs_name } if (unit == "P") { printf "%3d %10d*%10d*%10d*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_P, dbs_used_P, dbs_free_P, dbs_percent, pre_dbs_name } if (unit == "K") { printf "%3d %10d*%10d*%10d*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_K, dbs_used_K, dbs_free_K, dbs_percent, pre_dbs_name } if (unit == "M") { printf "%3d %10.1f*%10.1f*%10.1f*%5.1f * Total for: %s\n", pre_dbs_num, dbs_size_M, dbs_used_M, dbs_free_M, dbs_percent, pre_dbs_name } } #-------- PRINT FINAL TOTALS ------------------------------------ print "" tot_percent=0 if (tot_size_P > 0) { tot_percent_used = ((tot_used_P/tot_size_P)*100) tot_percent_free = ((tot_free_P/tot_size_P)*100) } if (percent_type == "Used") { tot_percent = tot_percent_used } else { tot_percent = tot_percent_free } if (unit == "B") { printf "Total * %10d %10d %10d %5.1f ** Final Totals\n", tot_size_B, tot_used_B, tot_free_B, tot_percent } if (unit == "P") { printf "Total * %10d %10d %10d %5.1f ** Final Totals\n", tot_size_P, tot_used_P, tot_free_P, tot_percent } if (unit == "K") { printf "Total * %10d %10d %10d %5.1f ** Final Totals\n", tot_size_K, tot_used_K, tot_free_K, tot_percent } if (unit == "M") { printf "Total * %10.1f %10.1f %10.1f %5.1f ** Final Totals\n", tot_size_M, tot_used_M, tot_free_M, tot_percent } } ' xdate=$XDATE machine=$MACHINE unit=$UNIT unitdesc=$UNITDESC server=$INFORMIXSERVER percent_type=$PERCENT_TYPE $TMPFILE > $OUTPUT rm -f $TMPFILE if [ $BG = false ] then pg $OUTPUT fi echo echo "Note: Output report is in $OUTPUT"