#!/usr/bin/ksh 
# nmon2WLE formatting script. Assumes AIX nmon files and ignores more then 150 disks
# Version 11, Nigel Griffiths, code example.
# Usage nmon2WLE {average | max } filename.nmon
#
INPUT=$2
INFO=/tmp/nmon2WLE.$$
DEBUG=0
HELP=$1
MODE=$1
#MODE=average
#MODE=max
#MODE=95percentile

if [[ "$MODE" != "average" && "$MODE" != "max"  && "$MODE" != "-h" ]]
then
echo Error
echo MODE $MODE not valid t should be average or max
echo
HELP="-h"
fi

if [[ "$HELP" == "-h" ]]
then
echo  nmon2WLE formatting script. Assumes AIX nmon files and ignores more then 150 disks
echo
echo  Version 11, Nigel Griffiths, code example i.e. Copyright is impossibe.
echo
echo  "Usage nmon2WLE {average | max } filename.nmon"
echo
echo Colunm names are:
echo Name, Quantity, ConsolidateTo, System, ActiveCores, CPUutilization, MemoryMB, DiskReadsPerSecond, BytesPerReadOp, DiskWritesPerSecond, BytesPerWriteOp, StorageGB, NetworkMBPerSecond, NetworkOpsPerSecond, OverheadPercent, ConcurrencyPercent
exit
fi

# echo INPUT file is $INPUT
if (( "$DEBUG" == 1 ))
then 
echo "1=Name, 2=Quantity, 3=ConsolidateTo, 4=System"
fi
grep "AAA,host,"  $INPUT | awk -F, '{ printf "%s-", $3 }'
grep "AAA,date,"  $INPUT | awk -F, '{ printf "%s, 1, 0, ", $3 }'
grep "AAA,SerialNumber,"  $INPUT | awk -F, '{ printf "%s, ", $3 }'
if (( $DEBUG == 1 ))
then 
echo
echo "5=ActiveCores, 6=CPUutilization, 7=MemoryMB,"
fi
grep ",lparstat -i," $INPUT | sed 's/ //g' | sed 's/\"//g' >$INFO
CAPPED=$(grep Mode $INFO | grep -v Memory | grep -v Saving | awk -F: '{printf "%s", $2}')

if (( "$DEBUG" > 9 ))
then
printf "CPU Mode is %s  Note:If Uncapped then ActiveCores=VirtualCPUs If Capped then ActiveCores=Entitlement\n", $CAPPED
fi
if [[ "$CAPPED" == "Capped" ]]
then
grep "EntitledCapacity"  $INFO | grep -v "Pool"   | awk -F: '{printf "%s,", $2}'
else
grep "OnlineVirtualCPUs" $INFO |                    awk -F: '{printf "%s,", $2}'
fi
# remove the temporary file
rm  $INFO

if [[ $MODE == "average" ]]
then
grep ^CPU_ALL,T $INPUT | awk -F"," 'BEGIN { COUNT=0.0; LINES=0; MAX=0; } {LINES+=1; COUNT+=($3+$4); if( MAX < ($3+$4)) MAX=$3+$4; } END {printf "%5.1f, ", COUNT/LINES, MAX}'
fi

if [[ $MODE == "max" ]]
then
grep ^CPU_ALL,T $INPUT | awk -F"," 'BEGIN { MAX=0; } { if( MAX < ($3+$4)) MAX=$3+$4; } END {printf "%5.1f, ", MAX}'
fi

grep ",online Memory," $INPUT | awk -F, '{ printf "%s, ", $4 }'

if (( "$DEBUG" == 1 ))
then
echo " "
fi

if (( "$DEBUG" == 1 ))
then
echo 8=DiskReadsPerSecond, 9=BytesPerReadOp, 
fi

grep "^DISK" $INPUT >$INFO
READS=$(grep ^DISKRIO,T $INFO | awk -F"," 'BEGIN { COUNT=0.0; LINES=0 } {LINES+=1; for(i=3; i<=NF; i++){COUNT+=$i } } END {printf "%.1f\n", COUNT/LINES}' )
READSMAX=$(grep ^DISKRIO,T $INFO | awk -F"," 'BEGIN { COUNT=0.0; LINES=0 } {LINES+=1; for(i=3; i<=NF; i++){if(COUNT < $i) COUNT=$i ; } } END {printf "%.1f\n", COUNT}' )
READKB=$(grep ^DISKREAD,T $INFO | awk -F"," 'BEGIN { COUNT=0.0; LINES=0 } {LINES+=1; for(i=3; i<=NF; i++){COUNT+=$i } } END {printf "%.1f\n", COUNT/LINES}' )

