#!/bin/bash

CMD=$1
NOHUP=${NOHUP:=$(which nohup)}
PS=${PS:=$(which ps)}

# default java
JAVA_CMD=${JAVA_CMD:=$(which java)}

get_pid() {
    cat "${RADIO_PID}" 2> /dev/null
}

pid_running() {
    kill -0 $1 2> /dev/null
}

die() {
    echo $*
    exit 1
}

if [ -n "$JAVA_HOME" ]
then
    # try to use $JAVA_HOME
    if [ -x "$JAVA_HOME"/bin/java ]
    then
        JAVA_CMD="$JAVA_HOME"/bin/java
    else
        die "$JAVA_HOME"/bin/java is not executable
    fi
fi

# resolve links - $0 may be a softlink
RADIOCTL="$0"

while [ -h "$RADIOCTL" ]; do
    ls=$(ls -ld "$RADIOCTL")
    link=$(expr "$ls" : '.*-> \(.*\)$')
    if expr "$link" : '/.*' > /dev/null; then
        RADIOCTL="$link"
    else
        RADIOCTL=$(dirname "$RADIOCTL")/"$link"
    fi
done

# take variables from environment if set
RADIOCTL_DIR=${RADIOCTL_DIR:=$(dirname "$RADIOCTL")}
RADIO_JAR=${RADIO_JAR:=graylog.jar}
RADIO_CONF=${RADIO_CONF:=/etc/graylog/radio/radio.conf}
RADIO_PID=${RADIO_PID:=/tmp/graylog-radio.pid}
LOG_FILE=${LOG_FILE:=log/graylog-radio.log}
LOG4J=${LOG4J:=}
DEFAULT_JAVA_OPTS="-Djava.library.path=${RADIOCTL_DIR}/../lib/sigar -Xms1g -Xmx1g -XX:NewRatio=1 -XX:PermSize=128m -XX:MaxPermSize=256m -server -XX:+ResizeTLAB -XX:+UseConcMarkSweepGC -XX:+CMSConcurrentMTEnabled -XX:+CMSClassUnloadingEnabled -XX:+UseParNewGC -XX:-OmitStackTraceInFastThrow"
JAVA_OPTS="${JAVA_OPTS:="$DEFAULT_JAVA_OPTS"}"

start() {
    echo "Starting graylog-radio ..."
    cd "$RADIOCTL_DIR/.."
    "${NOHUP}" "${JAVA_CMD}" ${JAVA_OPTS} ${LOG4J} -jar "${RADIO_JAR}" radio -f "${RADIO_CONF}" -p "${RADIO_PID}" >> "${LOG_FILE}" 2>> "${LOG_FILE}" &
}

run() {
    echo "Running graylog-radio ..."
    cd "$RADIOCTL_DIR/.."
    exec "${JAVA_CMD}" ${JAVA_OPTS} ${LOG4J} -jar "${RADIO_JAR}" radio -f "${RADIO_CONF}" -p "${RADIO_PID}"
}

stop() {
    if [ ! -f "${RADIO_PID}" ]; then
      die "Not stopping. PID file not found: ${RADIO_PID}"
    fi

    PID=$(get_pid)

    echo "Stopping graylog-radio ($PID) ..."
    echo "Waiting for graylog-radio to halt."

    kill $PID

    while "$PS" -p $PID > /dev/null; do sleep 1; done;
    rm -f "${RADIO_PID}"

    echo "graylog-radio stopped"
}

restart() {
    echo "Restarting graylog-radio ..."
    stop
    start
}

status() {
    PID=$(get_pid)
    if [ ! -z $PID ]; then
        if pid_running $PID; then
            echo "graylog-radio running with PID ${PID}"
            return 0
        else
            rm "${RADIO_PID}"
            die "Removed stale PID file ${RADIO_PID} with ${PID}."
        fi
    fi

    die "graylog-radio not running"
}

case "$CMD" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status)
        status
        ;;
    run)
        run
        ;;
    *)
        echo "Usage $0 {start|stop|restart|status|run}"
esac
