#!/bin/sh
#
# @(#)agtget_machineinfo	@(#)agtget_machineinfo	7.1 05/05/10	
#**********************************************************************
#*  name    = agtget_machineinfo                                      *
#*  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_machineinfo"

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

EXECPRG_1="/sbin/fdisk -l"
EXECPRG_2="/usr/bin/apm -v"
EXECPRG_3="/usr/sbin/acpid -v"
EXECPRG_4="/sbin/parted -s"
EXECPRG_4_sub="print"

RESULT_1="cmd_fdisk_l"
RESULT_2="cmd_apm_v"
RESULT_3="cmd_acpid_v"
RESULT_4="cmd_parted_print"

CPFILE_1="/proc/cpuinfo"
CPFILE_2="/proc/meminfo"
CPFILE_3="/proc/pci"

CPDIR_1="/proc/bus"
CPDIR_1_1="/proc/bus/pci"
CPDIR_1_2="/proc/bus/usb"
CPDIR_2="/proc/scsi"
CPDIR_3="/proc/ide"


#========================================================#
#= 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
		
		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

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

		if [ -f `echo $EXECPRG_4|cut -d' ' -f1` ]
		then
			DISKSDATA=`
				awk '
					(/^Disk/){
						split($2,arr,/:/);
						print arr[1];
					}
				' $1/$RESULT_1
			`
			if [ -f $1/$RESULT_4 ]
			then
				rm -f $1/$RESULT_4 2>/dev/null
			fi
			for DISKNAME in $DISKSDATA
			do
				$EXECPRG_4 $DISKNAME $EXECPRG_4_sub >>$1/$RESULT_4 2>&1
				echo "" >>$1/$RESULT_4 2>/dev/null
			done
		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`

		PATHNAME=$1/`basename $CPDIR_1`
		mkdir $PATHNAME

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

		DIRNAME=`basename $CPDIR_1_2`
		cp -r $CPDIR_1_2 $PATHNAME/$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`

		DIRNAME=`basename $CPDIR_3`
		cp -r $CPDIR_3 $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
