#!/bin/sh
###############################################################################
# The arkinfo.sh shell script is provided by the support team to collect 
# diagnostic information from the backup server or the client machine.
###############################################################################

# Setting variables
VERSION="5.0.14"
PS="ps axu"
OSVERSION=`uname -r`
OSALL=`uname -a`
DF="df -k"
DF_INODE="df -i"
DMESG="dmesg"
ARKEIA_DIR="`cat /etc/opt/arkeia/ARKEIA_DIR`"
ARKEIA_TMP="$ARKEIA_DIR"/tmp
ARKEIA_ARKEIAD="$ARKEIA_DIR"/arkeiad
ARKEIA_DBASE="$ARKEIA_DIR"/server/dbase
ARKEIA_SERVER="$ARKEIA_DIR"/server
ARKINFO_DIR="$ARKEIA_TMP"/arkinfo
OSTYPE=`uname`   

init_os_variables() {
	if [ "$OSTYPE" = "Linux" ]
	then
		PS="ps axuw"
		OSVERSION=`uname -r`
		OSALL=`uname -a`
		DF="df -k"
		DF_INODE="df -i"
	elif [ "$OSTYPE" = "IRIX" ]
	then
		PS="ps -eaf"
		OSVERSION=`uname -r`
		OSALL=`uname -a`
		DF="df -k"
		DF_INODE="df -i"
		DMESG='echo "dmesg does not exist"'
	elif [ "$OSTYPE" = "AIX" ]
	then
		PS="ps axu"
		OSVERSION=`uname -v`.`uname -r`
		OSALL=`uname -a`
		DF="df -k"
		DF_INODE="df -i"
		DMESG='echo "dmesg does not exist"'
	elif [ "$OSTYPE" = "HP-UX" ]
	then
		PS="ps -eaf"
		OSVERSION=`uname -r`
		OSALL=`uname -a`
		DF="df -k"
		DF_INODE="df -i"
	elif [ "$OSTYPE" = "SunOS" ]
	then
		PS="ps -eaf"
		OSVERSION=`uname -r`
		OSALL=`uname -a`
		DF="df -k"
		DF_INODE="df -o i"
	elif [ "$OSTYPE" = "OSF1" ]
	then
		PS="ps -eaf"
		OSVERSION=`uname -r`
		OSALL=`uname -a`
		DF="df -k"
		DF_INODE="df -i"
		DMESG='echo "dmesg does not exist"'
	elif [ "$OSTYPE" = "Darwin" ]
	then
		PS="ps auxww"
	fi
}

setoutput ()
{
	output=$1
}

send ()
{
	echo "$@" 2>> $output >>$output
}

myping ()
{
	if [ "$OSTYPE" = "Linux" ]
	then
		ping -d -c1 $1 
	elif [ "$OSTYPE" = "IRIX" ]
	then
		ping -d -c1 $1 
	elif [ "$OSTYPE" = "AIX" ]
	then
		ping -d -c1 $1 
	elif [ "$OSTYPE" = "HP-UX" ]
	then
		ping $1 -n 1
	elif [ "$OSTYPE" = "SunOS" ]
	then
		ping $1 1
	elif [ "$OSTYPE" = "OSF1" ]
	then
		ping -d -c1 $1 
	fi
}


echo " ============================================================ "
echo "	    ARKINFO Version $VERSION Copyright Arkeia Corp 2002 ..... "
echo " ============================================================ "
echo " Arkeia directory => $ARKEIA_DIR"
echo " Arkeia tmp => $ARKEIA_TMP"
echo " Arkeia info directory => $ARKINFO_DIR"
if [ -f "$ARKEIA_DIR"/bin/arkbkp ] 
then
	echo " The current machine IS a backup server"
	isserver="y"
else
	echo " The current machine IS NOT a backup server"
	isserver="n"
fi

echo " Before using this script please: "
echo "     - stop all backups running"
echo "     - stop all restorations running"
echo "     - and stop all libraries ( <Libraries Management><Stop> ) "
echo ""
echo ""

rm -fr "$ARKINFO_DIR"
rm "$ARKINFO_DIR"/ARKEIA.tz 2> /dev/null

# Creating directories
mkdir "$ARKEIA_TMP" 2>/dev/null
mkdir "$ARKINFO_DIR" 2>/dev/null

cd "$ARKEIA_DIR"
init_os_variables

# =================== GENERAL INFORMATION ================

echo " ======================================================= "
echo "	    Retrieving general information "
echo " ======================================================= "
echo ""