if [[ $MODE == "average" ]]
then
printf  "$READS, "
fi

if [[ $MODE == "max" ]]
then
printf  "$READSMAX, "
fi

# echo $READKB DiskRead KB per second Average 

integer READSIZE
if(( $READS > 0 ))
then
READSIZE=$READKB/$READS*1024
else
READSIZE=0
fi
printf  "$READSIZE, "

WRITES=$(grep ^DISKWIO,T $INFO | awk -F"," 'BEGIN { COUNT=0.0; LINES=0; } {LINES+=1; for(i=3; i<=NF; i++){COUNT+=$i } } END {printf "%.1f", COUNT/LINES}' )
WRITESMAX=$(grep ^DISKWIO,T $INFO | awk -F"," 'BEGIN { COUNT=0.0 } {LINES+=1; for(i=3; i<=NF; i++){if(COUNT < $i) COUNT=$i ; } } END {printf "%.1f", COUNT}' )
WRITEKB=$(grep ^DISKWRITE,T $INFO | awk -F"," 'BEGIN { COUNT=0.0; LINES=0; } {LINES+=1; for(i=3; i<=NF; i++){COUNT+=$i } } END {printf "%.1f", COUNT/LINES}' )

if (( "$DEBUG" == 1 ))
then
echo
echo 10=DiskWritesPerSecond, 11=BytesPerWriteOp, 
fi

if [[ $MODE == "average" ]]
then
printf  "$WRITES, "
fi

if [[ $MODE == "max" ]]
then
printf  "$WRITESMAX, "
fi

#echo $WRITEKB Disk Write per second Average 
integer WRITESIZE
WRITESIZE=$WRITEKB/$WRITES*1024
#echo $WRITESIZE Disk Write Size in bytes Average
printf  "$WRITESIZE, "
rm $INFO

if (( "$DEBUG" == 1 ))
then
echo 12=StorageGB, 13=NetworkMBPerSecond, 14=NetworkOpsPerSecond, 15=OverheadPercent, 16=ConcurrencyPercent
echo
fi

grep ^BBBV $INPUT | grep "TOTAL PPs:" | sed 's/(/,/' | sed 's/ megabytes/,/' | awk -F"," 'BEGIN { COUNT=0.0 } {COUNT+=$4;} END {printf "%.1f, ", COUNT/1024}' 

if [[ $MODE == "average" ]]
then
grep ^NET,T $INPUT | awk -F"," 'BEGIN { COUNT=0.0; LINES=0; MAX=0.0; } {LINES+=1; for(i=3; i<=NF; i++){COUNT+=$i; if(MAX < $i) MAX=$i; } } END {printf "%5.1f, ", COUNT/LINES}'
fi

if [[ $MODE == "max" ]]
then
grep ^NET,T $INPUT | awk -F"," 'BEGIN { COUNT=0.0; LINES=0; MAX=0.0; } {LINES+=1; for(i=3; i<=NF; i++){COUNT+=$i; if(MAX < $i) MAX=$i; } } END {printf "%5.1f, ", MAX}'
fi


if [[ $MODE == "average" ]]
then
grep ^NETPACKET,T $INPUT | awk -F"," 'BEGIN { COUNT=0.0; LINES=0; MAX=0.0; } {LINES+=1; for(i=3; i<=NF; i++){COUNT+=$i; if(MAX < $i) MAX=$i; } } END {printf "%5.1f, ", COUNT/LINES}'
fi

if [[ $MODE == "max" ]]
then
grep ^NETPACKET,T $INPUT | awk -F"," 'BEGIN { COUNT=0.0; LINES=0; MAX=0.0; } {LINES+=1; for(i=3; i<=NF; i++){COUNT+=$i; if(MAX < $i) MAX=$i; } } END {printf "%5.1f, ", MAX}'
fi

echo "0, 100"
