#!/bin/sh
#
# PROVIDE: graylog
# REQUIRE: NETWORKING SERVERS
# BEFORE: DAEMON
# KEYWORD: shutdown
#

# graylog_enable (bool):
#   Default value: "NO"
#   Flag that determines whether graylog is enabled
#
# graylog_user (username):
#   Default value: "graylog"
#   Name of the graylog user account
#
# graylog_group (group):
#   Default value: "graylog"
#   Name of the graylog group
#
# graylog_config (string)
#   Default value /usr/local/etc/graylog/graylog.conf
#   Path to the graylog configuration file
#
# graylog_min_mem (string):
#   Default value: 256m
#   Minumum JVM heap size
#
# graylog_max_mem (string):
#   Default value: 1g
#   Maximum JVM heap size
#
# graylog_dir (string):
#   Default value: /usr/local/share/graylog
#   Path to the graylog installation.
#
# graylog_data_dir (string):
#   Default vaule: /var/db/graylog
#   Storage location for the graylog journal
#
# graylog_run_dir (string):
#   Default value: /var/graylog
#   Path to the graylog run folder.
#
# graylog_log_config (string):
#   Default value: /usr/local/etc/graylog/server/log4j2.xml
#   Path to the Graylog Server logfile
#
# graylog_java_home (path):
#   Default value: /usr/local/openjdk17
#   Set it to the root of the JDK to use.

. /etc/rc.subr

name=graylog
rcvar=graylog_enable
load_rc_config $name

: ${graylog_enable:="NO"}
: ${graylog_config:="/usr/local/etc/graylog/graylog.conf"}
: ${graylog_data_dir:="/var/db/graylog"}
: ${graylog_dir:="/usr/local/share/graylog"}
: ${graylog_group:="graylog"}
: ${graylog_java_home:="/usr/local/openjdk17"}
: ${graylog_java_opts:=""}
: ${graylog_log_config:="/usr/local/etc/graylog/log4j2.xml"}
: ${graylog_logs_dir:="/var/log/graylog"}
: ${graylog_max_mem:="1g"}
: ${graylog_min_mem:="256m"}
: ${graylog_run_dir:="/var/run/graylog"}
: ${graylog_user:="graylog"}

java_options=" \
    -Dapp=${name} \
    -Djava.awt.headless=true \
    -Dlog4j.configurationFile=${graylog_log_config} \
    -XX:+HeapDumpOnOutOfMemoryError \
    -XX:+ResizeTLAB \
    -XX:+UseCompressedOops \
    -XX:-OmitStackTraceInFastThrow \
    -XX:NewRatio=1 \
    -Xms${graylog_min_mem} \
    -Xmx${graylog_max_mem} \
    ${graylog_java_opts} \
    "

app_pidfile="${graylog_run_dir}/${name}.pid"
pidfile="${graylog_run_dir}/daemon.pid"
command="/usr/sbin/daemon"

command_args=" \
    -c \
    -t ${name} \
    -r \
    -p ${app_pidfile} \
    -P ${pidfile} \
    /usr/local/bin/java \
    ${java_options} \
    -jar ${graylog_dir}/graylog.jar server \
    --no-pid-file \
    --configfile ${graylog_config}"

export JAVA_HOME=${graylog_java_home}

required_files="/usr/local/bin/java ${graylog_config}"

graylog_precmd() {
    install -d -o ${graylog_user} -g ${graylog_group} -m 750 "${graylog_data_dir}"
    install -d -o ${graylog_user} -g ${graylog_group} -m 750 "${graylog_logs_dir}"
    install -d -o ${graylog_user} -g ${graylog_group} -m 750 "${graylog_run_dir}"
}

start_precmd="graylog_precmd"

run_rc_command "$1"