echo ".... Retrieving operating system information"
echo `uname -a`  > "$ARKINFO_DIR"/sysversion.txt
$PS > "$ARKINFO_DIR"/process.txt
$DF > "$ARKINFO_DIR"/diskinfo.txt
$DF_INODE > "$ARKINFO_DIR"/diskinodes.txt
$DMESG > "$ARKINFO_DIR"/dmesg.txt
echo "     done ...."
echo ""

echo ".... Retrieving arkeia information"
cd "$ARKEIA_DIR"
tar cf "$ARKINFO_DIR"/log.tar log
if [ "$isserver" = y ]
then
	echo "arkeia --version: " > "$ARKINFO_DIR"/v_arkeia.txt
	"$ARKEIA_DIR"/bin/arkeia --version >> "$ARKINFO_DIR"/v_arkeia.txt
	if [ -f "$ARKEIA_DIR"/bin/arkfs ]
	then
		echo "arkfs --version: " > "$ARKINFO_DIR"/v_arkfs.txt
		"$ARKEIA_DIR"/bin/arkfs --version >> "$ARKINFO_DIR"/v_arkfs.txt
	fi
	if [ -f "$ARKEIA_DIR"/bin/arkeiad ]
	then
		echo "arkeiad --version: " > "$ARKINFO_DIR"/v_arkeiad.txt
		"$ARKEIA_DIR"/bin/arkeiad --version >> "$ARKINFO_DIR"/v_arkeiad.txt
	fi
	if [ -f "$ARKEIA_DIR"/bin/xarkeia ]
	then
		echo "xarkeia --version: " > "$ARKINFO_DIR"/v_xarkeia.txt
		"$ARKEIA_DIR"/bin/xarkeia --version >> "$ARKINFO_DIR"/v_xarkeia.txt
	fi
	if [ -f "$ARKEIA_DIR"/bin/arkc ]
	then
		echo "arkc --version: " > "$ARKINFO_DIR"/v_arkc.txt
		"$ARKEIA_DIR"/bin/arkc --version >> "$ARKINFO_DIR"/v_arkc.txt
	fi
	tar cf "$ARKINFO_DIR"/server.tar server/server* 2> /dev/null
	cat /etc/opt/arkeia/ARKEIA_DIR > "$ARKINFO_DIR"/ARKEIA_DIR 
fi
cat /etc/opt/arkeia/ARKEIA_DIR > "$ARKINFO_DIR"/ARKEIA_DIR
echo "     done ...."
echo ""

if [ "$isserver" = y ]
then
	echo ".... Retrieving Arkeia Database information"
	cd "$ARKEIA_SERVER"
	tar cf "$ARKINFO_DIR"/dbase.tar dbase/f3tape dbase/f3bkp dbase/f3dpk \
	dbase/f3drv dbase/f3lib dbase/f3per dbase/f3pool \
	dbase/f3sec dbase/f3spk dbase/f3tape
	echo "     done ...."
	echo ""
fi

echo ".... Retrieving arkboot information"
cd "$ARKEIA_DIR"
tar cf "$ARKINFO_DIR"/arkboot.tar arkboot
echo "     done ...."
echo ""

echo ".... Retrieving language information"
cd "$ARKEIA_DIR"
tar cf "$ARKINFO_DIR"/lang.tar lang
echo "     done ...."
echo ""

if [ "$isserver" = y ]
then
	# ===================== TREATING DRIVE ===================

	echo " ======================================================= "
	echo "	  Checking drives ..... "
	echo " ======================================================= "
	echo ""

	cd "$ARKEIA_DIR"
	answer="y"
	echo "Do you have problem with a tape drive (y/n)?" 
	read answer
	echo ""
	if [ "$answer" = y ]
	then

		echo ".... Determining available tape drives"

		for i in `grep DRVID "$ARKEIA_DBASE"/f3drv/drvmaster.lst | awk -F\" '{print $4}'`
		do

			cd "$ARKEIA_DBASE"/f3drv/drv$i

			for n in `grep NAME drv$i.lst | awk -F\" '{print $2}'`
			do
				for t in `grep DRV_TYPE drv$i.lst | awk -F\" '{print $2}'`
				do
					if [ ! "$t" = NULL ]
					then
						if [ ! "$t" = FILE ] 
						then
							echo "Do you have a problem with your tape drive(s) " $n "? (y/n)"
							read answer
							echo ""

							if [ "$answer" = y ]
							then
								cp ./drv$i.lst "$ARKINFO_DIR"/drive_${n}.txt 

								for d in `grep "^REWIND_DEV" drv$i.lst | awk -F\" '{print $2}'`
								do
									echo "    checking device :" $d

									setoutput "$ARKINFO_DIR"/drive_${n}_mt.txt
									send "==========================================================="
									send "mt result on device $d" 
									mt -f $d status 2>>"$ARKINFO_DIR"/drive_${n}_mt.txt 1>&2
								done

							fi
						fi
					fi
				done 
			done 
		done 
		echo "     Listing done ...."
		echo ""
	fi
fi 

if [ "$isserver" = y ]
then
	# ===================== TREATING LIBRARY ===================

	echo " ======================================================= "
	echo "	  Checking libraries ..... "
	echo " ======================================================= "
	echo ""

	cd "$ARKEIA_DIR"
	echo "Do you have problem with a library (y/n)? " 
	read answer
	echo ""
	if [ "$answer" = y ]
	then
		echo ".... Listing available libraries"
		echo ""

		for i in `grep LIBID "$ARKEIA_DBASE"/f3lib/libmaster.lst | awk -F\" '{print $4}'`
		do

			cd "$ARKEIA_DBASE"/f3lib/lib$i

			for n in `grep NAME lib$i.lst | awk -F\" '{print $2}'`
			do
				for t in `grep LIB_TYPE lib$i.lst | awk -F\" '{print $2}'`
				do
					if [ ! "$t" = FILE ] 
					then
						echo "Do you have a problem with this library " $n "? (y/n)"
						read answer
						echo ""

						if [ "$answer" = y ]
						then
							cp ./lib$i.lst "$ARKINFO_DIR"/lib_${n}.txt

							for d in `grep ARM_DEV lib$i.lst | awk -F\" '{print $2}'`
							do
								setoutput "$ARKINFO_DIR"/lib_${n}_stks.txt
								echo "    checking device :" $d
								send "=============================================================="
								send " arkstks on device $d "
								"$ARKEIA_DIR"/bin/arkdetect -v -d$d -i 2>>"$ARKINFO_DIR"/lib_${n}_stks.txt 1>&2
							done

						fi
					fi
				done
			done
		done
		echo "     Listing done ...."
		echo ""
	fi
fi

if [ "$isserver" = y ]
then
	# ===================== TREATING HARDWARE DETECTION ===================

	echo " ======================================================= "
	echo "	  Checking Hardware Detection ..... "
	echo " ======================================================= "
	echo ""

	cd "$ARKEIA_DIR"
	echo "Do you have problem with the backup device detection (y/n)? " 
	read answer
	echo ""
	if [ "$answer" = y ]
	then
		echo ".... performing arkdetect"
		echo ""
		"$ARKEIA_DIR"/bin/arkdetect 2> "$ARKINFO_DIR"/arkdetect.txt 1>&2
		echo "     arkdetect done ...."
		echo ""
	fi
fi

# ===================== TREATING NETWORK PROBLEM ===================

echo " ======================================================= "
echo "	  Checking network ..... "
echo " ======================================================= "
echo ""

cd "$ARKEIA_DIR"
tar cf "$ARKINFO_DIR"/arkeiad.tar arkeiad

echo "Do you have any network problem (y/n)? "
read answer
echo ""
if [ "$answer" = y ]
then

	echo ".... Starting Network check module. This operation may take time !!!" 
	"$ARKEIA_DIR"/bin/chknlp > "$ARKINFO_DIR"/chknlp.txt
	echo "     done ...."
	echo ""

	if [ "$isserver" = y ]
	then
		while [ 1 ]
		do
			echo ""
			echo "Is there a problem accessing another client (y/n) ?"
			read answer
			echo ""

			if [ ! "$answer" = y ]
			then
				break
			else
				echo "Please enter the client's hostname: "
				read host
				echo ".... Checking host "$host" this may take time !!!"
				setoutput "$ARKINFO_DIR"/network.txt
				send " ========================================================="
				send " Checking host $host "
				send " ========================================================="
				myping $host 2>>"$ARKINFO_DIR"/network.txt 1>&2
				send ""
				send ""
				echo "     done ...."
				echo ""
			fi
		done
	fi
fi

# ===================== ENDP ===================

echo " ======================================================= "
echo "	  Formating information ..... "
echo " ======================================================= "
echo ""
echo ".... Packing all information"
cd "$ARKINFO_DIR"
tar cf - ./* | compress > "$ARKEIA_TMP"/ARKINFO.tz
if [ $? != 0 ]; then
	tar cf - ./* | gzip > "$ARKEIA_TMP"/ARKINFO.tz
fi
echo "     done ...."
echo ""

rm -fr "$ARKINFO_DIR"

echo ""
echo ""
echo ""
echo ""
echo " =============================================================== "
echo "    Attach the file $ARKEIA_TMP/ARKINFO.tz to your incident ticket at"
echo "    http://support.arkeia.com with a complete description of your problem.  "
echo ""
echo ""
echo ""
cd "$ARKEIA_TMP"

