#!/bin/sh

# Configuration settings for alignak_webui in /etc/rc.conf:
# $FreeBSD$
#
# PROVIDE: alignak_webui
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
# alignak_webui_enable (bool):
#   Default value: "NO"
#   Flag that determines whether Alignak WebUI is enabled.
#
# alignak_webui_wsgi (string):
#   Default value: /usr/local/share/alignak-webui/etc/alignak-webui.wsgi
#   Wsgi application for the Alignak WebUI
#
# alignak_webui_config (string):
#   Default value: /usr/local/share/alignak-webui/etc/settings.cfg
#   Configuration file for the Alignak WebUI
#
# alignak_webui_session_type (string):
#   Default value: file
#   User session storage type
#
# alignak_webui_session_data (string):
#   Default value: /tmp/${name}/sessions
#   Session data storage directory
#
# alignak_webui_backend (string):
#   Default value:
#   The Alignak backend URI. Defaults to empty to use the value defined in the configuration file.
#
# alignak_webui_ws (string):
#   Default value:
#   The Alignak Web service URI. Defaults to empty to use the value defined in the configuration file.
#
# alignak_webui_log (bool):
#   Set to "NO" by default.
#   Set it to "YES" to enable alignak_webui logging to file
#   Default output to /var/log/alignak_webui/alignak_webui.log
#
# alignak_webui_log_dir (string):
#   Default value: "/var/log/alignak_webui"
#   Log file directory.
#
# alignak_webui_log_file (string):
#   Default value: "${alignak_webui_log_dir}/${name}.log"
#   Log file name. Note that it is the uWsgi log file and it may be used by the UI, except if the
#   WebUI logger configuration is set differently (see the /usr/local/etc/logging.json file).
#
# alignak_webui_pid_dir (string):
#   Default value: "/var/run/alignak_webui"
#   Pid file directory.
#
# alignak_webui_pid_file (string):
#   Default value: "/var/run/alignak-webui/${name}.pid"
#   PID file name.
#
# alignak_webui_processes (integer):
#   Default value: 4
#   uWsgi workers count.
#
# alignak_webui_group (string):
#   Default value: "alignak"
#   Default group for the running uWsgi
#
# alignak_webui_user (string):
#   Default value: "alignak"
#   Default user for the running uWsgi
#
# alignak_webui_host (string):
#   Default value: "127.0.0.1"
#   Interface listened to.
#
# alignak_webui_port (integer):
#   Default value: 5001
#   Port listened to.
#
# alignak_webui_metrics (bool):
#   Set to "NO" by default.
#   Set it to "YES" to enable to make uWsgi send its metrics to a carbon instance.
#   Default carbon instance is 127.0.0.1:2003
#
# alignak_webui_carbon (string):
#   Default value: "127.0.0.1:2003"
#   Carbon instance interface. Use IP address because DNS resolution raises errors!
#

. /etc/rc.subr

name="alignak_webui"
rcvar="alignak_webui_enable"

load_rc_config "${name}"

: ${alignak_webui_enable="NO"}
: ${alignak_webui_wsgi="/usr/local/share/alignak-webui/etc/alignak-webui.wsgi"}
: ${alignak_webui_config="/usr/local/share/alignak-webui/etc/settings.cfg"}
: ${alignak_webui_backend=""}
: ${alignak_webui_ws=""}
: ${alignak_webui_session_type="file"}
: ${alignak_webui_session_data="/tmp/${name}/sessions"}
: ${alignak_webui_log="NO"}
: ${alignak_webui_log_dir="/var/log/${name}"}
: ${alignak_webui_log_file="${alignak_webui_log_dir}/${name}.log"}
: ${alignak_webui_pid_dir="/var/run/${name}"}
: ${alignak_webui_pid_file="${alignak_webui_pid_dir}/${name}.pid"}
: ${alignak_webui_processes="4"}
: ${alignak_webui_group="alignak"}
: ${alignak_webui_user="alignak"}
: ${alignak_webui_host="127.0.0.1"}
: ${alignak_webui_port="5001"}
: ${alignak_webui_metrics="NO"}
: ${alignak_webui_carbon="127.0.0.1:2003"}

if checkyesno alignak_webui_log; then
  alignak_webui_log_options="--logger file:${alignak_webui_log_file}"
fi

if checkyesno alignak_webui_metrics; then
  alignak_webui_metrics_options="--carbon ${alignak_webui_carbon}"
fi

command="/usr/local/bin/uwsgi"
command_args="--master --enable-threads --buffer-size 32768 --lazy-apps --daemonize /dev/null --wsgi-file ${alignak_webui_wsgi} --pidfile ${alignak_webui_pid_file} --http ${alignak_webui_host}:${alignak_webui_port} --processes ${alignak_webui_processes} --uid ${alignak_webui_user} --gid ${alignak_webui_group} ${alignak_webui_log_options} ${alignak_webui_metrics_options}"

# Alignak webui need to get ALIGNAK_WEBUI_CONFIGURATION_FILE for its configuration
export ALIGNAK_WEBUI_CONFIGURATION_FILE=${alignak_webui_config}
echo "Alignak WebUI configuration is: $ALIGNAK_WEBUI_CONFIGURATION_FILE"
if [ -n "${alignak_webui_backend}" ]; then
   export ALIGNAK_WEBUI_SESSION_TYPE=${alignak_webui_session_type}
   export ALIGNAK_WEBUI_SESSION_DATA=${alignak_webui_session_data}
   echo "Alignak WebUI session is: $ALIGNAK_WEBUI_SESSION_TYPE / $ALIGNAK_WEBUI_SESSION_DATA"
fi

if [ -n "${alignak_webui_backend}" ]; then
   export ALIGNAK_WEBUI_BACKEND=${alignak_webui_backend}
   echo "Alignak WebUI backend is: $ALIGNAK_WEBUI_BACKEND"
fi
if [ -n "${alignak_webui_ws}" ]; then
   export ALIGNAK_WEBUI_WS=${alignak_webui_ws}
   echo "Alignak WebUI Alignak WS is: $ALIGNAK_WEBUI_WS"
fi

stop_cmd="${name}_stop"
start_cmd="${name}_start"
reload_cmd="${name}_reload"
start_precmd="${name}_precmd"

required_files="${alignak_webui_wsgi}"

alignak_webui_precmd()
{
    /usr/bin/install -d -o ${alignak_webui_user} -g ${alignak_webui_group} -m 755 ${alignak_webui_log_dir}
    /usr/bin/install -d -o ${alignak_webui_user} -g ${alignak_webui_group} -m 755 ${alignak_webui_pid_dir}
    /usr/bin/install -d -o ${alignak_webui_user} -g ${alignak_webui_group} -m 755 ${alignak_webui_pid_dir}
}

alignak_webui_start()
{
    echo "Starting ${name}..."
    /usr/local/bin/uwsgi ${command_args}
    echo "Started"
}

alignak_webui_stop()
{
    echo "Stopping ${name}..."
    /usr/local/bin/uwsgi --stop ${alignak_webui_pid_file}
    echo "Stopped"
}

alignak_webui_reload()
{
    echo "Reloading ${name}..."
    /usr/local/bin/uwsgi --reload ${alignak_webui_pid_file}
    echo "Reloaded"
}

[ -z "${alignak_webui_enable}" ] && alignak_webui_enable="NO"

run_rc_command "$1"
