#!/sbin/openrc-run

description="System Logger Daemon"

SYSLOGNG_OPTS=""
[ -r /etc/default/syslog-ng ] && . /etc/default/syslog-ng

command="/usr/sbin/syslog-ng"
pidfile="/var/run/syslog-ng.pid"
name="syslog-ng"

depend() {
	need localmount net
	use logger dns
	after bootmisc
}

start_pre() {
	[ -f "$command" ] || return 0

	case "x${CONSOLE_LOG_LEVEL:-}" in
		x[1-8]) dmesg -n "$CONSOLE_LOG_LEVEL" ;;
		x) ;;
		*) ewarn "CONSOLE_LOG_LEVEL is of unaccepted value." ;;
	esac

	if [ ! -d /var/run/syslog-ng ]; then
		mkdir -p /var/run/syslog-ng
	fi

	xconsole=/dev/xconsole
	if [ "$(uname -s)" = "GNU/kFreeBSD" ]; then
		xconsole=/var/run/xconsole
		ln -sf "$xconsole" /dev/xconsole
	fi
	if [ ! -e "$xconsole" ]; then
		mknod -m 640 "$xconsole" p
		chown root:adm "$xconsole"
		[ -x /sbin/restorecon ] && /sbin/restorecon "$xconsole"
	fi
}

wait_transition() {
	want="$1"
	last_rc="$2"
	[ "$last_rc" -eq 0 ] || return 1
	[ -n "${DPKG_MAINTSCRIPT_PACKAGE:-}" ] && return 0

	i=1
	while [ "$i" -le 30 ]; do
		status=0
		syslog-ng-ctl stats >/dev/null 2>&1 || status=$?
		[ "$status" != "$want" ] && return 0
		sleep 1
		i=$((i + 1))
	done
	return 1
}

start() {
	ebegin "Starting system logging"
	start-stop-daemon --start --oknodo --quiet --exec "$command" \
		--pidfile "$pidfile" -- -p "$pidfile" $SYSLOGNG_OPTS
	wait_transition 1 $?
	eend $?
}

stop() {
	ebegin "Stopping system logging"
	start-stop-daemon --stop --oknodo --quiet --name "$name" --retry 3 \
		--pidfile "$pidfile"
	wait_transition 0 $?
	eend $?
}

reload() {
	ebegin "Reloading system logging"
	if "$command" -s $SYSLOGNG_OPTS; then
		start-stop-daemon --stop --signal HUP --quiet --exec "$command" \
			--pidfile "$pidfile"
		wait_transition 1 $?
		eend $?
	else
		eend 1
		return 1
	fi
}

extra_started_commands="try_restart"
try_restart() {
	if [ -f "$pidfile" ] && kill -0 "$(cat "$pidfile")" 2>/dev/null; then
		stop && start
	fi
}
