#!/bin/sh

# PROVIDE: couchdb3
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
# to enable this service:
#
# couchdb3_enable (bool):       Set to NO by default.
#                               Set it to YES to enable couchdb.

. /etc/rc.subr

name=%%PORTNAME%%
rcvar=%%PORTNAME%%_enable

start_cmd="${name}_start"
stop_cmd="${name}_stop"
status_cmd="${name}_status"

load_rc_config $name

: ${%%PORTNAME%%_enable:="NO"}
: ${%%PORTNAME%%_user="couchdb"}
: ${%%PORTNAME%%_erl_flags="-couch_ini %%APPDIR%%/etc/default.ini %%ETCDIR%%/local.ini"}
: ${%%PORTNAME%%_chdir="/var/db/%%PORTNAME%%"}

command="%%PREFIX%%/libexec/%%PORTNAME%%/bin/couchdb"

pidfile="/var/run/${name}.pid"
daemonpidfile="/var/run/${name}-daemon.pid"

%%PORTNAME%%_start()
{
    # chdir manually as overriding _start() blocks rc.subr defaults
    cd "${%%PORTNAME%%_chdir}"
    /usr/sbin/daemon -p ${pidfile} \
        -P ${daemonpidfile} \
        -t ${name} \
        -u ${%%PORTNAME%%_user} \
        env ERL_FLAGS="${erl_flags}" \
        HOME=/var/run/%%PORTNAME%% \
        ERL_CRASH_DUMP=/var/run/%%PORTNAME%%/erl_crash.dump \
        COUCHDB_FAUXTON_DOCROOT=%%WWWDIR%% \
        COUCHDB_ARGS_FILE=%%PREFIX%%/etc/couchdb3/vm.args \
        COUCHDB_INI_FILES='%%PREFIX%%/libexec/couchdb3/etc/default.ini %%PREFIX%%/etc/couchdb3/local.ini' \
        ${command}
}

%%PORTNAME%%_stop()
{
    echo -n "Stopping ${name}: "
    retval=0
    if ! status_quiet
    then
        echo "already stopped"
        return 1
    else
        %%PORTNAME%%_pids=$(/bin/pgrep -ifU ${%%PORTNAME%%_user} ${name})
        kill ${%%PORTNAME%%_pids}
        wait_for_pids ${%%PORTNAME%%_pids}
        retval=$?
        echo "stopped"
    fi
    return $retval
}

%%PORTNAME%%_status()
{
    /bin/pgrep -ifU ${%%PORTNAME%%_user} ${name}  > /dev/null && status="$?" || status="$?"
    if [ "${status}" = 0 ]; then
        echo "${name} is running"
        return 0
    elif [ "${status}" = 4 ]; then
        echo "could not access PID file for ${name}"
        return ${status}
    else
        echo "${name} is not running"
        return ${status}
    fi
}

status_quiet()
{
    %%PORTNAME%%_status >/dev/null 2>&1
}

run_rc_command $1

