#!/bin/bash
#
# Puppet Labs puppetserver
#
# chkconfig: - 70 10
# description: Puppet Labs puppetserver

### BEGIN INIT INFO
# Provides:          puppetserver
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: puppetserver
# Description:       Start puppetserver daemon placed in /etc/init.d.
### END INIT INFO

# Copyright 2014 Puppet Labs

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

prog="puppetserver"

##########################################
#  You should not have to edit this init script.
#  Please attempt to make changes in /etc/sysconfig/puppetserver
##########################################

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
[ -e "$INSTALL_DIR/ezbake-functions.sh" ] && . "$INSTALL_DIR/ezbake-functions.sh"

config=$CONFIG

PATH=/sbin:/usr/sbin:/bin:/usr/bin
JARFILE="puppet-server-release.jar"
JAVA_ARGS="${JAVA_ARGS} -cp '${INSTALL_DIR}/${JARFILE}' clojure.main -m puppetlabs.trapperkeeper.main --config ${CONFIG} -b '${BOOTSTRAP_CONFIG}'"
EXTRA_ARGS="--chuid $USER --background --make-pidfile"
lockfile=/var/lock/subsys/$prog
EXEC="$JAVA_BIN -XX:OnOutOfMemoryError=\"kill -9 %p\" -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/$prog -Djava.security.egd=/dev/urandom $JAVA_ARGS"
PIDFILE="/var/run/$prog/$prog"
START_TIMEOUT=${START_TIMEOUT:-120}

find_my_pid() {
    if [ ! -d  "/var/run/$prog" ] ; then
      mkdir -p /var/run/$prog
      chown -R $USER:$USER /var/run/$prog
    fi
    pid=`ps -ef | grep $JAVA_BIN | grep $JARFILE | awk '{print $2}'`
}

start() {
    # call status here and figure out current state
    rh_status_q
    [ -x $JAVA_BIN ] || exit 5
    [ -e $config ] || exit 6
    # Move any heap dumps aside
    echo -n $"Starting $prog: "

        /usr/bin/install --group=puppet --owner=puppet -d /var/run/puppet
    
    pushd "${INSTALL_DIR}" &> /dev/null
    daemon --user $USER --pidfile $PIDFILE "$EXEC >> /var/log/puppetserver/puppetserver-daemon.log 2>&1 &"
    retval=$?

    sleep 1
    popd &> /dev/null
    find_my_pid
    echo $pid > $PIDFILE
    [ -s $PIDFILE ] && success $"$base startup" || failure $"$base startup"
    echo
    [ -s $PIDFILE ] && touch $lockfile

    if [ "$retval" -ne 0 ] \
        || ! wait_for_app $(cat $PIDFILE) $START_TIMEOUT ;then
        failure $"$base startup"
    fi

    
    return $retval
}

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

    if [ ! -s "$PIDFILE" ] ; then
      echo $pid > $PIDFILE
    fi

    killproc -p $PIDFILE -d ${SERVICE_STOP_RETRIES}s $prog
    retval=$?

    [ $retval -eq 0 ] && success $"$base stopped" || failure $"$base stopped"
    echo
    [ $retval -eq 0 ] && rm -f $lockfile $PIDFILE
    return $retval
}

restart() {
    stop
    start
}

rh_status() {
    status -p $PIDFILE $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}


case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    status)
        rh_status
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart|condrestart|try-restart|status}"
        exit 2
esac
exit $?
