#!/bin/sh
#
# @(#)agtget_kernel		@(#)agtget_kernel	7.1 05/05/10
#**********************************************************************
#*  name    = agtget_kernel                                           *
#*  func    =                                                         *
#*  note    =                                                         *
#*                                                                    *
#*         All Rights Reserved. Copyright (C) 2005, Hitachi, Ltd.     *
#*         Licensed Material of Hitachi, Ltd.                         *
#*                                                                    *
#**********************************************************************

#========================================================#
#= Set environment ======================================#
#========================================================#

umask 222

LANG=C
export LANG

PATH=/usr/bin:/usr/sbin:/sbin:/etc:/bin
export PATH

#========================================================#
#= Header ===============================================#
#========================================================#

VERSION="03300000"

CMDNAME="agtget_kernel"

COLLECTDIR="/var/opt/hitachi/serverconductor/agent/collect/"

EXECPRG_1="/bin/dmesg"
EXECPRG_2="/usr/bin/procinfo a"

RESULT_1="cmd_dmesg"
RESULT_2="cmd_procinfo"

CPFILE_1="/proc/swaps"
CPFILE_2="/proc/loadavg"
CPFILE_3="/proc/modules"
CPFILE_4="/proc/cmdline"
CPFILE_5="/proc/locks"
CPFILE_6="/proc/rtc"
CPFILE_7="/proc/stat"
CPFILE_8="/proc/uptime"
CPFILE_9="/proc/version"
CPFILE_10="/proc/ksyms"
CPFILE_10B="/proc/kallsyms"
CPFILE_11="/var/opt/hitachi/serverconductor/agent/boot.message"
CPFILE_12="/proc/driver/rtc"

CPDIR_1="/proc/sys"

CPDIR_2="/proc/tty"

#========================================================#
#= Output message =======================================#
#========================================================#

