#!/bin/bash
#
# Init script for foreman
#
# chkconfig: - 85 15
# description: Init script for foreman

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

if [ -f /etc/sysconfig/foreman ]; then
    . /etc/sysconfig/foreman
fi

function run_in_scl() {
   scl enable ruby193 "thin $*"
}

prog=foreman
THIN="run_in_scl"
RETVAL=0
FOREMAN_PORT=${FOREMAN_PORT:-3000}
FOREMAN_USER=${FOREMAN_USER:-foreman}
FOREMAN_HOME=${FOREMAN_HOME:-/usr/share/foreman}
export HOME=$FOREMAN_HOME
FOREMAN_ENV=${FOREMAN_ENV:-production}
FOREMAN_USE_PASSENGER=${FOREMAN_USE_PASSENGER:-0}
FOREMAN_USE_THIN=${FOREMAN_USE_THIN:-0}

if [[ -z $FOREMAN_PID ]]
then
    if [[ $FOREMAN_USE_THIN = 1 ]]
    then
        FOREMAN_PID=${FOREMAN_HOME}/tmp/pids/thin.*.pid
    else
        FOREMAN_PID=${FOREMAN_HOME}/tmp/pids/server.pid
    fi
fi

start() {
    echo -n $"Starting $prog: "
    if [[ $FOREMAN_USE_THIN = 1 ]]
    then
        $THIN start --user ${FOREMAN_USER} \
            --environment $FOREMAN_ENV \
            --group ${FOREMAN_USER} \
            --config /etc/foreman/thin.yml \
            --rackup "${FOREMAN_HOME}/config.ru"
    else
        cd ${FOREMAN_HOME}
        daemon --user ${FOREMAN_USER} /usr/bin/ruby193-ruby ${FOREMAN_HOME}/script/rails s -p ${FOREMAN_PORT} -e ${FOREMAN_ENV} -d ${FOREMAN_EXTRA_ARGS} > /dev/null
    fi
    RETVAL=$?
    if [ $RETVAL = 0 ]
    then
        echo_success
        touch /var/lock/subsys/foreman
    else
        echo_failure
    fi

    echo
    return $RETVAL
}
stop() {
    echo -n $"Stopping $prog: "
    RETVAL=0
    for PID in $FOREMAN_PID
    do
        if [ -f ${PID} ]; then
            killproc -p ${PID}
            RESULT=$? && [[ $RETVAL = 0 ]] && RETVAL=$RESULT
        else
            echo -n $"Foreman was not running.";
            failure $"Foreman was not running.";
            echo
            RETVAL=1
        fi
    done
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/foreman
    return $RETVAL
}

restart() {
    if [ ${FOREMAN_USE_PASSENGER} = 1 ]
    then
        railsrestart
        RETVAL=$?
    else
        stop
        start
        RETVAL=$?
    fi
}

railsrestart() {
    echo -n $"Restarting foreman rails app: "
    touch "${FOREMAN_HOME}/tmp/restart.txt"
    RETVAL=$?
    if [ $RETVAL = 0 ]
    then
        echo_success
    else
        echo_failure
    fi

    echo
    return $RETVAL
}

# See how we were called.
case "$1" in
    start|stop)
        if [ ${FOREMAN_USE_PASSENGER} = 1 ]
        then
            echo -n "Foreman is running under passenger"
            echo_passed
            echo
        else
            $1
        fi
        RETVAL=$?
    ;;
    restart)
        restart
    ;;
    status)
        echo -n "Foreman"
        if [ ${FOREMAN_USE_PASSENGER} = 1 ]
        then
            echo -n " is running under passenger"
            echo_passed
            echo
            RETVAL=1
        else
            RETVAL=1
            for PID in $FOREMAN_PID
            do
                status -p $PID
                RETURN=$? && [ "$RETVAL" != 0 ] && RETVAL=$RETURN
            done
        fi
    ;;
    condrestart)
        if [ -e /var/lock/subsys/foreman ]; then
            restart
            RETVAL=$?
        else
            RETVAL=0
        fi
        ;;

    *)
        echo $"Usage: $prog {start|stop|restart|condrestart}"
        exit 1
esac

exit $RETVAL
