#!/bin/sh
#
# Start the X2Go Session Broker Load Checker Service
#
# Copyright © 2014-2018 Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
# Distributable under the terms of the GNU AGPL version 3+.
#
### BEGIN INIT INFO
# Provides:          x2gobroker-loadchecker
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: X2Go Session Broker Load Checker Service
# Description:       Load Checker service for X2Go Session Broker
### END INIT INFO
#

set -eu

LOADCHECKER=/usr/sbin/x2gobroker-loadchecker
test -d /run && RUNDIR=/run || RUNDIR=/var/run
PIDFILE_LOADCHECKER=$RUNDIR/x2gobroker/x2gobroker-loadchecker.pid
DEBIANCONFIG_COMMON=/etc/default/python-x2gobroker
DEBIANCONFIG_LOADCHECKER=/etc/default/x2gobroker-loadchecker

test -x "$LOADCHECKER" || exit 0

START_LOADCHECKER=false
X2GOBROKER_DEBUG=0
X2GOBROKER_DAEMON_USER='x2gobroker'
X2GOBROKER_DAEMON_GROUP='x2gobroker'
X2GOBROKER_LOADCHECKER_SOCKET="$RUNDIR/x2gobroker/x2gobroker-loadchecker.socket"
test -f $DEBIANCONFIG_COMMON && . $DEBIANCONFIG_COMMON
test -f $DEBIANCONFIG_LOADCHECKER && . $DEBIANCONFIG_LOADCHECKER

if ! getent passwd $X2GOBROKER_DAEMON_USER 1>/dev/null 2>/dev/null; then
	X2GOBROKER_DAEMON_USER=nobody
fi
if ! getent group $X2GOBROKER_DAEMON_GROUP 1>/dev/null 2>/dev/null; then
	X2GOBROKER_DAEMON_GROUP=nogroup
fi

# create PID directory
mkdir -p $RUNDIR/x2gobroker
chown $X2GOBROKER_DAEMON_USER:$X2GOBROKER_DAEMON_GROUP $RUNDIR/x2gobroker
chmod 0770 $RUNDIR/x2gobroker

export X2GOBROKER_DEBUG
export X2GOBROKER_DAEMON_USER
export X2GOBROKER_DAEMON_GROUP
export X2GOBROKER_LOADCHECKER_SOCKET

. /lib/lsb/init-functions

is_true()
{
	case "${1:-}" in
		[Yy]es|[Yy]|1|[Tt]|[Tt]rue) return 0;;
		*) return 1;
	esac
}

case "${1:-}" in
	start)
		if [ -f $PIDFILE_LOADCHECKER ]; then
			if ps a -u $X2GOBROKER_DAEMON_USER | grep -v egrep | egrep ".*$(basename $LOADCHECKER).*$X2GOBROKER_LOADCHECKER_SOCKET.*" 1>/dev/null 2>/dev/null; then
				log_warning_msg "X2Go Broker Load Checker Service already running"
			else
				log_warning_msg "X2Go Broker Load Checker Service: stale PID file ($PIDFILE_LOADCHECKER). Delete it manually!"
			fi
			START_LOADCHECKER=no
		fi
		if is_true $START_LOADCHECKER; then
			set +e
			# once we are here, we have to make sure the loadchecker.socket does not exist
			rm -f $X2GOBROKER_LOADCHECKER_SOCKET
			# and now we can start the auth service
			log_daemon_msg "Starting X2Go Broker Load Checker Service" "$(basename $LOADCHECKER)"
			start-stop-daemon --chuid $X2GOBROKER_DAEMON_USER -b -m -S -p $PIDFILE_LOADCHECKER -x $LOADCHECKER -- -s $X2GOBROKER_LOADCHECKER_SOCKET -o $X2GOBROKER_DAEMON_USER -g $X2GOBROKER_DAEMON_GROUP -p 0660
			log_end_msg $?
			set -e
		fi
	;;
	stop)
		if [ -f $PIDFILE_LOADCHECKER ] ; then
			log_daemon_msg "Stopping X2Go Broker Load Checker Service" "$(basename $LOADCHECKER)"
			set +e
			start-stop-daemon -K -p $PIDFILE_LOADCHECKER && rm -f $PIDFILE_LOADCHECKER
			log_end_msg $?
			set -e
		fi
	;;
	status)
		if ps -C x2gobroker-loadchecker 1>/dev/null 2>/dev/null; then
			log_action_msg  "X2Go Session Broker Load Checker Service is up and running"
		else
			log_warning_msg "X2Go Session Broker Load Checker Service is down"
		fi
	;;
	restart|reload|force-reload)
		${0:-} stop
		${0:-} start
	;;
	*)
		echo "Usage: ${0:-} {start|stop|restart|reload|force-reload}" >&2
		exit 1
		;;
esac

exit 0
