: $Workfile:   ebmsnap  $ $Revision:   1.0  $
#! /bin/sh
#**********************************************************************#
#*                                                                    *#
#* Copyright (c) 2001 by Sun Microsystems, Inc.                       *#
#* All rights reserved.                                               *#
#*                                                                    *#
#**********************************************************************#


echo "Starting BATCH SnapShot at:" `date`
if [ -z "$EBMHOME" ]
then
  echo "Error: BATCH environment not set, source the batchenv file"
  exit 1
fi
if [ ! -f $EBMHOME/batchenv ]
then
  echo "Error: $EBMHOME is an invalid BATCH directory"
  exit 1
fi

UID=$$; export UID
if [ ! -z "$USER" ]
then
  UID=$USER; export UID
fi
if [ ! -z "$LOGNAME" ]
then
  UID=$LOGNAME; export UID
fi

if [ ! -z "$TMPDIR" ]
then
  WORKDIR="$TMPDIR/batchsnapdir.$UID"
  SNAPDIR="$TMPDIR/batchsnapdir.$UID"
else
  WORKDIR="/tmp/batchsnapdir.$UID"
  SNAPDIR="/tmp/batchsnapdir.$UID"
fi

set -- `getopt t:d: $*`

while [ "$1" != "--" ]
do
    if [ "$1" = "-t" ]
    then
      shift
      if [ -d $1 ]
      then
          if [ -w $1 ]
          then
            if [ "$1" = "." ]
            then
              WORKDIR=`pwd`
            else
              WORKDIR="$1"
            fi
          else
            echo "Error: temporary directory $1 specified in -t option exists but is not writable"
            exit 1
          fi
      else
          mkdir -p -m 777 $1
          if [ "$?" != 0 ]
          then
            echo "Error: temporary directory $1 specified in -t option could not be created"
            exit 1
          else
            if [ "$1" = "." ]
            then
              WORKDIR=`pwd`
            else
              WORKDIR="$1"
            fi
          fi
      fi
    else
      if [ "$1" = "-d" ]
      then
        shift
        if [ -d $1 ]
        then
            if [ -w $1 ]
            then
              if [ "$1" = "." ]
              then
                SNAPDIR=`pwd`
              else
                SNAPDIR="$1"
              fi
            else
              echo "Error: output directory $1 specified in -d option exists but is not writable"
              exit 1
            fi
        else
            mkdir -p -m 777 $1
            if [ "$?" != 0 ]
            then
              echo "Error: output directory $1 specified in -d option could not be created"
              exit 1
            else
              if [ "$1" = "." ]
              then
                SNAPDIR=`pwd`
              else
                SNAPDIR="$1"
              fi
            fi
        fi
      else
        echo "Error: encountered an illegal option "
        exit 1
      fi
    fi
    shift
done

echo " "
echo "Temporary Directory [option -t]: " $WORKDIR
echo "Output    Directory [option -d]: " $SNAPDIR
echo " "
sleep 4

if [ -d $WORKDIR ]
then
    if [ ! -w $WORKDIR ]
    then
        echo "Error: Directory $WORKDIR exists but is not writable"
        exit 1
    fi
else
    mkdir -p -m 777 $WORKDIR
    if [ "$?" != 0 ]
    then
        echo "Error: Directory $WORKDIR could not be created"
    fi
fi

if [ -d $SNAPDIR ]
then
    if [ ! -w $SNAPDIR ]
    then
        echo "Error: Directory $SNAPDIR exists but is not writable"
        exit 1
    fi
else
    mkdir -p -m 777 $SNAPDIR
    if [ "$?" != 0 ]
    then
        echo "Error: Directory $SNAPDIR could not be created"
    fi
fi

#
# Figure out if we are on NT or UNIX
#

OS_PLATFORM=`uname -s`


TIMESTAMP=`date '+%m%d_%H%M%S'`
OUTFILE="$SNAPDIR/batchsnapfile.$TIMESTAMP"
TMPSNAPDIR="$WORKDIR/batchsnapdir$$.$TIMESTAMP"

