#!/bin/sh -e
#
### BEGIN INIT INFO
# Provides:          obm-provisioning
# Required-Start:    $remote_fs $syslog $network
# Required-Stop:     $remote_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: OBM component that help to locate other OBM services
# Description:       OBM Provisioning is a webserver offering a http API 
#                    to manage OBM resources such as domains, users and groups
### END INIT INFO


PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=obm-provisioning
DESC="OBM Provisioning API"
PROVISIONING_HOME=/usr/share/$NAME
PROVISIONING_PORT=8086
LOGDIR="/var/log/obm-provisioning"
LOGFILE="$LOGDIR/out.log"
START_JAR="$PROVISIONING_HOME/provisioning-server.jar"

if [ `id -u` -ne 0 ]; then
        echo "You need root privileges to run this script"
        exit 1
fi

# Make sure obm-provisioning is started with system locale
if [ -r /etc/default/locale ]; then
        . /etc/default/locale
        export LANG
fi

. /lib/lsb/init-functions

if [ -r /etc/default/rcS ]; then
        . /etc/default/rcS
fi

# Run obm-provisioning as this user ID (default: provisioning)
PROVISIONING_USER=provisioning

# Extra options to pass to the JVM
# Set java.awt.headless=true if JAVA_OPTIONS is not set so the
# Xalan XSL transformer can work without X11 display on JDK 1.4+
# It also sets the maximum heap size to 256M to deal with most cases.
JAVA_OPTIONS="-Xmx200m -Djava.awt.headless=true"
export JAVA_OPTIONS

# Set JAVA_HOME if not already set
if [ -z "$JAVA_HOME" ]; then
    test -d /usr/lib/jvm/java-6-un && {
        JAVA_HOME=/usr/lib/jvm/java-6-sun
    }
fi
if [ -z "$JAVA_HOME" ]; then
    JAVA_HOME="/usr/lib/jvm/java-7-openjdk-"`dpkg --print-architecture`
fi

# Timeout in seconds for the shutdown of all webapps
PROVISIONING_SHUTDOWN=10

export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
PROVISIONING_COMMAND="$JAVA -- $JAVA_OPTIONS -jar $START_JAR"

# Define other required variables
PIDFILE="/var/run/$NAME.pid"
HOSTNAME=$(uname -n)

##################################################
# Check for JAVA_HOME
##################################################
if [ -z "$JAVA_HOME" ]; then
        log_failure_msg "Could not start $DESC because no Java Development Kit"
        log_failure_msg "(JDK) was found. Please download and install JDK 1.6 or higher"
        exit 0
fi

##################################################
# PROVISIONING FUNCTIONS
##################################################
provisioningIsStopped () {
        start-stop-daemon --quiet --test --start --pidfile "$PIDFILE" \
                          --user "$PROVISIONING_USER" --startas $JAVA > /dev/null
}

startProvisioning () {
        touch $LOGFILE
        chown -R $PROVISIONING_USER:adm "$LOGDIR"

        start-stop-daemon --start --pidfile "$PIDFILE" --make-pidfile \
                          --chuid "$PROVISIONING_USER" --startas $PROVISIONING_COMMAND >> $LOGFILE 2>&1 &
}

stopProvisioning () {
        start-stop-daemon --quiet --stop --signal 9 --pidfile "$PIDFILE" \
                          --user "$PROVISIONING_USER" --startas $JAVA >> $LOGFILE 2>&1
        rm -f "$PIDFILE"

}

##################################################
# Do the action
##################################################
case "$1" in
  start)
        log_daemon_msg "Starting $DESC." "$NAME"
        if provisioningIsStopped ; then

                if [ -f $PIDFILE ] ; then
                        log_warning_msg "$PIDFILE exists, but obm-provisioning was not running. Ignoring $PIDFILE"
                fi

                if startProvisioning ; then
	                log_daemon_msg "$DESC started, reachable on http://$HOSTNAME:$PROVISIONING_PORT/." "$NAME"
                        log_end_msg 0
                else
                        log_end_msg 1
                fi

        else
                log_warning_msg "(already running)."
                log_end_msg 0
                exit 0
        fi
        ;;

  stop)
        log_daemon_msg "Stopping $DESC (was reachable on http://$HOSTNAME:$PROVISIONING_PORT/)." "$NAME"

        if provisioningIsStopped ; then
                if [ -x "$PIDFILE" ]; then
                        log_warning_msg "(not running but $PIDFILE exists)."
                else
                        log_warning_msg "(not running)."
                fi
        else
                stopProvisioning
                log_daemon_msg "$DESC stopped." "$NAME"
                log_end_msg 0
        fi
        ;;

  status)
        if provisioningIsStopped ; then
                if [ -f "$PIDFILE" ]; then
                    log_success_msg "$DESC is not running, but pid file exists."
                        exit 1
                else
                    log_success_msg "$DESC is not running."
                        exit 3
                fi
        else
                log_success_msg "$DESC is running with pid `cat $PIDFILE`, and is reachable on http://$HOSTNAME:$PROVISIONING_PORT/"
        fi
        ;;

  restart)
        if ! provisioningIsStopped ; then
                $0 stop $*
                sleep 1
        fi
        $0 start $*
        ;;

  check)
        log_success_msg "Checking arguments for obm-provisioning: "
        log_success_msg ""
        log_success_msg "PIDFILE		=  $PIDFILE"
        log_success_msg "JAVA_OPTIONS		=  $JAVA_OPTIONS"
        log_success_msg "JAVA			=  $JAVA"
        log_success_msg "PROVISIONING_USER	=  $PROVISIONING_USER"
        log_success_msg "ARGUMENTS		=  $ARGUMENTS"

        if [ -f $PIDFILE ]
        then
                log_success_msg "$DESC is running with pid `cat $PIDFILE`, and is reachable on http://$HOSTNAME:$PROVISIONING_PORT/"
                exit 0
        fi
        exit 1
        ;;

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

exit 0
