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

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

# Copyright 2014 Puppet Labs

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

prog="puppetdb"
realname="puppetdb"

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

[ -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="puppetdb.jar"
JAVA_ARGS="${JAVA_ARGS} -cp '${INSTALL_DIR}/${JARFILE}' clojure.main -m puppetlabs.puppetdb.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\" -Djava.security.egd=/dev/urandom $JAVA_ARGS"
PIDFILE="/var/run/puppetlabs/${realname}/${realname}"
START_TIMEOUT=${START_TIMEOUT:-300}

find_my_pid() {
    pid=`pgrep -f "${JARFILE}"`
    if [ ! -d  "/var/run/puppetlabs/${realname}" ] ; then
        mkdir -p /var/run/puppetlabs/${realname}
        chown -R $USER:$GROUP /var/run/puppetlabs/${realname}
    fi
    echo $pid > $PIDFILE
}

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: "

    
    pushd "${INSTALL_DIR}" &> /dev/null
    daemon --user $USER --pidfile $PIDFILE "$EXEC >> /var/log/puppetlabs/puppetdb/puppetdb-daemon.log 2>&1 &"
    retval=$?
    sleep 1
    popd &> /dev/null
    find_my_pid
    [ -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() {
    find_my_pid
    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 $?
