#!/bin/sh
#
### BEGIN INIT INFO
# Provides:          ymc-cluster-ymc-config-server
# Required-Start:    fliwi-service-ips
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start:
# Default-Stop:
# Short-Description: Starts the ymc-config-server
# Description:       ymcCluster depends on a central configuration
#                    which is provided using svnserve. Additionally
#                    a service on port 3690 is started (using socat)
#                    to allow the (insecure) retrival of a new
#                    password to access the configuration.
### END INIT INFO

DAEMON_SVN="/usr/bin/svnserve"
DAEMON_SOCAT="/usr/bin/socat"
DESC='ymc-config-server daemons'
NAMES='svnserve socat'
NAME_SVN=$(basename $DAEMON_SVN)
NAME_SOCAT=$(basename $DAEMON_SOCAT)
PIDFILE_SVN="/var/run/ymc-cluster-ymc-config-server.pid"
PIDFILE_SOCAT="/var/run/ymc-cluster-ymc-config-password-provider.pid"

service_to_run_on=$(fliwi-get-my-services --limit=ymc-config)
if [ $? -ne 0 ] || [ "$service_to_run_on" = '' ]; then
  echo "WARNING: Not starting/stopping $DESC - no service 'ymc-config' configured..." 1>&2
  exit 0
fi

. /lib/lsb/init-functions

test -x $DAEMON_SVN || exit 0
test -x $DAEMON_SOCAT || exit 0

set -e

do_start()
{
  start-stop-daemon --start --quiet --pidfile $PIDFILE_SVN \
    --name $NAME_SVN --oknodo \
    --startas $DAEMON_SVN -- -d \
                             --listen-port=3690 \
                             --root=/data/ymc-cluster-ymc-config-server \
                             --pid-file=$PIDFILE_SVN
  start-stop-daemon --start --quiet --pidfile $PIDFILE_SOCAT --make-pidfile \
    --background --name $NAME_SOCAT \
    --exec $DAEMON_SOCAT -- -4 \
                            TCP-LISTEN:10112,bind=ymc-config.cluster,fork,reuseaddr,range=10.0.0.0/8 \
                            EXEC:"/usr/lib/ymc-cluster-ymc-config-server/ymc-cluster-ymc-config-server-socat-script"
}

do_stop()
{
  exit_status=0
  set +e

  start-stop-daemon --stop --quiet --pidfile $PIDFILE_SVN \
    --name $NAME_SVN --oknodo --retry=TERM/60/KILL/10
  if [ $? -ne 0 ]; then
    exit_status=$?
    if [ -f "$PIDFILE_SVN" ]; then
      rm -f $PIDFILE_SVN
    fi
  fi

  start-stop-daemon --stop --quiet --pidfile $PIDFILE_SOCAT \
    --name $NAME_SOCAT --exec $DAEMON_SOCAT --retry=TERM/60/KILL/10
  if [ $? -ne 0 ]; then
    exit_status=$?
    if [ -f "$PIDFILE_SOCAT" ]; then
      rm -f $PIDFILE_SOCAT
    fi
  fi

  set -e
  return $exit_status
}


case "$1" in
  start)
    log_daemon_msg "Starting $DESC" "$NAMES"
    do_start
    log_end_msg $?
    echo
  ;;

  stop)
    log_daemon_msg "Stopping $DESC" "$NAMES"
    do_stop
    log_end_msg $?
    echo
  ;;

  restart|force-reload)
    log_daemon_msg "Restarting $DESC" "$NAMES"
    do_stop
    do_start
    log_end_msg $?
    ;;

  status)
    exit_status=0
    status_of_proc -p "$PIDFILE_SVN" "$DAEMON_SVN" $NAME_SVN || exit_status=1
    status_of_proc -p "$PIDFILE_SOCAT" "$DAEMON_SOCAT" $NAME_SOCAT || exit_status=1
  ;;

  *)
    echo "Usage: /etc/init.d/ymc-cluster-ymc-config-server {start|stop|restart|force-reload|status}"
    exit 3
  ;;
esac

exit 0
