#! /bin/bash
# initscript for buildbot

### BEGIN INIT INFO
# Provides:          buildbot
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DESC="BuildBot"

USER=buildbot

DAEMON=/usr/bin/buildbot
DNAME=buildbot
PROCNAME=$NAME

[ -r /etc/default/buildbot ] && . /etc/default/buildbot

test -x ${DAEMON} || exit 0

. /lib/lsb/init-functions

check_config()
{
    errors=0
    for i in ${BB_NUMBER[@]}; do
	[ $i -ge 0 ] || continue
	if [ -z "${BB_NAME[$i]}" ]; then
	    echo >&2 "buildbot $i: no name"
	    errors=$(($errors+1))
	fi
	if [ -z "${BB_USER[$i]}" ]; then
	    echo >&2 "buildbot $i: no user"
	    errors=$(($errors+1))
	elif ! getent passwd ${BB_USER[$i]} >/dev/null; then
	    echo >&2 "buildbot $i: unknown user ${BB_USER[$i]}"
	    errors=$(($errors+1))
	fi
	if [ ! -d "${BB_BASEDIR[$i]}" ]; then
	    echo >&2 "buildbot $i: no base directory ${BB_BASEDIR[$i]}"
	    errors=$(($errors+1))
	fi
    done
    [ $errors -eq 0 ] || exit 1
}

check_config

start_buildbot() {
    NAME="$1"
    USER="$2"
    BASEDIR="$3"
    PREFIXCMD="$4"
    OPTIONS="$5"

    #START="--start --quiet --exec ${DAEMON} --name ${NAME} --pidfile ${BASEDIR}/twistd.pid"
    #[ -n "${USER}" ] && START="${START} --chuid ${USER}"
    #START="${START} -- start ${BASEDIR} ${OPTIONS}"
    #${PREFIXCMD} start-stop-daemon ${START} >/dev/null 2>&1
    ${PREFIXCMD} su -s /bin/sh -c "${DAEMON} start ${BASEDIR} ${OPTIONS}" - ${USER}
    return $?
}

stop_buildbot() {
    NAME="$1"
    USER="$2"
    BASEDIR="$3"
    PREFIXCMD="$4"

    ${PREFIXCMD} su -s /bin/sh -c "${DAEMON} stop ${BASEDIR}" - ${USER}
    return $?
}

reload_buildbot() {
    NAME="$1"
    USER="$2"
    BASEDIR="$3"
    PREFIXCMD="$4"

    if test -f ${BASEDIR}/master.cfg; then
	${PREFIXCMD} su -s /bin/sh -c "${DAEMON} sighup ${BASEDIR}" - ${USER}
    else
	echo -n " not sighup-ing slave"
    fi
    return $?
}

do_start () {
    errors=0
    for i in ${BB_NUMBER[@]}; do
	[ $i -ge 0 ] || continue
	log_daemon_msg "Starting buildbot ${BB_NAME[$i]}"
	if start_buildbot "${BB_NAME[$i]}" "${BB_USER[$i]}" "${BB_BASEDIR[$i]}" \
	    "${BB_PREFIXCMD[$i]}" "${BB_OPTIONS[$i]}"
	then
	    log_end_msg 0
	else
	    log_end_msg 1
	    errors=$(($errors+1))
	fi
    done
    return $errors
}

do_stop () {
    errors=0
    for i in ${BB_NUMBER[@]}; do
	[ $i -ge 0 ] || continue
	log_daemon_msg "Stopping buildbot ${BB_NAME[$i]}"
	if stop_buildbot "${BB_NAME[$i]}" "${BB_USER[$i]}" "${BB_BASEDIR[$i]}" \
	    "${BB_PREFIXCMD[$i]}"
	then
	    log_end_msg 0
	else
	    log_end_msg 1
	    errors=$(($errors+1))
	fi
    done
    return $errors
}

do_reload () {
    errors=0
    for i in ${BB_NUMBER[@]}; do
	[ $i -ge 0 ] || continue
	log_daemon_msg "Reload buildbot ${BB_NAME[$i]}"
	if reload_buildbot "${BB_NAME[$i]}" "${BB_USER[$i]}" "${BB_BASEDIR[$i]}" \
	    "${BB_PREFIXCMD[$i]}"
	then
	    log_end_msg 0
	else
	    log_end_msg 1
	    errors=$(($errors+1))
	fi
    done
    return $errors
}

do_restart () {
    errors=0
    for i in ${BB_NUMBER[@]}; do
	[ $i -ge 0 ] || continue
	log_daemon_msg "Restarting buildbot ${BB_NAME[$i]}"
	stop_buildbot "${BB_NAME[$i]}" "${BB_USER[$i]}" "${BB_BASEDIR[$i]}" \
	    "${BB_PREFIXCMD[$i]}" || true
	if start_buildbot "${BB_NAME[$i]}" "${BB_USER[$i]}" "${BB_BASEDIR[$i]}" \
	    "${BB_PREFIXCMD[$i]}" "${BB_OPTIONS[$i]}"
	then
	    log_end_msg 0
	else
	    log_end_msg 1
	    errors=$(($errors+1))
	fi
    done
    return $errors
}

case "$1" in
  start)
  	do_start
  	exit $?
	;;
  stop)
  	do_stop
  	exit $?
	;;
  reload)
  	do_reload
  	exit $?
	;;
  restart|force-reload)
  	do_restart
  	exit $?
	;;
  *)
	log_warning_msg "Usage: $0 {start|stop|restart|reload|force-reload}"
	exit 1
	;;
esac

exit 0
