#!/bin/sh
#
# hsysmgr:       Starts the System Manager Agent
#
# Version:
#
# chkconfig:345 95 5
# description: JP1/ServerConductor/Agent (for Linux)
# processname: smhagt
# config:

#
# Source function library.
#
. /etc/rc.d/init.d/functions


dirBASE="/opt/hitachi/serverconductor/agent"

### Function ###
logFILE="/var/opt/hitachi/serverconductor/agent/log/script.log"
message() {
	_MESSAGE=$1
	_DATE="`date +\"%c\"`> "
	echo "${_MESSAGE}"
	echo -n "${_DATE}" >> ${logFILE}
	echo "${_MESSAGE}" >> ${logFILE}
}
# 6000A568 Oo͂̂(ʏo͂Ȃ) >>
message_logonly() {
	_MESSAGE=$1
	_DATE="`date +\"%c\"`> "
	echo -n "${_DATE}" >> ${logFILE}
	echo "${_MESSAGE}" >> ${logFILE}
}
# << 6000A568 o͂Ô݂ɂ

get_process_status() {
	DRIVER_PROCESS=`lsmod | grep SmDrv*  | head -1`
	TRACED_PROCESS=`ps -eo "%a" | grep smhtraced | grep -v grep | head -1`
	AGENTD_PROCESS=`ps -eo "%p %P %a" | grep "/opt/hitachi/serverconductor/agent/bin/smhagt" | grep -v grep | sort -n +1 | head -n 1`
	AGENTD_PROCESS_ID=`echo ${AGENTD_PROCESS} | sed -e "s/\([0-9][0-9]*\).*[0-9][0-9]*.*/\1/g" | sed -e "s/ //g"`
}

#
# main
#

# >> 7630D001
KERNEL_VERSION1=`uname -r | sed "s/\([0-9]*\).\([0-9]*\).*/\1/"`
KERNEL_VERSION2=`uname -r | sed "s/\([0-9]*\).\([0-9]*\).*/\2/"`
KERNEL_VER_26GE=""
if [ ${KERNEL_VERSION1} -ge 2 ]
then
	if [ ${KERNEL_VERSION2} -ge 6 ]
	then
		KERNEL_VER_26GE="OVER"
	fi
fi
# << 7630D001
if [ -f /etc/sysconfig/lang ]; then
	export LANG=`cat /etc/sysconfig/lang`

fi
# >> 7630D001
if [ "${KERNEL_VER_26GE}" != "OVER" ]
then
#if [ -z $LANG ]; then
	export LANG=ja_JP.eucJP
#fi
else
	if [ -z $LANG ]
	then
		export LANG=ja_JP.UTF-8
	fi
fi
# << 7630D001 

case "$1" in
	start)
		get_process_status

		if [ -n "$AGENTD_PROCESS" \
			 -o -n "$TRACED_PROCESS" ]
		then
			echo "Some module is running. Please stop them at first."
			exit 1
		fi

		## Start modules.
		if [ ! -f /var/lock/subsys/hsysmgr.mod ]
		then
			/etc/rc.d/init.d/hsysmgr.mod start
		fi

		## Link gcc module.
		FINDDIR="/opt/hitachi/serverconductor/agent/"
		## 7630D001 gcc3.4Ή
		if [ -f /usr/lib/libstdc++.so.6 ]
		then
			GCCDIR='gcc3.4'
		elif [ -f /usr/lib/libstdc++.so.5 ]
		then
			GCCDIR='gcc3'
		else
			GCCDIR='gcc2'
		fi
		for SRCDIR in `find $FINDDIR -name "$GCCDIR" -print`
		do
			if [ -d $SRCDIR ]
			then
				for SRCFILE in `ls $SRCDIR/*`
				do
					if [ -f $SRCFILE ]
					then
						DIR=`echo $SRCDIR | sed -e "s/\(.*\/\).*/\1/"`
						FILE=`basename $SRCFILE`
						rm -f $DIR$FILE
						ln -s $SRCFILE $DIR$FILE
					fi
				done
			fi
		done

		export NLSPATH=$dirBASE/lib/nls/%L/%N
		echo -n "Starting ServerConductor/Agent"
#		daemon $dirBASE/bin/smhagt
		$dirBASE/bin/smhagt
		WAIT_TERMINATE=2
		while [ $WAIT_TERMINATE != 0 ]
		do
			echo -n "."
			WAIT_TERMINATE=`expr $WAIT_TERMINATE - 1`
			sleep 1s
		done
		get_process_status
		if [ -n "$AGENTD_PROCESS_ID" ]
		then
			echo " Done."
			dmesg > /var/$dirBASE/boot.message
			touch /var/lock/subsys/hsysmgr
		else
			echo ""
			message "Error: Server Agent is down for 2 seconds."
			/etc/rc.d/init.d/hsysmgr stop
		fi
		;;

	stop)
		get_process_status
		if [ -n "$AGENTD_PROCESS_ID" ]
		then
			echo -n "Stopping ServerConductor/Agent"
			kill -TERM ${AGENTD_PROCESS_ID}
			WAIT_TERMINATE=30
			while [ $WAIT_TERMINATE != 0 ]
			do
				get_process_status
				echo -n "."
				if [ -z "$AGENTD_PROCESS" ]
				then
					echo -n " Done."
					WAIT_TERMINATE=0
				else
					WAIT_TERMINATE=`expr $WAIT_TERMINATE - 1`
					kill -TERM ${AGENTD_PROCESS_ID} > /dev/null 2>&1
					sleep 1s
				fi
			done
			echo ""
		fi

		get_process_status

		if [ -n "$AGENTD_PROCESS" ]
		then
# 6000A568 o͂Ô݂ɂ >>
#			message "Caution: smhagt can't stop normaly. Terminate by force."
			message_logonly "Caution: smhagt can't stop normaly. Terminate by force."
			killproc smhagt > /dev/null
# << 6000A568 o͂Ô݂ɂ
		fi

		if [ -n "$TRACED_PROCESS" ]
		then
# 6000A568 o͂Ô݂ɂ >>
#			message "Caution: smhtraced can't stop normaly. Terminate by force."
			message_logonly "Caution: smhtraced can't stop normaly. Terminate by force."
			killproc smhtraced > /dev/null
# << 6000A568 o͂Ô݂ɂ
		fi

		rm -f /var/lock/subsys/hsysmgr
		;;

	status)
		get_process_status

		if [ -n "$AGENTD_PROCESS" \
			 -a -n "$TRACED_PROCESS" ]
		then
			echo "ServerConductor/Agent is running."
			exit 0
		fi

		if [ -n "$AGENTD_PROCESS" \
			 -o -n "$TRACED_PROCESS" ]
		then
			echo "Some module is running. Server Agent was stopped by the illegal process."
			exit 0
		fi

		echo "ServerConductor/Agent was stopped."
		exit 0
		;;

	restart)
		$0 stop
		$0 start
		;;

	*)
		echo "Usage: $0 {start|stop|status|restart}"
		exit 1
esac

exit 0
