#!/bin/bash

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

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

RETVAL=1
USER=${BIGCOUCH_USER:-bigcouch}
BIN_FILE=${BIGCOUCH_BIN:-/opt/bigcouch/bin/bigcouch}
PID_FILE=${BIGCOUCH_PID:-/var/run/bigcouch/kazoo-bigcouch.pid}
export HOME=${BIGCOUCH_HOME:-/srv}

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

prepare() {
	mkdir -p ${HOME}
	chown -R ${USER} ${HOME}
	mkdir -p /var/log/bigcouch
	chown -R ${USER} /var/log/bigcouch
	mkdir -p /var/run/bigcouch
	chown -R ${USER} /var/run/bigcouch
	if [ -e ${PID_FILE} ]; then
		rm -rf ${PID_FILE}
	fi 
	RETVAL=$?
}

start() {
	cd ${HOME}

	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 BigCouch!"
		RETVAL=1
	fi
}

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

restart() {
	stop
	start
}

status() {
	for i in `pidof ${BEAM}`; do
		if cat /proc/$i/cmdline | grep -Eq "name[^\-]+bigcouch"; then
			echo "BigCouch (pid $i) is running..."
			if which curl &>/dev/null; then
				curl localhost:5984/_membership
			fi
			RETVAL=0
		fi
	done
	if [ ${RETVAL} -eq 1 ]; then
		echo "BigCouch is not running!"
	fi
}

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

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

exit ${RETVAL}

