#!/bin/sh

### BEGIN INIT INFO
# Provides:	  uwsgi
# Required-Start:    $local_fs $remote_fs $network $syslog $named
# Required-Stop:     $local_fs $remote_fs $network $syslog $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the uwsgi service
# Description:       starts uwsgi using start-stop-daemon
### END INIT INFO

# Copyright 2020 Logic and Optimization Group, Universitat de Lleida. All Rights Reserved.

PATH=/opt/conda/bin:/opt/conda/condabin:/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
DAEMON=/opt/conda/bin/uwsgi
NAME=uwsgi
DESC=uwsgi

test -x $DAEMON || exit 0
[ -f /opt/serv_env_vars ] && . /opt/serv_env_vars

. /lib/init/vars.sh
. /lib/lsb/init-functions

if [ -z "$PID" ]; then
    PID=/run/uwsgi.pid
fi

chown_and_chmod_pidfile()
{
  local PIDFILE="$*"
  local INTERVAL_START
  local INTERVAL_END
  local WAITING=2 # seconds

  INTERVAL_START="$(date +%s)"
  INTERVAL_END="$(date +%s)"

  # Wait until daemon getting to create pidfile.
  while [ ! -e "$PIDFILE" ]; do
    INTERVAL_END="$(date +%s)"
    if [ "$((INTERVAL_END-INTERVAL_START))" -gt "$WAITING" ]; then
      return
    fi
    sleep 0.05
  done

  chown root:root "$PIDFILE"
  chmod 644 "$PIDFILE"
}


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

    start-stop-daemon --start --quiet \
        --pidfile "$PID" \
        --exec "$DAEMON" \
            -- --ini "/sentinelApp/wsSentinel_uwsgi.ini"
        1> /dev/null 2>&1 \
        || return 2

    chown_and_chmod_pidfile "$PID"

    start-stop-daemon --start --quiet \
        --pidfile "$PID" \
        --exec "$DAEMON" \
        --test > /dev/null \
        && return 2

    return 0
}

stop_uwsgi() {
    start-stop-daemon --stop --quiet \
        --retry=QUIT/30/KILL/5 \
        --pidfile "$PID" \
        --name "$NAME"

    RETVAL="$?"
    [ "$RETVAL" = 2 ] && return 2

    return "$RETVAL"
}

reload_uwsgi() {
    start-stop-daemon --stop --quiet \
        --signal=HUP \
        --pidfile "$PID" \
        --name "$NAME"

    RETVAL="$?"

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

    return "$RETVAL"
}

forcereload_uwsgi() {
    start-stop-daemon --stop --quiet \
        --signal=TERM \
        --pidfile "$PID" \
        --name "$NAME"

    RETVAL="$?"

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

    return "$RETVAL"
}

WHAT=$1
shift
case "$WHAT" in
    start)
        log_daemon_msg "Starting $DESC" "$NAME"
        start_uwsgi
        case "$?" in
            0|1) log_end_msg 0 ;;
            2)   log_end_msg 1 ;;
        esac
    ;;

    stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        stop_uwsgi
        case "$?" in
            0|1) log_end_msg 0 ;;
            2)   log_end_msg 1 ;;
        esac
    ;;

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

    reload)
        log_daemon_msg "Reloading $DESC" "$NAME"
        reload_uwsgi
        case "$?" in
            0|1) log_end_msg 0 ;;
            2)   log_end_msg 1 ;;
        esac
    ;;

    force-reload)
        log_daemon_msg "Force-Reloading $DESC" "$NAME"
        forcereload_uwsgi
        case "$?" in
            0|1) log_end_msg 0 ;;
            2)   log_end_msg 1 ;;
        esac
    ;;

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