#!/bin/sh
# Copyright 09/23/99 Sun Microsystems, Inc. All Rights Reserved.
# "@(#)em_services	1.73 99/09/23 Sun Microsystems"

SYSTEMID=`/usr/bin/uname -n`

EM_HOME="${EM_HOME-/opt/SUNWconn/em}"
EM_MIS_HOME="${EM_MIS_HOME-/opt/SUNWconn/em}"
EM_RUNTIME="${EM_RUNTIME-/var/opt/SUNWconn/em}"
OPENWINHOME="${OPENWINHOME-/usr/openwin}"
PATH=/usr/bin:/usr/ucb:$PATH:$EM_HOME/bin:$EM_HOME/etc:$EM_HOME/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/openwin/lib:$EM_MIS_HOME/lib
ECHO=/bin/echo
export PATH SYSTEMID EM_HOME EM_MIS_HOME EM_RUNTIME LD_LIBRARY_PATH
SHLIB_PATH=$LD_LIBRARY_PATH
export SHLIB_PATH

#runtime=/var/opt/SUNWconn/em


# check if root user
if test `/usr/bin/id | /usr/bin/awk '{print $1}'` != "uid=0(root)"
then
	$ECHO "You must be root user to run em_services."
	exit 1
fi

# check if SUNWemmis is installed
/usr/bin/pkginfo SUNWemmis.* > /dev/null 2>&1
if test $? -eq 0
then
	MIS_INSTALLED=TRUE
else
	MIS_INSTALLED=FALSE
	/usr/bin/pkginfo SUNWemdmn.* > /dev/null 2>&1
	if test $? -ne 0
	then
	    $ECHO "There are no Solstice Enterprise Manager Daemons installed."
	    $ECHO "Nothing to do, exiting."
	    exit 1
	fi
fi

# check if we have reasonable environment variable values before starting...
if [ ! -f ${EM_HOME}/bin/em_panel ]; then
        $ECHO "EM_HOME is not set to the directory where SUNWemapp package was installed."
        $ECHO "Please reset the EM_HOME environment variable, and retry."
        exit 1
elif [ ! -f ${EM_MIS_HOME}/bin/em_mis ]; then
        $ECHO "EM_MIS_HOME is not set to the directory where SUNWemmis package was installed."
        $ECHO "Please reset the EM_MIS_HOME environment variable, and retry."
        exit 1
fi


#
askconfirm() {

   if [ -z "$1" ]; then
	$ECHO "Do you really want to do this? \c"	
   else
	$ECHO "$1 \c"
   fi
   read ANSWER
   if [ "$ANSWER" != "y" ]; then
	if [ -z "$2" ]; then
	   $ECHO "No action has been taken."
	else
	   $ECHO "$2"
      	fi
	exit 1
   fi
}


killprocs() {

  $ECHO "Terminating all Solstice EM daemons"
  for daemon in em_login em_ncam em_cmip em_mis em_snmp- em_snmfw em_autod em_datad em_nnmpa em_dmuxd
  do
     pid=`/usr/bin/ps -e | /usr/bin/grep $daemon |
         /usr/bin/sed -e 's/^  *//' -e 's/ .*//'`
    
     for p in $pid
     do
        $ECHO "Terminating $daemon: PID=$p "
	if [ $daemon != "em_ncam" ] && [ $daemon != "em_mis" ]; then
            /usr/bin/kill -15  $p >/dev/null 2>&1
	else
            /usr/bin/kill -9  $p >/dev/null 2>&1
	fi
     done
  done
  /bin/rm -f /tmp/sysmgr.pids /tmp/dmuxd.pid
  if [ -x $EM_HOME/bin/snm_kill ]; then
  	snm_kill -A >/dev/null
  fi
}

start_mis_and_wait_until_ready()
{
/usr/bin/sh << EOF
	trap "exit 0" 1
	em_mis -k &
	wait
EOF
}