if [ ! -f $TMPSNAPDIR ]
then
  mkdir -p -m 777 $TMPSNAPDIR
fi

if [ "$OS_PLATFORM" = "Windows_NT" ]
then
    AWK='awk'
    COMPRESS=pack
    NULL_DEVICE=NUL
else
    AWK='nawk'
    COMPRESS=compress
    NULL_DEVICE=/dev/null
fi

sh -c "$AWK ' '" 1>$NULL_DEVICE 2>&1 || AWK="awk"
PS='ps -eaf'
if [ `uname -s` = "SunOS" ]
then 
    if [ `uname -r` -lt 5 ]
    then 
        PS='ps -aegxuw'
     fi
fi

touch $TMPSNAPDIR/system.status || exit 1

echo Creating BATCH System SnapShot File, Please Wait ...
if [ -f $EBMHOME/pack/core ]
then
        cp $EBMHOME/pack/core $TMPSNAPDIR/core.$TIMESTAMP
fi

TITLE=    
sep () {
echo " " ;
echo "********************************************************************";
echo $TITLE ;
echo " " ;
       }
(
echo "BATCH SnapShot started at: "`date`
echo "Host Name: "`uname -a`
echo "System Status: "`uptime`
echo "BATCH Home: $EBMHOME"
if [ ! -z "$COBDIR" ]
then
  TITLE="Micro Focus cobver file contents:"; sep
  if [ "$OS_PLATFORM" = "Windows_NT" ]
  then
      cat `expr ${COBDIR} : '.*\([c-z]:.*lbr\).*'`/cobver
  else
      cat $COBDIR/cobver
  fi
fi

TITLE="Environment Variables:"; sep
env | sort
if [ "$OS_PLATFORM" = "Windows_NT" ]
then
    TITLE="Type Information for cc not available on NT"; sep
else
    TITLE="Searching for as ld cc cob:"; sep
    type as cc ld cob
fi

if [ -f ORACLE_HOME/unix.prd ]
then
        TITLE="Oracle unix.prd file contents";sep
        cat $ORACLE_HOME/unix.prd
fi
TITLE="List of active processes at `date`";sep
$PS | sed -n '1p'
$PS | sort | 
        $AWK '{
              if ($1 != psarg) { printf("\n") }
              print $0
              psarg=$1
        }'
TITLE="List of active shared memory segments";sep
ipcs -ma
TITLE="List of active semaphores";sep
ipcs -sa
TITLE="List of active sockets at `date`";sep
if [ "$OS_PLATFORM" = "Windows_NT" ]
then
  netstat
else
  netstat -f unix | grep $EBMHOME
fi
sleep 5
TITLE="List of active processes at `date`";sep
$PS | sed -n '1p'
$PS | sort | 
        $AWK '{
              if ($1 != psarg) { printf("\n") }
              print $0
              psarg=$1
        }'
TITLE="List of active sockets at `date`";sep
if [ "$OS_PLATFORM" = "Windows_NT" ]
then
  netstat
else
  netstat -f unix | grep $EBMHOME
fi
TITLE="List contents of $EBMHOME";sep
ls -lart $EBMHOME
TITLE="List contents of $EBMHOME/sockets";sep
ls -lart $EBMHOME/sockets
TITLE="List contents of $EBMHOME/pack";sep
ls -lart $EBMHOME/pack
TITLE="List contents of $EBMHOME/pack/ish";sep
ls -lart $EBMHOME/pack/ish
TITLE="List contents of $EBMHOME/pack/bin";sep
ls -lart $EBMHOME/pack/bin
TITLE="List contents of $EBMHOME/pack/etc";sep
ls -lart $EBMHOME/pack/etc
TITLE="List contents of $EBMHOME/public/bin";sep
ls -lart $EBMHOME/public/bin
TITLE="List contents of $EBMHOME/bam";sep
ls -lartR $EBMHOME/bam
TITLE="List contents of $EBMHOME/sysindir";sep
ls -lartR $EBMHOME/sysindir
if [ -d $EBMHOME/public/back ]
then
  TITLE="List contents of $EBMHOME/public/back";sep
  ls -lartR $EBMHOME/public/back
