#!/bin/sh
#
# $Header$
#

# PROVIDE: fetcher
# REQUIRE: DAEMON
# KEYWORD: shutdown

# -----------------------------------------------------------------------------
#
# This script supports running multiple components of fetcher.
# To run additional component link this script to something like
# % ln -s fetcher foo
# and define additional foo_* variables in one of
# /etc/rc.conf, /etc/rc.conf.local or /etc/rc.conf.d/foo
#
# Below NAME should be substituted with the name of this script. By default
# it is fetcher, so read as fetcher_enable. If you linked the script to
# foo, then read as foo_enable etc.
#
# NAME_enable="NO"		# set to YES to enable component NAME
#

. /etc/rc.subr

case "$0" in
/etc/rc*)
	# during boot (shutdown) $0 is /etc/rc (/etc/rc.shutdown),
	# so get the name of the script from $_file
	name=$(basename "$_file" .sh)
	;;
*)
	name=$(basename "$0" .sh)
	;;
esac

rcvar=$(set_rcvar)

load_rc_config $name

eval ": \${${name}_enable=\"NO\"}"
eval ": \${${name}_user=\"webbase\"}"
eval ": \${${name}_limits=\"YES\"}"
eval ": \${${name}_dir=\"/Berkanavt/spider\"}"
eval ": \${${name}_bin=\"${name}\"}"
eval ": \${${name}_flags=\"\"}"
eval ": \${${name}_start_log=\"\${${name}_dir}/logs/\${name}.start\"}"
eval ": \${${name}_clean_dir=\"\"}"
eval ": \${${name}_lookup_enable=\"YES\"}"
eval ": \${${name}_lookup=\"/Berkanavt/bin/scripts/spiderlookup\"}"
eval ": \${${name}_required_files=\"\${${name}_lookup}\"}"
eval ": \${${name}_required_dirs=\"\"}"

fetcher_user="$(eval echo \${${name}_user})"
fetcher_limits="$(eval echo \${${name}_limits})"
fetcher_dir="$(eval echo \${${name}_dir})"
fetcher_bin="$(eval echo \${${name}_bin})"
fetcher_flags="$(eval echo \${${name}_flags})"
fetcher_start_log="$(eval echo \${${name}_start_log})"
fetcher_clean_dir="$(eval echo \${${name}_clean_dir})"
fetcher_lookup_enable="$(eval echo \${${name}_lookup_enable})"
fetcher_lookup="$(eval echo \${${name}_lookup})"
fetcher_required_files="$(eval echo \${${name}_required_files})"
fetcher_required_dirs="$(eval echo \${${name}_required_dirs})"

fetcher_limits_args="-e -U ${fetcher_user}"

command="${fetcher_dir}/bin/${fetcher_bin}"
command_args="${fetcher_flags}"

pidfile="${fetcher_dir}/run/${name}.pid"
checkfile="${fetcher_dir}/run/${name}.stoped"

required_files="${fetcher_required_files}"
required_dirs="${fetcher_required_dirs}"

extra_commands="checkup"
start_precmd="fetcher_prestart"
start_cmd="fetcher_start"
stop_postcmd="fetcher_poststop"
checkup_cmd="fetcher_checkup"

host_in_production()
{
	if checkyesno fetcher_lookup_enable; then
		if [ -z "$(${fetcher_lookup} -f)" ]; then
			return 1
		fi
	fi
	return 0
}

fetcher_is_running()
{
	if ! host_in_production; then
		exit 0
	fi
	if [ -n "$rc_pid" -a -z "$rc_fast" ]; then
		return 0
	else
		return 1
	fi
	return 1
}

fetcher_prestart()
{
	if fetcher_is_running; then
		echo 1>&2 "${name} already running? (pid=$rc_pid)."
		return 1
	else
		if [ -n "$fetcher_user" ]; then
			if [ "$fetcher_user" = "$(eval $IDCMD)" ]; then
				# unset $fetcher_user if running as that user
				unset fetcher_user
			else
				if checkyesno fetcher_limits; then
					if ! eval $(limits \
						${fetcher_limits_args}) \
						2>/dev/null
					then
						return 1
					fi
				fi
			fi
		fi
		if [ -n "${fetcher_clean_dir}" ]; then
			if ! find ${fetcher_clean_dir} \( -type f -or \
				-type s \) -delete
			then
				return 1
			fi
		fi
		if [ -f $checkfile ]; then
			rm -f $checkfile
		fi
		if [ "$(eval $IDCMD)" = "root" ]; then
			if ! newsyslog -sR "${name} rc script" \
				${fetcher_start_log}
			then
				return 1
			fi
		fi
	fi
	return 0
}

fetcher_start()
{
	local _start_cmd

	_start_cmd="daemon -p $pidfile $command $command_args \
		>>${fetcher_start_log} 2>&1"
	if [ -n "${fetcher_user}" ]; then
		_start_cmd="su -m ${fetcher_user} -c 'sh -c \"${_start_cmd}\"'"
	fi
	echo "Starting ${name}."
	if ! eval "$_start_cmd"; then
		echo 1>&2 "Cannot start ${name}."
		return 1
	else
		return 0
	fi
}

fetcher_poststop()
{
	if ! touch $checkfile; then
		echo 1>&2 "Cannot create ${checkfile}."
		return 1
	else
		return 0
	fi
}

fetcher_checkup()
{
	if ! fetcher_is_running; then
		if [ -f "$checkfile" ]; then
			return 0
		else
			_run_rc_notrunning
			run_rc_command start
		fi
	fi
}

run_rc_command "$1"