#
#
arg=$1
if [ $# -eq 0 ]; then
	if [ ! -d ${EM_RUNTIME}/data ] && [ $MIS_INSTALLED = TRUE ]; then
		$ECHO "Warning:  runtime has not been initialized."
		$ECHO "Executing \"em_services -r\" to initialize the system."
		$ECHO "Ignore the warning below if you have just installed EM."
		arg="-r"
	elif [ ! -d ${EM_RUNTIME}/data/DBM ] && [ $MIS_INSTALLED = TRUE ]; then
		$ECHO "Warning:  there is no runtime database."
		$ECHO "Executing \"em_services -i\" to create the database."
		arg="-i"
	else
		arg="-x"
	fi
fi

case $arg in
	-x)     killprocs
	        if [ $MIS_INSTALLED = TRUE ]; then
		   $ECHO "Starting em_login em_mis em_snmp-trap em_ncam em_snmfwd em_nnmpa em_autod em_datad"
                   $EM_HOME/bin/em_login&
		   $EM_HOME/bin/em_ncam&
		   /bin/rm -f /tmp/sysmgr.pids /tmp/dmuxd.pid
		   ##em_mis&
		   start_mis_and_wait_until_ready
		   ##sleep 25 
		   $EM_HOME/bin/em_restart
		   if [ -x $EM_HOME/bin/em_snmp-trap ]; then
			$EM_HOME/bin/em_trapd start
		   fi
		   /usr/bin/sleep 5
		   if [ -x $EM_HOME/bin/em_snmfwd ]; then
			$EM_HOME/bin/em_snmfwd&
		   fi
                   if pkginfo -q  SUNWemcpa ; then
                        /etc/rc2.d/S98cmipmpa start
                   fi
		   $EM_HOME/bin/em_nnmpa&
		   $EM_HOME/bin/em_autod&
                   $EM_HOME/bin/em_datad&
		else	
		   $ECHO "Starting em_snmp-trap"
		   if [ -x $EM_HOME/bin/em_snmp-trap ]; then
			  $EM_HOME/bin/em_trapd start
		   fi
		fi
		;;

	-i)     if [ $MIS_INSTALLED = TRUE ]; then
		   askconfirm "\nWarning: all current database information will be lost.\n\nDo you want to continue (y/n)? " "The database has not been altered."
		   /bin/rm -rf ${EM_RUNTIME}/data/DBM
		   /bin/rm -rf ${EM_RUNTIME}/data/LOG
		   /bin/rm -rf ${EM_RUNTIME}/data/EM.DBM
		   killprocs
		   $ECHO "Starting em_login em_mis em_snmp-trap em_ncam em_snmfwd em_nnmpa em_autod em_datad"
 		   $EM_HOME/bin/em_login&
		   $EM_HOME/bin/em_ncam&
		   /bin/rm -f /tmp/sysmgr.pids /tmp/dmuxd.pid
		   ##em_mis&
		   start_mis_and_wait_until_ready
		   ##sleep 25 
		   $EM_HOME/bin/em_startup
		   if [ -x $EM_HOME/bin/em_snmp-trap ]; then
			 $EM_HOME/bin/em_trapd start
		   fi
		   /usr/bin/sleep 5
		   if [ -x $EM_HOME/bin/em_snmfwd ]; then
			$EM_HOME/bin/em_snmfwd&
		   fi
                   if pkginfo -q  SUNWemcpa ; then
                        /etc/rc2.d/S98cmipmpa start
                   fi
		   $EM_HOME/bin/em_nnmpa&
		   $EM_HOME/bin/em_autod&
 		   $EM_HOME/bin/em_datad&
		else
		   killprocs
		   $ECHO "Starting em_snmp-trap"
		   if [ -x $EM_HOME/bin/em_snmp-trap ]; then
			  $EM_HOME/bin/em_trapd start
           fi
		fi
		;;

	-r)     if [ $MIS_INSTALLED = TRUE ]; then
		   askconfirm "\nWarning: the platform will be reinitialized.\n\nDo you want to continue (y/n)? " "The platform has not been reinitialized."
		   /bin/rm -rf ${EM_RUNTIME}/data/DBM
		   /bin/rm -rf ${EM_RUNTIME}/data/LOG
		   /bin/rm -rf ${EM_RUNTIME}/data/EM.DBM
		   killprocs
		   $ECHO "Running reinitialization of platform"
		   cd $EM_MIS_HOME
		   $EM_HOME/bin/var-install
		   EX_STAT=$?
		   if [ $EX_STAT -ne 0 ]; then
			$ECHO "reinitialization failed."
			exit 1
		   fi
		   cd bin
		   $ECHO "reinitialization complete"
		   $ECHO "Starting em_login em_mis em_snmp-trap em_ncam em_snmfwd em_nnmpa em_autod em_datad"
                   $EM_HOME/bin/em_login&
		   $EM_HOME/bin/em_ncam&
		   /bin/rm -f /tmp/sysmgr.pids /tmp/dmuxd.pid
		   ##em_mis&
		   start_mis_and_wait_until_ready
		   ##sleep 25 
		   $EM_HOME/bin/em_startup
		   if [ -x $EM_HOME/bin/em_snmp-trap ]; then
			 $EM_HOME/bin/em_trapd start
		   fi
		   /usr/bin/sleep 5
		   if [ -x $EM_HOME/bin/em_snmfwd ]; then
			$EM_HOME/bin/em_snmfwd&
		   fi
                   if pkginfo -q  SUNWemcpa ; then
                        /etc/rc2.d/S98cmipmpa start
                   fi
		   $EM_HOME/bin/em_nnmpa&
		   $EM_HOME/bin/em_autod&
                   $EM_HOME/bin/em_datad&
		else
                   killprocs
				   $ECHO "Starting em_snmp-trap"
				   if [ -x $EM_HOME/bin/em_snmp-trap ]; then
					  $EM_HOME/bin/em_trapd start
                   fi
		fi
		;;

	-s)	askconfirm "Do you want to terminate all active daemons (y/n)?: " "Daemons not terminated."
		killprocs
		exit;;

	-h*)     $ECHO ""
		$ECHO "em_services starts or stops all the necessary processes"
		$ECHO "to run the Solstice Enterprise Manager Daemons."
		$ECHO ""
		$ECHO "em_services     to restart the daemons, MIS in the"
		$ECHO "                state in which it was last shutdown."
		$ECHO "em_services -i  to start with a new database"
		$ECHO "em_services -r  to reinitialize the platform"
		$ECHO "em_services -s  to stop all daemons"
		$ECHO "em_services -h  print this message"
		exit;;

	*) $ECHO "Usage: em_services <-irsh>"
		exit;;
esac

$ECHO "em_services Start-up Complete."
exit

