#!/sbin/openrc-run

description="Software watchdog daemon"

DAEMON=/usr/sbin/watchdog
PIDFILE=/var/run/watchdog.pid
KEEPALIVE_DAEMON=/usr/sbin/wd_keepalive
KEEPALIVE_PIDFILE=/var/run/wd_keepalive.pid
STOP_RETRY_SCHEDULE='TERM/10/forever/KILL/1'

run_watchdog=0
watchdog_options=""
watchdog_module="none"
run_wd_keepalive=1

depend() {
	need localmount
	after boot
	provide watchdog
}

_load_defaults() {
	[ -f /etc/default/watchdog ] && . /etc/default/watchdog
}

start() {
	_load_defaults
	[ "$run_watchdog" = 1 ] || return 0
	[ "${watchdog_module:-none}" != "none" ] && /sbin/modprobe "$watchdog_module" || true

	ebegin "Stopping watchdog keepalive daemon"
	start-stop-daemon --stop --quiet --oknodo --retry "$STOP_RETRY_SCHEDULE" \
		--pidfile "$KEEPALIVE_PIDFILE" --exec "$KEEPALIVE_DAEMON"
	eend $?
	rm -f /run/sendsigs.omit.d/wd_keepalive.pid

	ebegin "Starting watchdog daemon"
	start-stop-daemon --start --quiet --pidfile "$PIDFILE" \
		--exec "$DAEMON" -- $watchdog_options
	eend $?
}

stop() {
	_load_defaults
	[ "$run_watchdog" = 1 ] || return 0
	ebegin "Stopping watchdog daemon"
	start-stop-daemon --stop --quiet --retry "$STOP_RETRY_SCHEDULE" \
		--pidfile "$PIDFILE" --exec "$DAEMON"
	eend $?
	if [ "$run_wd_keepalive" = 1 ]; then
		ebegin "Starting watchdog keepalive daemon"
		start-stop-daemon --start --quiet --pidfile "$KEEPALIVE_PIDFILE" \
			--exec "$KEEPALIVE_DAEMON" -- $watchdog_options
		if eend $?; then
			ln -sf "$KEEPALIVE_PIDFILE" /run/sendsigs.omit.d/wd_keepalive.pid
		fi
	fi
}

restart() {
	stop
	start
}

status() {
	status_of_proc -p "$PIDFILE" "$DAEMON" watchdog
}
