#!/bin/sh

### BEGIN INIT INFO
# Provides:          cloudkeeper-one
# Required-Start:    $local_fs $remote_fs $network $syslog $named
# Required-Stop:     $local_fs $remote_fs $network $syslog $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop cloudkeeper-one GRPC server
# Description:       Start the GRPC server for cloudkeeper-one.
### END INIT INFO

run_dir="/var/run/cloudkeeper-one"
lock_dir="/var/lock/cloudkeeper-one"
log_dir="/var/log/cloudkeeper-one"
conf_dir="/etc/cloudkeeper-one"

omnibus_base_dir="/opt/cloudkeeper-one"
embedded_base_dir="$omnibus_base_dir/embedded"
embedded_ruby_version=`$embedded_base_dir/bin/ruby -e "puts RUBY_VERSION.split('.').fill('0',2..2).join('.')"`
embedded_cloudkeeper_one_version=`$omnibus_base_dir/bin/cloudkeeper-one version`
embedded_cloudkeeper_one_dir="$embedded_base_dir/lib/ruby/gems/$embedded_ruby_version/gems/cloudkeeper-one-$embedded_cloudkeeper_one_version"

user="cloudkeeper-one"
cmd="$omnibus_base_dir/bin/cloudkeeper-one"

name=`basename $0`
pid_file="$run_dir/cloudkeeper-one.init.pid"
stdout_log="$log_dir/cloudkeeper-one.init.stdout.log"
stderr_log="$log_dir/cloudkeeper-one.init.stderr.log"

retval=0

get_pid() {
    cat "$pid_file"
}

setup_dirs() {
    mkdir -p "$run_dir" "$lock_dir"
    chown "$user":"$user" "$run_dir" "$lock_dir"
}

is_running() {
    [ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1
}

start() {
    if is_running; then
        echo "Already started"
    else
        echo "Starting $name ..."
        setup_dirs

        cd "$run_dir"
        sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &

        echo $! > "$pid_file"
        if ! is_running; then
            echo "Unable to start, see $stdout_log and $stderr_log"
            retval=1
        else
            echo "Started"
        fi
    fi
}

stop() {
    if is_running; then
        echo "Stopping $name ..."

        kill -s TERM `get_pid`
        for i in $(seq 1 15); do
            if ! is_running; then
                break
            fi
            echo -n "."
            sleep 1
        done

        echo
        if is_running; then
            echo "Not stopped; may still be shutting down or shutdown may have failed"
            kill -s KILL `get_pid`
            retval=1
        else
            echo "Stopped"
            if [ -f "$pid_file" ]; then
                rm "$pid_file"
            fi
        fi
    else
        echo "Not running"
        retval=1
    fi
}

restart(){
    stop

    if is_running; then
        echo "Unable to stop, will not attempt to start"
        retval=1
    else
        start
    fi
}

case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    restart)
    restart
    ;;
    status)
    if is_running; then
        echo "Running"
    else
        echo "Stopped"
        retval=3
    fi
    ;;
    *)
    echo "Usage: $name {start|stop|restart|status}"
    retval=1
    ;;
esac

exit $retval
