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


KIXDEBUGDIRECTORY=$KIXSYS/debugkix
OUTDIRR=""
set -- `getopt d: $*`

while [ "$1" != "--" ]
do
    if [ "$1" = "-d" ]
    then
	shift
	if [ -d $1 ]
	then
	    if [ -w $1 ]
	    then
		OUTDIRR=$1
	    else
		echo "Directory " $1 " specified in -d option exists but is not writable"
		echo "Ignoring -d option"
	    fi
	else
	    mkdir -p -m 777 $1
	    if [ "$?" != 0 ]
	    then
		echo "Directory " $1 " specified in -d option could not be created"
		echo "Ignoring -d option"
	    else
		OUTDIRR=$1
	    fi
	fi
    else
	echo "kixsnap encountered an illegal option "
	exit 1
    fi
    shift
done

if [ "$OUTDIRR" = "" ]
then
    if [ -n "$KIXSNAPDIR" ]
    then
	if [ -d $KIXSNAPDIR ]
	then
	    if [ -w $KIXSNAPDIR ]
	    then
		OUTDIRR=$KIXSNAPDIR
	    else
		echo "Directory " $KIXSNAPDIR " exists but is not writable"
		echo "Ignoring environment variable setting for KIXSNAPDIR"
	    fi
	else
	    mkdir -p -m 777 $KIXSNAPDIR
	    if [ "$?" != 0 ]
	    then
		echo "Directory " $KIXSNAPDIR " could not be created"
		echo "Ignoring environment variable setting for KIXSNAPDIR"
	    else
		OUTDIRR=$KIXSNAPDIR
	    fi
	fi
    fi
fi

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

if [ "$OUTDIRR" = "" ]
then
    OUTDIRR=$KIXSYS
fi


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

OS_PLATFORM=`uname -s`


TIMESTAMP=`date '+%m%d_%H%M%S'`
OUTFILE="$OUTDIRR/snapshot.$TIMESTAMP"

if [ "$OS_PLATFORM" = "Windows_NT" ]
then
    NT_OUTFILE=`expr $OUTFILE | sed 's#\\\\#/#g'`
    OUTFILE="$NT_OUTFILE"
    AWK='awk'
    NULL_DEVICE=NUL
else
    AWK='nawk'
    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 $OUTFILE || exit 1
chmod 200 $OUTFILE
if [ -f $KIXSYS/core ]
then
	kixlog -e "The following core file exists and will be renamed."
	kixlog -e "`ls -l $KIXSYS/core`"
	kixlog -e "$KIXSYS/core renamed to $KIXSYS/core.$TIMESTAMP"
	CORE_NAME=$KIXSYS/core.$TIMESTAMP
	mv $KIXSYS/core $CORE_NAME
fi
echo Writing snapshot to $OUTFILE
TITLE=    
sep () {
echo " " ;
echo "********************************************************************";
echo $TITLE ;
echo " " ;
       }
(
echo "Snapshot taken at "`date`
TITLE="VERSION file contents";sep
sed '/^-----/q' $UNIKIX/VERSION
TITLE="uname -a";sep
uname -a
TITLE="Micro Focus cobver file contents";sep
#
# cobver file is in different locations depending on product
# UNIX object cobol  @ $COBDIR
# UNIX ServerExpress @ $COBDIR/etc
# NT   NetExpress    @ $COBDIR - we'll leave the NT check in place even though
#				 it's now in the same location as UNIX object
#				 cobol. NT object cobol had an expr clause that
#				 doesn't appear to be needed anymore.
#
if [ "$OS_PLATFORM" = "Windows_NT" ]
then
     cat $COBDIR/cobver
else
    if [ -f $COBDIR/cobver ]
    then
        cat $COBDIR/cobver
    else
        if [ -f $COBDIR/etc/cobver ]
        then
            cat $COBDIR/etc/cobver
        else
            echo "Unable to locate cobver file - check COBDIR env variable"
        fi
    fi
fi

TITLE="environment variables";sep
env | egrep 'KIX|^COB|^PATH|^LD_|^ORACLE'  
TITLE="type as ld cc";sep
if [ "$OS_PLATFORM" = "Windows_NT" ]
then
    echo "Type Information Not Available on NT"
else
    type as cc ld
fi
if [ -f ORACLE_HOME/unix.prd ]
then
	TITLE="Oracle unix.prd file contents";sep
        cat $ORACLE_HOME/unix.prd
fi
TITLE="unikixmain.dbg file contents";sep
cat $KIXSYS/unikixmain.dbg
TITLE="unikixmain.err file contents";sep
cat $KIXSYS/unikixmain.err
TITLE="unikixmain.log file contents";sep
cat $KIXSYS/unikixmain.log
if [ "$CORE_NAME" != "" ] 
   then
	TITLE="pstack $CORE_NAME";sep
	/usr/proc/bin/pstack $CORE_NAME 2> /dev/null
	TITLE="pmap $CORE_NAME";sep
	/usr/proc/bin/pmap $CORE_NAME 2> /dev/null
fi
TITLE="ptree unikixmain";sep
/usr/proc/bin/ptree `grep "of type m  started" $KIXSYS/unikixmain.log|tail -1|cut -f7 -d' '`
TITLE="1st ps -eaf at `date`";sep
$PS | sed -n '1p'
$PS | grep "unikix[a-zA-Z]" | sort | 
	$AWK '{
              if ($1 != psarg) { printf("\n") }
              print $0
              psarg=$1
	}'
TITLE="ipcs -qa";sep
ipcs -qa
TITLE="1st kixdump -u";sep
kixdump -u
TITLE="kixdump -Su";sep
kixdump -Su
TITLE="kixdump -Sc";sep
kixdump -Sc
TITLE="kixdump -A";sep
kixdump -A
TITLE="kixdump -Se ";sep
kixdump -Se
TITLE="kixdump -svalidate";sep
kixdump -svalidate
TITLE="kixdump -t";sep
kixdump -t
TITLE="kixdump -Sc";sep
kixdump -Sc
TITLE="kixdump -Sp";sep
kixdump -Sp
TITLE="kixdump -Sq";sep
kixdump -Sq
sleep 5
TITLE="2nd ps -eaf at `date`";sep
$PS | sed -n '1p'
$PS | grep "unikix[a-zA-Z]" | sort | 
	$AWK '{
              if ($1 != psarg) { printf("\n") }
              print $0
              psarg=$1
	}'
TITLE="2nd kixdump -u";sep
kixdump -u
TITLE="ls -l $UNIKIX/bin";sep
ls -l $UNIKIX/bin
TITLE="ls -l $UNIKIX/local/bin";sep
ls -l $UNIKIX/local/bin
TITLE="END OF FILE";sep
chmod 660 $OUTFILE
) >> $OUTFILE
echo "Writing VSAM snapshot to $OUTFILE.vsam"
kixdump -v > $OUTFILE.vsam
echo "Writing TRACE snapshot to $OUTFILE.trace"
kixdump -Eall > $OUTFILE.trace
