#! /bin/sh
### BEGIN INIT INFO
# Provides:          supervisord-initscript
# Required-Start:    $remote_fs $syslog $postgresql $rabbitmq-server
# Required-Stop:     $remote_fs $syslog
# Should-Start:      $nginx
# Default-Start:     30 2 3 4 5
# Default-Stop:      70 0 1 6
# Short-Description: supervisord for KarmaWorld within a virtualenv
# Description:       supervisord for KarmaWorld within a virtualenv
### END INIT INFO

# Modified by Bryan Bonvallet for FinalsClub Foundation
# Original Author: Nicolas Kuttler
# Original Script:
# http://kuttler.eu/code/debian-init-script-virtualenv-gunicorn-django/
#
# Enable with update-rc.d gunicorn-example start 30 2 3 4 5 . stop 70 0 1 6 .
# (parameters might not be necessary, test)

# Do NOT "set -e"

PROJECT=/var/www/karmaworld
VIRTUALENV=$PROJECT/venv
CONF=$PROJECT/confs/prod/supervisord.conf
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/bin:/usr/bin
USER=vagrant
GROUP=vagrant
# I am lazy and just call the init script gunicorn-project
NAME=`basename $0`
DESC=$NAME
PIDFILE=$PROJECT/var/run/$NAME.pid
CMD="supervisord -c $CONF"

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start() {
  # Return
  #   0 if daemon has been started
  #   1 if daemon was already running
  #   2 if daemon could not be started
  if [ -e $PIDFILE ]; then
    return 1
  fi
  cd $PROJECT
  . $VIRTUALENV/bin/activate
  $CMD
  if [ $? = 0 ]; then
    return 0
  else
    return 2
  fi
}

#
# Function that stops the daemon/service
#
do_stop() {
  # Return
  #   0 if daemon has been stopped
  #   1 if daemon was already stopped
  #   2 if daemon could not be stopped
  #   other if a failure occurred
  if [ -f $PIDFILE ]; then
    PID=`cat $PIDFILE`
    rm $PIDFILE
    kill -15 $PID
    if [ $? = 0 ]; then
      return 0
    else
      return 2
    fi
  else
    return 1
  fi
}

do_reload() {
  if [ -f $PIDFILE ]; then
    PID=`cat $PIDFILE`
    kill -HUP $PID
    return $?
  fi
  return 2
}

case "$1" in
  start)
  [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
  do_start
  case "$?" in
    0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
  esac
  ;;
  stop)
  [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
  do_stop
  case "$?" in
    0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
  esac
  ;;
  restart)
  log_daemon_msg "Restarting $DESC" "$NAME"
  do_stop
  case "$?" in
    0|1)
    do_start
    case "$?" in
      0) log_end_msg 0 ;;
      1) log_end_msg 1 ;; # Old process is still running
      *) log_end_msg 1 ;; # Failed to start
    esac
    ;;
    *)
      # Failed to stop
    log_end_msg 1
    ;;
  esac
  ;;
  reload)
  log_daemon_msg "Reloading $DESC" "$NAME"
  do_reload
  case "$?" in
    0) log_end_msg 0 ;;
    *) log_end_msg 1 ;;
  esac
  ;;
  *)
  echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
  exit 3
  ;;
esac

:
