#!/sbin/openrc-run
# Copyright 1999-2018 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

RSYSLOG_CONFIGFILE=${RSYSLOG_CONFIGFILE:-"/etc/rsyslog.conf"}
RSYSLOG_PIDFILE=${RSYSLOG_PIDFILE:-"/run/rsyslogd.pid"}
RSYSLOG_SSDARGS=${RSYSLOG_SSDARGS:-"--wait 1000"}
RSYSLOG_TERMTIMEOUT=${RSYSLOG_TERMTIMEOUT:-"TERM/60/KILL/5"}
RSYSLOG_OPTS=${RSYSLOG_OPTS:-""}

command="/usr/sbin/rsyslogd"
command_args="${RSYSLOG_OPTS} -f \"${RSYSLOG_CONFIGFILE}\" -i \"${RSYSLOG_PIDFILE}\""
start_stop_daemon_args="${RSYSLOG_SSDARGS}"
pidfile="${RSYSLOG_PIDFILE}"
retry="${RSYSLOG_TERMTIMEOUT}"

required_files="${RSYSLOG_CONFIGFILE}"

description="RSYSLOG is the rocket-fast system for log processing (syslog replacement)."

extra_commands="configtest"
extra_started_commands="rotate"

description_configtest="Run rsyslogd's internal config check."

description_rotate="Sends rsyslogd a signal to re-open its log files."

depend() {
	need clock hostname localmount
	provide logger
}

start_pre() {
	if [ "${RC_CMD}" != "restart" ]; then
		configtest || return 1
	fi
}

stop_pre() {
	if [ "${RC_CMD}" = "restart" ]; then
		configtest || return 1
	fi
}

stop_post() {
	if [ -f "${RSYSLOG_PIDFILE}" ]; then
		vebegin "Removing stale PID file"
		rm --force "${RSYSLOG_PIDFILE}"
		veend $?
	fi
}

configtest() {
	local _command_args="-N 999 -f \"${RSYSLOG_CONFIGFILE}\""
	local _retval=0

	ebegin "Checking rsyslogd's configuration"
	eval ${command} ${_command_args} >/dev/null 2>&1
	_retval=$?

	if [ ${_retval} -ne 0 ]; then
		eval ${command} ${_command_args}
	fi

	eend ${_retval} "failed, please correct errors above"
}

rotate() {
	ebegin "Re-opening rsyslogd logs"
	start-stop-daemon --signal SIGHUP --pidfile "${RSYSLOG_PIDFILE}"
	eend $?
}
