#!/bin/sh -e
#
# $Header: svn+ssh://arcadia-ro.yandex.ru/arc/branches/kiwi/mragent-stable-2014-04-29/arcadia/yweb/webscripts/admscripts/scripts/startup/Linux/etc/init.d/mragent 1328955 2014-02-10 14:41:31Z dpuchkin $

### BEGIN INIT INFO
# Provides:		mragent
# Required-Start:	$all
# Required-Stop:	$sshd
# Default-Start:	2 3 4 5
# Default-Stop:		0 1 6
# Short-Description:	Orange Crawler
### END INIT INFO

. /lib/lsb/init-functions

export PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"

name=$(basename $(realpath $0))

mragent_cfg_file="/etc/default/${name}"
if [ -f $mragent_cfg_file ]; then
	. $mragent_cfg_file
fi

: ${mragent_user:="crawler"}
: ${mragent_dir:="/Berkanavt/mragent"}
: ${mragent_release_dir:="${mragent_dir}/release"}
: ${mragent_command:="${mragent_release_dir}/start.py"}
: ${mragent_cfg:="${mragent_release_dir}/yweb/crawlrank/config/mragent.cfg"}
: ${mragent_flags_start:="-f ${mragent_cfg} --setlive=all --from=release"}
: ${mragent_flags_stdstart:="-f ${mragent_cfg} --setlive=std --from=release"}
: ${mragent_flags_stop:="-f ${mragent_cfg} --fullstop"}
: ${mragent_flags_status:="-f ${mragent_cfg} --check"}
: ${mragent_safe_timeout:=15}

usage()
{
	log_action_msg "Usage: ${name} (start|stop|restart|stdrestart|status)"
	exit 1
}

# Are we running from init?
run_by_init() {
    ([ "$previous" ] && [ "$runlevel" ]) || [ "$runlevel" = S ]
}

mragent_ctl()
{
	local _mode _doit _flags _info_msg

	_mode="$1"
	
	if [ -z "${_mode}" ]; then
		log_failure_msg "Internal error: mode is not defined !"
		return 1
	fi

	if [ ! -d $mragent_dir ]; then
		log_failure_msg "Directory ${mragent_dir} doesn't exist !"
		return 1
	fi

	case "${_mode}" in
	start)
		_flags="${mragent_flags_start}"
		_info_msg="Starting ${name}."
		;;
	stdrestart)
		_flags="${mragent_flags_stdstart}"
		_info_msg="Starting ${name} (std mode)."
		;;
	stop)
		_flags="${mragent_flags_stop}"
		_info_msg="Stopping ${name}."
		;;
	status)
		_flags="${mragent_flags_status}"
		_info_msg=""
		;;
	esac

	_doit="test -s /etc/default/${name}.env && { set -a ; . /etc/default/${name}.env ; } ; cd ${mragent_dir} && ${mragent_command} ${_flags}"
	if run_by_init; then
		# Orange node must known its hostname to start applications.
		# Now hostname can be obtained just by reverse DNS request so
		# we need network working at the moment of starting mragent.
		_doit="sleep ${mragent_safe_timeout}; ${_doit}"
	fi
	if [ -n "${mragent_user}" ]; then
		_doit="su -l ${mragent_user} -c \"${_doit}\""
	fi

	if [ -n "${_info_msg}" ]; then
		log_success_msg "${_info_msg}"
	fi

	if ! eval "${_doit}"; then
		if [ "${_mode}" != "status" ]; then
			log_failure_msg "Can't do \"${name} ${_mode}\" !"
		fi
		return 1
	fi

	return 0
}

case "$1" in
start|stop|stdrestart|status)
	mragent_ctl $1
	;;
restart)
	mragent_ctl stop
	mragent_ctl start
	;;
*)
	usage
	;;
esac