function Msg_usage
{
    if [ $# -eq 0 ]
    then
	if [ -d $COLLECTDIR ]
	then
	    echo "Usage:$CMDNAME [-ver ] directory\n" >> ${COLLECTDIR}/${CMDNAME}_error
	fi
    elif [ -d $1 ]
    then
	echo "Usage:$CMDNAME [-ver ] directory\n" >> $1/${CMDNAME}_error
    elif [ -d $COLLECTDIR ]
    then
	echo "Usage:$CMDNAME [-ver ] directory\n" >> ${COLLECTDIR}/${CMDNAME}_error
    fi
}


function Msg_error
{
    if [ $1 -eq 1 ]
    then
	if [ -d $COLLECTDIR ]
	then
		echo "$CMDNAME: $2 is not a directory.\n" >> ${COLLECTDIR}/${CMDNAME}_error
	fi
    elif [ $1 -eq 2 ]
    then
		echo "$CMDNAME: $2 is not a directory.\n" >> $3/${CMDNAME}_error
    fi
}

#========================================================#
#= Main =================================================#
#========================================================#

HIKICNT=0
VERFLG=0
for HIKISU in $*
do
	HIKICNT=`expr $HIKICNT + 1`

	OPTION=`echo $HIKISU | grep "^-"`
	DIRECTORY=`echo $HIKISU | grep "/-.*$"`

	if [ $HIKICNT -ge 3 ]
	then
		if [ $VERFLG -eq 1 ]
		then
			Msg_usage $2
			exit 1
		else
			Msg_usage $1
			exit 1
		fi
	fi

	if [ "$OPTION" != "" ]
	then
		if [ "$OPTION" = "-ver" ]
		then
			if [ $HIKICNT -eq 1 ] && [ $# -eq 1 ]
			then
				Msg_usage
				exit 1
			elif [ $HIKICNT -ge 2 ]
			then
				Msg_usage
				exit 1
			else
				VERFLG=1
			fi
                else
			if [ $HIKICNT -lt 3 ]
			then
				Msg_usage
				exit 1
			fi
		fi
	elif [ "$DIRECTORY" != "" ] && [ $HIKICNT -lt 3 ]
	then
		Msg_usage
		exit 1
	else
		if [ $HIKICNT -eq 2 ] && [ $# -eq 2 ] && [ $VERFLG -eq 0 ]
		then
			Msg_usage
			exit 1
		fi
	fi
done

if [ $HIKICNT -eq 0 ]
then
	Msg_usage
	exit 1
	fi


if [ $VERFLG -ne 0 ]
then
	if [ -d $2 ]
	then
		echo $VERSION > $2/${CMDNAME}_ver
		exit 0
	else
		Msg_error 1 $2
		exit 1
	fi
else
	if [ -d $1 ]
	then
		COUNT=0
		$EXECPRG_1 > $1/$RESULT_1 2>&1 &
		eval `echo PID$COUNT=$!`
		COUNT=`expr $COUNT + 1`

		if [ -f `echo $EXECPRG_2|cut -d' ' -f1` ]
		then
			$EXECPRG_2 > $1/$RESULT_2 2>&1 &
			eval `echo PID$COUNT=$!`
			COUNT=`expr $COUNT + 1`
		fi

		cp -p $CPFILE_1 $1/. 2>> $1/${CMDNAME}_error &
		eval `echo PID$COUNT=$!`
		COUNT=`expr $COUNT + 1`

		cp -p $CPFILE_2 $1/. 2>> $1/${CMDNAME}_error &
		eval `echo PID$COUNT=$!`
		COUNT=`expr $COUNT + 1`

		cp -p $CPFILE_3 $1/. 2>> $1/${CMDNAME}_error &
		eval `echo PID$COUNT=$!`
		COUNT=`expr $COUNT + 1`

		cp -p $CPFILE_4 $1/. 2>> $1/${CMDNAME}_error &
		eval `echo PID$COUNT=$!`
		COUNT=`expr $COUNT + 1`

		cp -p $CPFILE_5 $1/. 2>> $1/${CMDNAME}_error &
		eval `echo PID$COUNT=$!`
		COUNT=`expr $COUNT + 1`

		if [ -f $CPFILE_6 ]
		then
			cp -p $CPFILE_6 $1/. 2>> $1/${CMDNAME}_error &
			eval `echo PID$COUNT=$!`
			COUNT=`expr $COUNT + 1`
		fi

		cp -p $CPFILE_7 $1/. 2>> $1/${CMDNAME}_error &
		eval `echo PID$COUNT=$!`
		COUNT=`expr $COUNT + 1`

		cp -p $CPFILE_8 $1/. 2>> $1/${CMDNAME}_error &
		eval `echo PID$COUNT=$!`
		COUNT=`expr $COUNT + 1`

		cp -p $CPFILE_9 $1/. 2>> $1/${CMDNAME}_error &
		eval `echo PID$COUNT=$!`
		COUNT=`expr $COUNT + 1`

		if [ -f $CPFILE_10 ]
		then
			cp -p $CPFILE_10 $1/. 2>> $1/${CMDNAME}_error &
			eval `echo PID$COUNT=$!`
			COUNT=`expr $COUNT + 1`
		fi

		if [ -f $CPFILE_10B ]
		then
			cp -p $CPFILE_10B $1/. 2>> $1/${CMDNAME}_error &
			eval `echo PID$COUNT=$!`
			COUNT=`expr $COUNT + 1`
		fi

		cp -p $CPFILE_11 $1/. 2>> $1/${CMDNAME}_error &
		eval `echo PID$COUNT=$!`
		COUNT=`expr $COUNT + 1`
		
		if [ -f $CPFILE_12 ]
		then
			cp -p $CPFILE_12 $1/. 2>> $1/${CMDNAME}_error &
			eval `echo PID$COUNT=$!`
			COUNT=`expr $COUNT + 1`
		fi

		DIRNAME=`basename $CPDIR_1`
		cp -r $CPDIR_1 $1/$DIRNAME 2>> $1/${CMDNAME}_error &
		eval `echo PID$COUNT=$!`
		COUNT=`expr $COUNT + 1`

		DIRNAME=`basename $CPDIR_2`
		cp -r $CPDIR_2  $1/$DIRNAME 2>> $1/${CMDNAME}_error &
		eval `echo PID$COUNT=$!`
		COUNT=`expr $COUNT + 1`


		i=0	
		while [ 1 ]
		do
			BREAK_FLG=0
			while [ $i -lt $COUNT ]
			do
				eval `echo ID=\\$PID$i`
				PS_P=`(ps -p $ID | grep -v PID | awk '{print $1}') 2>> $1/${CMDNAME}_error`

				if [ "$PS_P" != "" ]
				then

					sleep 1
					BREAK_FLG=1
					break
				fi

				i=`expr $i + 1`
			done

			if [ $BREAK_FLG -eq 0 ]
			then
				break
			fi

		done

		if [ -f $1/${CMDNAME}_error ] && [ ! -s $1/${CMDNAME}_error ]
		then
			rm $1/${CMDNAME}_error
		fi

		exit 0

	else
		Msg_error 1 $1
		exit 1
	fi
fi
