#!/bin/sh
### BEGIN INIT INFO
# Provides:          mailman3-web
# Required-Start:    $network $local_fs $remote_fs $syslog
# Required-Stop:     $remote_fs
# Should-Start:      postgresql
# Should-Stop:       postgresql
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Mailman3-web uWSGI service
# Description:       Mailman3-web uWSGI service
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME="mailman3-web"
DESC="Mailman3-web uWSGI service"
SCRIPTNAME=/etc/init.d/mailman3-web
DAEMON=/usr/bin/uwsgi
PIDFILE="/run/mailman3-web/${NAME}.pid"
LOGFILE="/var/log/mailman3/web/mailman-web.log"
DAEMON_ARGS="--ini /etc/mailman3/uwsgi.ini --pidfile ${PIDFILE} --daemonize ${LOGFILE}"

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

if [ ! -d /run/mailman3/web ]; then
    mkdir -p /run/mailman3/web
fi

chown www-data:www-data /run/mailman3/web

do_start () {
    start-stop-daemon --start --quiet --pidfile $PIDFILE \
        --exec $DAEMON --test >/dev/null|| return 1

    start-stop-daemon --start --quiet --pidfile $PIDFILE \
        --exec $DAEMON -- $DAEMON_ARGS || return 2
}

do_stop () {
    start-stop-daemon --stop --quiet --oknodo --retry=QUIT/30/KILL/5 \
        --pidfile $PIDFILE --exec $DAEMON
}

do_reload () {
    start-stop-daemon --stop --quiet --signal=HUP \
        --pidfile $PIDFILE --exec $DAEMON

    RETVAL="$?"

    # There is no such process, nothing to reload!
    [ "$RETVAL" = 1 ] && RETVAL=3

    return "$RETVAL"
}

do_force_reload() {
    start-stop-daemon --stop --quiet \
        --signal=TERM \
        --pidfile $PIDFILE \
        --exec $DAEMON

    RETVAL="$?"

    # There is no such process, nothing to reload!
    [ "$RETVAL" = 1 ] && RETVAL=3

    return "$RETVAL"
}

case "$1" in
    start)
        log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        log_end_msg "$?"
    ;;

    stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        log_end_msg "$?"
    ;;

    status)
        status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" \
            && exit 0 || exit $?
    ;;

    reload)
        log_daemon_msg "Reloading $DESC" "$NAME"
        do_reload
        log_end_msg "$?"
    ;;

    force-reload)
        log_daemon_msg "Forced reloading $DESC" "$NAME"
        do_force_reload
        log_end_msg "$RETVAL"
    ;;

    restart)
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
            0)
                do_start
                log_end_msg "$?"
            ;;
            *)
                # Failed to stop
                log_end_msg 1
            ;;
        esac
    ;;

    *)
        echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload}" >&2
        exit 3
    ;;
esac
