#!/usr/bin/env bash
#
# osync-srv Two way directory sync daemon
#
# chkconfig: - 90 99
# description: monitors a local directory and syncs to a local or remote \
#              directory on file changes
# processname: /usr/local/bin/osync.sh
# config: /etc/osync/*.conf
# pidfile: /var/run/osync

### BEGIN INIT INFO
# Provides:		osync-srv
# Required-Start:	$local_fs $time
# Required-Stop:	$local_fs $time
# Default-Start:	2 3 4 5
# Default-Stop:		0 1 6
# Short-Description:	osync daemon
# Description:		Two way directory sync daemon
### END INIT INFO

prog=osync
progexec=osync.sh
progpath=/usr/local/bin
confdir=/etc/osync
pidfile=/var/run/$prog
SCRIPT_BUILD=2015092701

if [ ! -f $progpath/$progexec ] && [ ! -f $progexec ]; then
	echo "Cannot find $prog executable in $progpath nor in local path."
	exit 1
fi

if [ ! -w $(dirname $pidfile) ]; then
	pidfile=./$prog
fi

start() {
	if [ ! -f $confdir/*.conf ]; then
		echo "Cannot find any configuration files in $confdir."
		exit 1
	fi

	errno=0

	for cfgfile in $confdir/*.conf
	do
		if [ -f $progpath/$progexec ]; then
			$progpath/$progexec $cfgfile --on-changes --errors-only > /dev/null 2>&1 &
		else
			echo "Cannot find $prog executable in $progpath"
			exit 1
		fi

		pid=$!
		retval=$?

		if [ $? == 0 ]; then
			echo $pid > "$pidfile-$(basename $cfgfile)"
			echo "$prog successfully started for configuration file $cfgfile"
		else
			echo "Cannot start $prog for configuration file $cfgfile"
			$errno = 1
		fi
	done

	exit $errno
}

stop() {
	if [ ! -f $pidfile-* ]; then
		echo "No running $prog instances found."
		exit 1
	fi

	for pfile in $pidfile-*
	do
		if ps -p$(cat $pfile) > /dev/null 2>&1
		then
			kill -TERM $(cat $pfile)
			if [ $? == 0 ]; then
				rm -f $pfile
				echo "$prog instance $(basename $pfile) stopped."
			else
				echo "Cannot stop $prog instance $(basename $pfile)"
			fi
		else
			rm -f $pfile
			echo "$prog instance $pfile (pid $(cat $pfile)) is dead but pidfile exists."
		fi
	done
}

status() {
	if [ ! -f $pidfile-* ]; then
		echo "Cannot find any running $prog instance."
		exit 1
	fi

	errno=0

	for pfile in $pidfile-*
	do
		if ps -p$(cat $pfile) > /dev/null 2>&1
		then
			echo "$prog instance $(basename $pfile) is running (pid $(cat $pfile))"
		else
			echo "$prog instance $pfile (pid $(cat $pfile)) is dead but pidfile exists."
			$errno=1
		fi
	done

	exit $errno
}

case "$1" in
	start)
	start
	;;
	stop)
	stop
	;;
	restart)
	stop
	start
	;;
	status)
	status
	;;
	condrestart|try-restart)
	status || exit 0
	restart
	;;
	*)
	echo "Usage: $0 {start|stop|restart|status}"
	;;
esac

exit 0