#!/bin/bash

if [ -f /etc/default/kazoo ]; then
	. /etc/default/kazoo
fi

RETVAL=1
NAME=kazoo-ecallmgr
USER=${KAZOO_USER:-kazoo}
BIN_FILE=${KAZOO_BIN:-/opt/kazoo/bin/kazoo}
PID_FILE=${KAZOO_PID:-/var/run/kazoo/${NAME}.pid}
export HOME=${KAZOO_ROOT:-/opt/kazoo}
export VMARGS_PATH=${KAZOO_VMARGS:-/etc/kazoo/core/vm.args}

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

if [ "${NAME}" == "kazoo-applications" ]; then
	NAME="kazoo_apps"
else
	NAME=${NAME#*-}
fi

export NAME_ARG="-name ${NAME}"

# Detect core count
CORES=`grep -E "^processor" /proc/cpuinfo |wc -l`
if [ "${CORES}" = "1" ]; then
        BEAM=beam
else
        BEAM=beam.smp
fi

prepare() {
	chown -R ${USER} /opt/kazoo /opt/kazoo/.*
	mkdir -p /tmp/erl_pipes/${NAME}
	chown -R ${USER} /tmp/erl_pipes/${NAME}
	mkdir -p /var/log/kazoo
	chown -R ${USER} /var/log/kazoo
	mkdir -p /var/run/kazoo
	chown -R ${USER} /var/run/kazoo
	if [ -e ${PID_FILE} ]; then
		rm -rf ${PID_FILE}
	fi
	RETVAL=$?
}

start() {
	cd ${HOME}

	if sudo -E -u ${USER} ${BIN_FILE} pid > /dev/null 2>&1; then
		echo "Kazoo ${NAME} is already running!"
		return
	fi

	export CODE_LOADING_MODE=interactive
	set -- ${BIN_FILE} "$@"
	if [ "$(whoami)" == "${USER}" ]; then
		exec "$@"
	else
		runuser -s /bin/bash ${USER} -c "$*"
	fi
	RETVAL=$?

	if [ ${RETVAL} -ne 0 ]; then
		echo "Failed to start Kazoo ${NAME}!"
		RETVAL=1
	fi
}

stop() {
        for i in `pidof ${BEAM}`; do
                if cat /proc/$i/cmdline | grep -Eq "name[^\-]+${NAME}"; then
                        kill $i
                        RETVAL=$?
                fi
        done
}

restart() {
	stop
	start
}

status() {
	cd ${HOME}
        for i in `pidof ${BEAM}`; do
                if cat /proc/$i/cmdline | grep -Eq "name[^\-]+${NAME}"; then
			set_cookie_arg
			/usr/sbin/sup -n ${NAME} kz_nodes status
			RETVAL=$?
		fi
	done
        if [ ${RETVAL} -eq 1 ]; then
                echo "${NAME} is not running!"
        fi
}

connect() {
	cd ${HOME}
        for i in `pidof ${BEAM}`; do
                if cat /proc/$i/cmdline | grep -Eq "name[^\-]+${NAME}"; then
			set_cookie_arg
			sudo -E -u ${USER} ${BIN_FILE} remote_console
			RETVAL=$?
		fi
	done
        if [ ${RETVAL} -eq 1 ]; then
                echo "${NAME} is not running!"
        fi
}

attach() {
	cd ${HOME}
        for i in `pidof ${BEAM}`; do
                if cat /proc/$i/cmdline | grep -Eq "name[^\-]+${NAME}"; then
			set_cookie_arg
			echo "WARNING: You are now directly attached to the running ${NAME} Erlang node."
			echo "   It is safer to use: $0 connect"
			sudo -E -u ${USER} ${BIN_FILE} attach
			RETVAL=$?
		fi
	done
        if [ ${RETVAL} -eq 1 ]; then
                echo "${NAME} is not running!"
        fi
}

ping() {
	cd ${HOME}
        for i in `pidof ${BEAM}`; do
                if cat /proc/$i/cmdline | grep -Eq "name[^\-]+${NAME}"; then
			set_cookie_arg
			sudo -E -u ${USER} ${BIN_FILE} ping
			RETVAL=$?
		fi
	done
        if [ ${RETVAL} -eq 1 ]; then
                echo "${NAME} is not running!"
        fi
}

pid() {
	cd ${HOME}
        for i in `pidof ${BEAM}`; do
                if cat /proc/$i/cmdline | grep -Eq "name[^\-]+${NAME}"; then
			echo $i
                        RETVAL=0
                fi
        done
        if [ ${RETVAL} -eq 1 ]; then
                echo "${NAME} is not running!"
        fi
}

set_cookie_arg() {
	COOKIE=`/usr/sbin/sup -n ${NAME} erlang get_cookie | sed "s|'||g"`
	export COOKIE_ARG="-setcookie ${COOKIE}"
}

case "$1" in
	prepare)
		prepare
		;;
	background)
		start "start"
		;;
	start)
		start "foreground"
		;;
	stop)
		stop
		;;
	restart)
		restart
		;;
	status)
		status
		;;
	connect)
		connect
		;;
	attach)
		attach
		;;
	ping)
		ping
		;;
	pid)
		pid
		;;
	*)
		echo "Usage: $0 (prepare|start|background|stop|restart|status|connect|attach|ping|pid)"
esac

exit ${RETVAL}