fi
if [ -d /tmp ]
then
  TITLE="List contents of /tmp";sep
  ls -lart /tmp
fi
if [ ! -z "$TMPDIR" ]
then
  TITLE="List contents of $TMPDIR";sep
  ls -lart $TMPDIR
fi
TITLE="Checking BATCH Active Flag";sep
if [ -f $EBMHOME/pack/etc/EBM.ACT ]
then
  ls -lart $EBMHOME/pack/etc/EBM.ACT
else
  echo BATCH is not active
fi
TITLE="END OF FILE";sep
chmod 660 $TMPSNAPDIR/system.status
) >> $TMPSNAPDIR/system.status 2>&1

cp $EBMHOME/.install $TMPSNAPDIR/. 2> $TMPSNAPDIR/cp_inst_file.err
cp $EBMHOME/batchenv $TMPSNAPDIR/. 2> $TMPSNAPDIR/cp_batchenv_file.err

mkdir -p -m 777 $TMPSNAPDIR/public
cp $EBMHOME/public/*.conf $TMPSNAPDIR/public/. 2> $TMPSNAPDIR/public/cp_conf_files.err

if [ -d $EBMHOME/public/back ]
then
  mkdir -p -m 777 $TMPSNAPDIR/public/back
  cp $EBMHOME/public/back/ebm_hist $TMPSNAPDIR/public/back/. 2> $TMPSNAPDIR/public/back/cp_hist_file.err
fi

mkdir -p -m 777 $TMPSNAPDIR/pack
cp $EBMHOME/pack/.*.err* $TMPSNAPDIR/pack/. 2> $TMPSNAPDIR/pack/cp_err_files.err
cp $EBMHOME/pack/btshrc  $TMPSNAPDIR/pack/. 2> $TMPSNAPDIR/pack/cp_btshrc_file.err

mkdir -p -m 777 $TMPSNAPDIR/pack/ish
cp $EBMHOME/pack/ish/com_hist $TMPSNAPDIR/pack/ish/. 2> $TMPSNAPDIR/pack/ish/cp_chist_file.err
cp $EBMHOME/pack/ish/ebm_hist $TMPSNAPDIR/pack/ish/. 2> $TMPSNAPDIR/pack/ish/cp_ehist_file.err

mkdir -p -m 777 $TMPSNAPDIR/bam
cp $EBMHOME/bam/bam.log $TMPSNAPDIR/bam/. 2> $TMPSNAPDIR/bam/cp_log_file.err

mkdir -p -m 777 $TMPSNAPDIR/bam/security
cp $EBMHOME/bam/security/* $TMPSNAPDIR/bam/security/. 2> $TMPSNAPDIR/bam/security/cp_sec_files.err

mkdir -p -m 777 $TMPSNAPDIR/bam/startup
cp $EBMHOME/bam/startup/makeact $TMPSNAPDIR/bam/startup/. 2> $TMPSNAPDIR/bam/startup/cp_act_file.err
cp $EBMHOME/bam/startup/checkdisks $TMPSNAPDIR/bam/startup/. 2> $TMPSNAPDIR/bam/startup/cp_disk_file.err

mkdir -p -m 777 $TMPSNAPDIR/sysindir
cp $EBMHOME/sysindir/DefJobAcct $TMPSNAPDIR/sysindir/DefJobAcct 2>> $TMPSNAPDIR/sysindir/cp_sysin_files.err
cp $EBMHOME/sysindir/EbmsysTable $TMPSNAPDIR/sysindir/EbmsysTable 2>> $TMPSNAPDIR/sysindir/cp_sysin_files.err
cp $EBMHOME/sysindir/HistoryFile $TMPSNAPDIR/sysindir/HistoryFile 2>> $TMPSNAPDIR/sysindir/cp_sysin_files.err
cp $EBMHOME/sysindir/sysin $TMPSNAPDIR/sysindir/sysin 2>> $TMPSNAPDIR/sysindir/cp_sysin_files.err

mkdir -p -m 777 $TMPSNAPDIR/cmd_output
{
infact > $TMPSNAPDIR/cmd_output/infact.output 2>&1 &
sleep 1
ebmsys -a > $TMPSNAPDIR/cmd_output/ebmsys.output 2>&1 &
sleep 1
ebminfo -s > $TMPSNAPDIR/cmd_output/ebmmd.lcsock.output 2>&1 &
sleep 1
ebminfo -S > $TMPSNAPDIR/cmd_output/ebmuptime.output 2>&1 &
sleep 1
rm -f $EBMHOME/public/msg/elog_print 2> $NULL_DEVICE
lgprint > $TMPSNAPDIR/cmd_output/lgprint.err 2>&1 &
ebmdate -t 3 > $TMPSNAPDIR/cmd_output/ebmdate.output 2>&1 &
sleep 1
ebminfo > $TMPSNAPDIR/cmd_output/ebminfo.output 2>&1 &
sleep 1
sh $EBMHOME/bam/startup/checkdisks > $TMPSNAPDIR/cmd_output/diskspace.output 2>&1
ebmadmin > $TMPSNAPDIR/cmd_output/ebmadmin.output 2>&1

find $EBMHOME -type f -exec sum {} \; >$TMPSNAPDIR/cmd_output/sum.output 2>&1
sleep 5

cp $EBMHOME/public/msg/elog_print $TMPSNAPDIR/cmd_output/lgprint.output 2>&1
if [ -f $EBMHOME/pack/etc/EBM.ACT ]
then
  shmdump > $TMPSNAPDIR/cmd_output/shmdump.output 2>&1
else
  echo "BATCH is not active" > $TMPSNAPDIR/cmd_output/shmdump.output
fi
} > $TMPSNAPDIR/cmd_output/cmd.stderr 2>&1

cd $EBMHOME/bam/subsys
ls -C1 | while read subsysname
do
  EBMSUBSYSDIR=$EBMHOME/bam/subsys/$subsysname
  SUBSYSDIR=$TMPSNAPDIR/bam/subsys/$subsysname
  mkdir -p -m 777 $SUBSYSDIR
  if [ -d $EBMSUBSYSDIR/local/bin ]
  then
    ls -lart $EBMSUBSYSDIR/local/bin > $SUBSYSDIR/local_bin.list 2>&1
  fi
  if [ -d $EBMSUBSYSDIR/src ]
  then
    ls -lartR $EBMSUBSYSDIR/src > $SUBSYSDIR/src.list 2>&1
  fi
  if [ -d $EBMSUBSYSDIR/InstalledRTSFS ]
  then
    ls -lart $EBMSUBSYSDIR/InstalledRTSFS > $SUBSYSDIR/InstalledRTSFS.list 2>&1
  fi
  if [ -f $EBMSUBSYSDIR/File_Map ]
  then
    cp $EBMSUBSYSDIR/File_Map $SUBSYSDIR/File_Map 2>&1
  fi
  if [ -f $EBMSUBSYSDIR/Setup ]
  then
    cp $EBMSUBSYSDIR/Setup $SUBSYSDIR/Setup 2>&1
  fi
  if [ -f $EBMSUBSYSDIR/Setup_ksh ]
  then
    cp $EBMSUBSYSDIR/Setup_ksh $SUBSYSDIR/Setup_ksh 2>&1
  fi
  if [ -f $EBMSUBSYSDIR/.subsys.cfg ]
  then
    cp $EBMSUBSYSDIR/.subsys.cfg $SUBSYSDIR/.subsys.cfg 2>&1
  fi
  
done

echo " "

cd `dirname $TMPSNAPDIR`
tar -cf $OUTFILE.tar `basename $TMPSNAPDIR`
if [ $? -ne 0 ]
then
  echo "Error creating output file, check directory $TMPSNAPDIR"
  exit 1
fi

$COMPRESS $OUTFILE.tar
if [ $? -ne 0 ]
then
  echo "Error compressing output file, check tar file $OUTFILE.tar"
  exit 1
fi
rm -rf $TMPSNAPDIR
echo " "
echo Command successfully completed.
echo SnapShot File Name: `ls $OUTFILE.*` 
echo " "
exit 0
