#!/bin/sh
#
# PROVIDE: gunicorn
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf to enable gunicorn:
#  gunicorn_enable (bool):  Set to "NO" by default.
#			    Set it to "YES" to enable gunicorn.
#
# gunicorn_config (str):    Path to gunicorn config file.
#
# gunicorn_user (str):      User to run gunicorn as.
#
# gunicorn_group (str):     Group to run gunicorn as.
#
# gunicorn_profiles (str):  Set to "" by default.
#                           Define your profiles here.

. /etc/rc.subr

name=gunicorn
rcvar=gunicorn_enable

# set defaults

load_rc_config $name

: ${gunicorn_enable:=NO}
: ${gunicorn_config:=/usr/local/etc/gunicorn/gunicorn.conf.py}
: ${gunicorn_user:=gunicorn}
: ${gunicorn_group:=gunicorn}

_pidprefix="/var/run/gunicorn"
pidfile="${_pidprefix}/${name}.pid"
cpidfile="${_pidprefix}/${name}-worker.pid"
command=/usr/sbin/daemon
command_args="-P ${pidfile} -p ${cpidfile} -f -ST ${name} /usr/local/bin/gunicorn -c ${gunicorn_config}"
required_files="${gunicorn_config}"
start_precmd="gunicorn_precmd"

if [ -n "$2" ]; then
	profile="$2"
	if [ "x${gunicorn_profiles}" != "x" ]; then
		pidfile="${_pidprefix}/gunicorn-${profile}.pid"
		cpidfile="${_pidprefix}/gunicorn-${profile}-worker.pid"
		eval gunicorn_config="\${gunicorn_${profile}_config:-}"
		if [ "x${gunicorn_config}" = "x" ]; then
			echo "You must define a configuration file (gunicorn_${profile}_config)"
			exit 1
		fi
		required_files="${gunicorn_config}"
		command_args="-P ${pidfile} -p ${cpidfile} -f -ST ${name} /usr/local/bin/gunicorn -c ${gunicorn_config}"
		eval gunicorn_enable="\${gunicorn_${profile}_enable:-${gunicorn_enable}}"
	else
		echo "$0: extra argument ignored"
	fi
else
	if [ "x${gunicorn_profiles}" != "x" -a "x$1" != "x" ]; then
		for profile in ${gunicorn_profiles}; do
			echo "===> gunicorn profile: ${profile}"
			/usr/local/etc/rc.d/gunicorn $1 ${profile}
			retcode="$?"
			if [ "0${retcode}" -ne 0 ]; then
				failed="${profile} (${retcode}) ${failed:-}"
			else
				success="${profile} ${success:-}"
			fi
		done
		exit 0
	fi
fi

gunicorn_precmd()
{
	install -o ${gunicorn_user} /dev/null ${pidfile}
	install -o ${gunicorn_user} /dev/null ${cpidfile}
}

run_rc_command "$1"
