#!/bin/ksh
# This script extracts data from mwa logfile into a filename specified by
# the user in a format useful for data integrator
#
# Usage : ecap_mwa_extract  -date "07/20/06"
# Usage : ecap_mwa_extract  -yesterday
# Usage : ecap_mwa_extract  -today
# Usage : ecap_mwa_extract  -mwadir <path>
# Usage : ecap_mwa_extract  -cpcdir <path>
#
#  08/18/06  remove -b and -e  add -date -cpcdir -mwdir -yesterday

STARTTIME=""
ENDTIME=""
OUTPUTDIR=""
CPC_OUTPUTDIR=""

Initialize()
{
    BEGIN=LAST-2
    END=LAST
    CREATE_CPC="1"
    CPC_DATE=""
    VERBOSE=" "

    OS=`uname -s`
    if [ "$OS" = "AIX" ]
    then

	EXTRACT=/usr/lpp/perf/bin/extract
	LOGFILE=/var/opt/perf/datafiles/logglob
	REPORTFILE=/usr/perfcap/settings/ecap_mwa_extract.template
	OUTPUTDIR=/usr/perfcap/mwa
	CPC_OUTPUTDIR=/usr/perfcap/data
	PREFIX="ecpa"
	ECHO="echo"
    elif [ "$OS" = "SunOS" ]
    then
	EXTRACT=/opt/perf/bin/extract
	LOGFILE=/var/opt/perf/datafiles/logglob
	REPORTFILE=/opt/perfcap/settings/ecap_mwa_extract.template
	OUTPUTDIR=/opt/perfcap/mwa
	CPC_OUTPUTDIR=/opt/perfcap/data
	PREFIX="ecps"
	ECHO="/usr/bin/echo"

    elif [ "$OS" = "HP-UX" ]
    then
	EXTRACT=/opt/perf/bin/extract
	LOGFILE=/var/opt/perf/datafiles/logglob
	REPORTFILE=/opt/perfcap/settings/ecap_mwa_extract.template
	OUTPUTDIR=/opt/perfcap/mwa
	CPC_OUTPUTDIR=/opt/perfcap/data
	PREFIX="ecph"
	ECHO="echo"
    else
	 echo "Unsupported Platform : $OS"
    fi

    $ECHO "ecap_mwa_extract, Copyright (c) 2006, PerfCap Corporation, All Rights Reserved"
    $ECHO " "
}


SetupTime()
{
    #  date

   MONTH_NUM=`date +%m`
   YEAR_NUM=`date +%Y`
   DAY_NUM=`date +%d`

   MONTH_NUM=`expr $MONTH_NUM + 0`

   if [ $1 = "-yesterday" ]
   then
      DAY_NUM=`expr $DAY_NUM - 1`
   fi
   if [ $1 = "-today" ]
   then
       DAY_NUM=`date +%d`
   fi

  if [ $DAY_NUM -eq 0 ]
  then

    MONTH_NUM=`expr $MONTH_NUM - 1`

    if [ $MONTH_NUM -eq 0 ]
    then
	MONTH_NUM=12
	DAY_NUM=31
	YEAR_NUM=`expr $YEAR_NUM - 1`

    # find last DAY_NUM

    else

      case $MONTH_NUM in
	1|3|5|7|8|10|12) DAY_NUM=31;;
	4|6|9|11) DAY_NUM=30;;
	2)
	  if [ `expr $YEAR_NUM % 4` -eq 0 ]; then
	    if [ `expr $YEAR_NUM % 400` -eq 0 ]; then
	      DAY_NUM=29
	    elif [ `expr $YEAR_NUM % 100` -eq 0 ]; then
	      DAY_NUM=28
	    else
	      DAY_NUM=29
	    fi
	  else
	    DAY_NUM=28
	  fi
	;;
      esac
    fi
  fi

  # get MONTH_NUM string


  MONTH_NUM_STR="Jan"
  case $MONTH_NUM in
	1)
	   MONTH_STR="Jan"
	   ;;
	2)
	   MONTH_STR="Feb"
	   ;;
	3)
	   MONTH_STR="Mar"
	   ;;
	4)
	   MONTH_STR="Apr"
	   ;;
	5)
	   MONTH_STR="May"
	   ;;
	6)
	   MONTH_STR="Jun"
	   ;;
	7)
	   MONTH_STR="Jul"
	   ;;
	8)
	   MONTH_STR="Aug"
	   ;;
	9)
	   MONTH_STR="Sep"
	   ;;
	10)
	   MONTH_STR="Oct"
	   ;;
	11)
	   MONTH_STR="Nov"
	   ;;
	12)
	   MONTH_STR="Dec"
	   ;;
    esac

   ddd=$DAY_NUM
   case $DAY_NUM in
	1)
	   ddd="01"
	   ;;
	2)
	   ddd="02"
	   ;;
	3)
	   ddd="03"
	   ;;
	4)
	   ddd="04"
	   ;;
	5)
	   ddd="05"
	   ;;
	6)
	   ddd="06"
	   ;;
	7)
	   ddd="07"
	   ;;
	8)
	   ddd="08"
	   ;;
	9)
	   ddd="09"
	   ;;
   esac

  MMM=$MONTH_STR
  YYY=$YEAR_NUM
  STARTTIME=$ddd"-"$MMM"-"$YYY":00:00:00"
  ENDTIME=$ddd"-"$MMM"-"$YYY":23:59:00"
  CPC_DATE=$YYY$MMM$ddd

}

ParseCommandLine()
{

    while [ "$1" != "" ]
    do
	if [ "$1" = "-date" ]
	then
	    BEGIN="\"$2 12:00 am\""
	    END="\"$2 11:59 pm\""
	    ParseDate $2
	    shift 1
	fi
	if [ "$1" = "-mwadir" ]
	then
	    OUTPUTDIR="$2"
	    shift 1
	fi
	if [ "$1" = "-cpcdir" ]
	then
	    CPC_OUTPUTDIR="$2"
	    shift 1
	fi
	if [ "$1" = "-today" ]
	then
	    BEGIN="LAST -1"
	    END="LAST -0"
	    SetupTime "-today"
	fi
	if [ "$1" = "-cpc" ]
	then
	  CREATE_CPC="1"
	fi
	if [ "$1" = "-nocpc" ]
	then
	  CREATE_CPC="0"
	fi
	if [ "$1" = "-verbose" ]
	then
	  VERBOSE=" -verbose"
	fi
	if [ "$1" = "-help" ]
	then
	   $ECHO "  "
	   $ECHO " options: "
	   $ECHO "    -date <date>    :	  date format mm/dd/yy"
	   $ECHO "    -today	      :	  use today for times "
	   $ECHO "    -yesterday      :	  use yesterday for times (default) "
	   $ECHO "    -nocpc	      :	  dont convert to cpc "
	   $ECHO "    -cpcdir <path>  :	  path for output of .cpc-1 file"
	   $ECHO "    -mwadir <path>  :	  path for output of OPVA extract files"
	   $ECHO "    -verbose	 :   verbose output"
	   $ECHO " "
	   $ECHO "  Example:"
	   $ECHO  " "
	   $ECHO "   ecap_mwa_extract -date \"08/03/06\" -cpcdir `pwd`"
	   exit 0
	fi
     shift 1
   done
#   echo "begin $BEGIN"
#   echo "end	$END"
}


ExtractOPVA()
{
    cd $OUTPUTDIR
    # REPORTFILE="${CURRDIR}/${REPORTFILE}"

# $EXTRACT -b 09/16/04 10:00 am -e 09/16/04 10:30 am -l $LOGFILE -r $REPORTFILE	 -gapdcznu -xp

    $ECHO $EXTRACT -b $BEGIN -e $END -l $LOGFILE -r $REPORTFILE	 -gapdczn -xp
    $EXTRACT -b $BEGIN -e $END -l $LOGFILE -r $REPORTFILE  -gapdcznu -xp > /dev/null 2>&1

    APPLICATION_NAME=xfrdAPPLICATION.asc
    CONFIGURATION_NAME=xfrdCONFIGURATION.asc
    DISK_NAME=xfrdDISK.asc
    GLOBAL_NAME=xfrdGLOBAL.asc
    LVOLUME_NAME=xfrdLVOLUME.asc
    NETIF_NAME=xfrdNETIF.asc
    PROCESS_NAME=xfrdPROCESS.asc
    CPU_NAME=xfrdCPU.asc


    NEW_APPL_FILE=$PREFIX"_mwa_`hostname`_$CPC_DATE.app"
    NEW_CONFIG_NAME=$PREFIX"_mwa_`hostname`_$CPC_DATE.cfg"
    NEW_DISK_NAME=$PREFIX"_mwa_`hostname`_$CPC_DATE.dsk"
    NEW_GLOBAL_NAME=$PREFIX"_mwa_`hostname`_$CPC_DATE.gbl"
    NEW_VOLUME_NAME=$PREFIX"_mwa_`hostname`_$CPC_DATE.vol"
    NEW_NETIF_NAME=$PREFIX"_mwa_`hostname`_$CPC_DATE.net"
    NEW_PROCESS_NAME=$PREFIX"_mwa_`hostname`_$CPC_DATE.prc"
    NEW_CPU_NAME=$PREFIX"_mwa_`hostname`_$CPC_DATE.cpu"

    if [ -f $APPLICATION_NAME ]
    then
	mv $APPLICATION_NAME $NEW_APPL_FILE
	$ECHO "	   Create `pwd`/$NEW_APPL_FILE ..."
    fi

    if [ -f $CONFIGURATION_NAME ]
    then
	mv $CONFIGURATION_NAME $NEW_CONFIG_NAME
	$ECHO "	   Create `pwd`/$NEW_CONFIG_NAME..."
    fi

    if [ -f $DISK_NAME ]
    then
	mv $DISK_NAME $NEW_DISK_NAME
	$ECHO "	   Create `pwd`/$NEW_DISK_NAME..."
    fi

    if [ -f	 $GLOBAL_NAME ]
    then
	mv $GLOBAL_NAME $NEW_GLOBAL_NAME
	$ECHO "	   Create `pwd`/$NEW_GLOBAL_NAME..."
    fi

    if [ -f $LVOLUME_NAME ]
    then
       mv $LVOLUME_NAME $NEW_VOLUME_NAME
	$ECHO "	   Create `pwd`/$NEW_VOLUME_NAME..."
    fi

    if [ -f $NETIF_NAME ]
    then
	mv $NETIF_NAME $NEW_NETIF_NAME
	$ECHO "	   Create `pwd`/$NEW_NETIF_NAME..."
    fi

    if [ -f $PROCESS_NAME ]
    then
	mv  $PROCESS_NAME  $NEW_PROCESS_NAME
	$ECHO "	   Create `pwd`/$NEW_PROCESS_NAME..."
    fi

    if [ -f $CPU_NAME ]
    then
	mv $CPU_NAME $NEW_CPU_NAME
	$ECHO "	   Create `pwd`/$NEW_CPU_NAME..."
    fi
}


