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

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

CPDIR="/proc"

CPFILE_1="cmdline"
CPFILE_2="environ"
CPFILE_3="stat"
CPFILE_4="statm"
CPFILE_5="status"

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

		for FILELIST in `ls -1 $CPDIR 2>> $1/${CMDNAME}_error`
		do
			PIDDIR=`(echo $FILELIST | egrep "^[[:digit:]]+") 2>> $1/${CMDNAME}_error`
			if [ "$PIDDIR" != "" ] && [ -d $CPDIR/$PIDDIR ]
			then
				mkdir "$1/$PIDDIR"

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

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

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

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

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

			fi
		done

		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



