#!/bin/bash
#
# Init file for the NorduGrid grid-manger
#
# chkconfig: 2345 55 25
# description: Grid Manager
#
# processname: grid-manager
# config: /etc/grid-manager.conf
# config: /opt/nordugrid/etc/grid-manager.conf
# pidfile: /var/run/grid-manager.pid

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

RETVAL=0

export NORDUGRID_LOCATION=${NORDUGRID_LOCATION:-/opt/nordugrid}

# GM requires GLOBUS_LOCATION to be set too
export GLOBUS_LOCATION=${GLOBUS_LOCATION:-/opt/globus}
export SASL_PATH=${SASL_PATH:-$GLOBUS_LOCATION/lib/sasl}

# change these values if pbs location is different than in case of installation
export PBS_BIN_PATH=${PBS_BIN_PATH:-/usr/bin}
export PBS_LOG_PATH=${PBS_LOG_PATH:-/var/spool/pbs/server_logs}

export TMP_DIR=${TMP_DIR:-/tmp}

export GNU_TIME="${GNU_TIME:-/usr/bin/time}"

export NODENAME="${NODENAME:-/bin/hostname -f}"

export RUNTIME_CONFIG_DIR=${RUNTIME_CONFIG_DIR:-}

GM_USER=

SWITCH_USER=yes
if [ '0' != `id -u` ] ; then 
  GM_USER=`id -un`
  SWITCH_USER=
fi

if [ -z "$GM_CONFIG" ]; then
  GM_CONFIG=$NORDUGRID_LOCATION/etc/grid-manager.conf
  if [ ! -r "$GM_CONFIG" ]; then
    GM_CONFIG=/etc/grid-manager.conf
  fi
fi
if [ ! -r "$GM_CONFIG" ]; then
  echo "Missing configuration file"
  exit 1
fi

export LD_LIBRARY_PATH=$NORDUGRID_LOCATION/lib:$GLOBUS_LOCATION/lib
unset X509_USER_CERT
unset X509_USER_KEY
unset X509_USER_PROXY
unset X509_SERVER_CERT
unset X509_SERVER_KEY
export X509_RUN_AS_SERVER=1

prog=grid-manager

PID_FILE=/var/run/$prog.pid
LOCKFILE=/var/lock/subsys/$prog
LOGFILE=/var/log/grid-manager.log

if [ ! -z "$GM_USER" ] ; then
  mkdir -p "$NORDUGRID_LOCATION/var"
  PID_FILE="$NORDUGRID_LOCATION/var/$prog.pid"
  LOCKFILE="$NORDUGRID_LOCATION/var/$prog"
  LOGFILE="$NORDUGRID_LOCATION/var/$prog.log"
  export X509_USER_CERT="$GLOBUS_LOCATION/etc/hostcert.pem"
  export X509_USER_KEY="$GLOBUS_LOCATION/etc/hostkey.pem"
  export X509_CERT_DIR="$GLOBUS_LOCATION/share/certificates"
  export GRIDMAP="$GLOBUS_LOCATION/etc/grid-mapfile"
fi

CLEAN_START=

cleanstart() {
  CLEAN_START=2
  start
}

lightcleanstart() {
  CLEAN_START=1
  start
}

distcleanstart() {
  CLEAN_START=3
  start
}

start()
{
  echo -n "Starting $prog    "
  if [ ! -x $NORDUGRID_LOCATION/bin/grid-manager ] ; then
    echo "Missing executable"
    exit 1
  fi
  
  CMD="$NORDUGRID_LOCATION/bin/grid-manager"

  if [ ! -z "$CLEAN_START" ] ; then
    CMD="$CMD -C $CLEAN_START"
    rm -f $LOGFILE
  fi
  
  if [ ! -z "$GM_CONFIG" ] ; then
    CMD="$CMD -c $GM_CONFIG"
  fi
  
  
#        ulimit -c 0

  if [ ! -z "$GM_USER" ] && [ ! -z "$SWITCH_USER"] ; then 
    su -m -c "$CMD 1>>$LOGFILE 2>&1 &" $GM_USER 
    echo $! > ${PID_FILE}
    RETVAL=$?
  else 
    $CMD 1>>$LOGFILE 2>&1 &
    echo $! > ${PID_FILE}
    RETVAL=$?
  fi
  
  [ "$RETVAL" = 0 ] && success

  [ "$RETVAL" = 0 ] && touch $LOCKFILE

  echo
}

stop()
{
  echo -n "Stopping $prog"

  if [ -f $PID_FILE ] ; then
    kill `cat $PID_FILE` && success "$prog shutdown" || failure "$prog shutdown"
    rm -f $PID_FILE $LOCKFILE
  else
    failure "$prog shutdown"
  fi

  echo
}

case "$1" in
  	start)
		start
		;;
  	cleanstart)
		cleanstart
		;;
  	lightcleanstart)
		lightcleanstart
		;;
  	distcleanstart)
		distcleanstart
		;;
	stop)
		stop
		;;
	restart|reload)
		stop
		start
		;;
	condrestart)
		if [ -f $LOCKFILE ] ; then
			stop
			# avoid race
			sleep 3
			start
		fi
		;;
	status)
		status $prog
		RETVAL=$?
		;;
	*)
		echo "Usage: $0 {start|stop|restart|reload|condrestart|status|cleanstart|lightcleanstart|distcleanstart}"
		RETVAL=1
esac
exit $RETVAL