ConvertToCPC()
{
    if test -h /usr/bin/ecap_analyze
    then
     $ECHO "/usr/bin/ecap_analyze -mwa_to_cpc -cpc $CPC_OUTPUTDIR  $VERBOSE" -begin $STARTTIME -end $ENDTIME
     /usr/bin/ecap_analyze -mwa_to_cpc -cpc $CPC_OUTPUTDIR $VERBOSE -begin $STARTTIME -end $ENDTIME
    else
      $ECHO "/usr/bin/ecap_analyze not found!"
    fi
}

#----------------------------------------------------
# ParseDate : get begin and end times and file formats
#	      for a given date of format dd/mm/yy
#	      times always 24hours
#
# Note: sun needs berkly usb extension to get substr in expr
#	other os's seem to build it into standard expr
#-----------------------------------------------------

ParseDate()
{
  $ECHO "Parse date...$1"

  # make sure date is correct length, we assume then it ok.
  # not sure about euro formats...
  #
  LENGTH=`expr "$1" : ".*"`
  if [ $LENGTH -ne 8 ]
  then
      $ECHO "error: date format must be	 mm/dd/yy"
      exit 1
  fi

  MONTH_STR=""
  if [ "$OS" = "SunOS" ]
  then
      MSTR="`/usr/ucb/expr substr \"$1\" 1 2`"
      DSTR="`/usr/ucb/expr substr \"$1\" 4 2`"
      YSTR="`/usr/ucb/expr substr \"$1\" 7 2`"
      DAY_STR=$DSTR
      MONTH_NUM=`/usr/ucb/expr	$MSTR`
  else
      MSTR="`expr substr \"$1\" 1 2`"
      DSTR="`expr substr \"$1\" 4 2`"
      YSTR="`expr substr \"$1\" 7 2`"
      DAY_STR=$DSTR
      MONTH_NUM=`expr  $MSTR`
  fi

  case $MONTH_NUM in
  1 | 01)
      MONTH_STR="Jan"
      ;;
  2 | 02)
      MONTH_STR="Feb"
      ;;
  3 | 03)
      MONTH_STR="Mar"
     ;;
  4 | 04)
      MONTH_STR="Apr"
     ;;
  5 | 05)
      MONTH_STR="May"
     ;;
  6 | 06)
      MONTH_STR="Jun"
     ;;
  7 | 07 )
      MONTH_STR="Jul"
     ;;
  8 | 08 )
      MONTH_STR="Aug"
     ;;
  9 | 09 )
      MONTH_STR="Sep"
     ;;
  10)
      MONTH_STR="Oct"
     ;;
  11)
      MONTH_STR="Nov"
     ;;
  12)
      MONTH_STR="Dec"
     ;;
  esac

# post 2000 only

  YEAR_STR="20$YSTR"

  CPC_DATE=$YEAR_STR$MONTH_STR$DAY_STR
  STARTTIME="$DAY_STR-$MONTH_STR-$YEAR_STR:00:00"
  ENDTIME="$DAY_STR-$MONTH_STR-$YEAR_STR:23:59"
  $ECHO "Parse date $1	 : $MONTH_STR  $YEAR_STR st $STARTTIME	et $ENDTIME"
}

#----------------------------------------------------------
# Main
#-------------------------------------------------------


Initialize

SetupTime "-yesterday"
ParseCommandLine $@
ExtractOPVA

if [ "$CREATE_CPC" = "1" ]
then
    ConvertToCPC
fi

exit
