#!/bin/bash
# -----------------------------------------------------------------------------
# Launches Buck daemon if not already running and requests Buck task execution.
# -----------------------------------------------------------------------------

BUCK_DAEMON=$1
TASK=${2:-unspecified}
DATA=${3}

# TODO: Figure out how to parametrize better
BUCK_PROPS="-Dcheckstyle.config=$4 -Dcheckstyle.suppressions=$5"

PORT_FILE="$1.port"

function ppid() {
    ps -p ${1:-$$} -o ppid= -o pid= -o comm=
}

function buck_pid() {
    BUCK_PID=($(ppid))
    while [ ${BUCK_PID[0]} -ne 0 ]; do
        BUCK_PID=($(ppid $BUCK_PID))
        if [ "${BUCK_PID[2]}" == "buck" ]; then
            # use parent PID of buck
            echo ${BUCK_PID[0]}
            return
        fi
        if [ "${BUCK_PID[2]}" == "buckd" ] ||
           [[ "${BUCK_PID[2]}" == *"python"* ]]; then
            # use PID of buckd or python
            echo ${BUCK_PID[1]}
            return
        fi
    done
    # fallback last read PID
    echo ${BUCK_PID[1]}
}

function port() {
    cat $PORT_FILE 2>/dev/null || echo 0
}

function check_socket() {
    printf "\n" | nc localhost $(port) 2>/dev/null
    return $?
}

# check to see if buck daemon is running; if not, start it
if ! check_socket; then
    # Starting buck daemon...
    #FIXME change to /dev/null if/when we are confident
    nohup java $BUCK_PROPS -jar $BUCK_DAEMON $PORT_FILE $(buck_pid) >>/tmp/buck.daemon 2>&1 &

    TRIES=20
    i=0
    # Wait for buck daemon to start for 2 seconds
    while [ $i -lt $TRIES ]; do
        if check_socket; then
            CONNECTED=true
            break
        fi
        let i=i+1
        sleep 0.1
    done
    if [ -z "$CONNECTED" ]; then
        echo "Failed to start buck daemon"
        exit 3
    fi
fi

# run the actual buck daemon client
OUT=$((printf "%s\n" $TASK; cat $DATA) | nc localhost $(port))
if [ $? -ne 0 ]; then
    echo "Error connecting to buck daemon server"
    exit 2
fi
if [ -n "$OUT" ]; then
    printf "$OUT"
    exit 1
fi