#!/bin/sh

### BEGIN INIT INFO
# Provides:          arangodb3
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: arangodb
# Description:       arango database server 
### END INIT INFO

. /lib/lsb/init-functions

PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/sbin/arangod
DESC="arango database server"
NAME="arangod"
PIDDIR=/var/run/arangodb
PIDFILE=/var/run/arangodb/arangod.pid

test -x $DAEMON || exit 0

if [ `id -u` -ne 0 ]; then
   echo "You need root privileges to run this script"
   exit 1
fi

start () {
    [ -d $PIDDIR ] || mkdir $PIDDIR || exit 1

    ( cd /var/log/arangodb3 && chown -R arangodb:arangodb . && chmod 700 . ) || exit 1
    ( cd /var/lib/arangodb3 && chown -R arangodb:arangodb . && chmod 700 . ) || exit 1
    ( cd /var/lib/arangodb3-apps && chown -R arangodb:arangodb . && chmod 700 . ) || exit 1
    ( cd $PIDDIR && chown arangodb:arangodb . && chmod 755 . ) || exit 1

    local current=/var/tmp/arangod
    ( mkdir -p $current && chown -R arangodb:arangodb $current ) || exit 1

    ulimit -H -n 131072 || true
    ulimit -S -n 131072 || true

    export GLIBCXX_FORCE_NEW=1

    case "$1" in
        "--upgrade")
            shift
            $DAEMON --uid arangodb --gid arangodb --server.rest-server false --database.auto-upgrade true $@
            RETVAL=$?
            log_end_msg $RETVAL
            ;;
        "--reopen-logs")
            shift
            if test -f $PIDFILE; then
                kill -1 `cat $PIDFILE`
            fi
            RETVAL=0
            log_end_msg $RETVAL
            ;;
        *)
            $DAEMON --uid arangodb --gid arangodb --server.rest-server false --log.foreground-tty false --database.check-version
            RETVAL=$?

            if [ "$RETVAL" -eq 0 ];  then
                $DAEMON --uid arangodb --gid arangodb --pid-file "$PIDFILE" --temp.path "/var/tmp/arangod" --log.foreground-tty false  --supervisor $@
	        RETVAL=$?
	        log_end_msg $RETVAL
            else
	        log_failure_msg "database version check failed, maybe you need to run 'upgrade'?"
            fi
            ;;
    esac

    return $RETVAL
}

case "$1" in
  start)
    log_daemon_msg "Starting $DESC" "$NAME"

    start
    exit $?
    ;;

  stop)
    log_daemon_msg "Stopping $DESC" "$NAME"

    start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON
    RETVAL=$?
    log_end_msg $RETVAL

    log_daemon_msg "Waiting for shutdown" ""

    c=0

    while test -f $PIDFILE -a $c -lt 30 && ps --pid `cat $PIDFILE` > /dev/null; do
      log_progress_msg "."
      sleep 2
      c=`expr $c + 1`
    done

    log_progress_msg "done"
    log_end_msg 0

    rm -f $PIDFILE
    exit $RETVAL
    ;;

  restart)
    $0 stop || exit 1
    sleep 3
    $0 start
    exit $?
    ;;

  force-reload)
    $0 restart
    exit $?
    ;;

  status)
    status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
    ;;

  upgrade)
    log_daemon_msg "Upgrading $DESC" "$NAME"

    start --upgrade
    exit $?
    ;;
  
  reload-log)
    log_daemon_msg "Re-Opening Logfiles $DESC" "$NAME"

    start --reopen-logs

    exit $?
    ;;

  *)
    log_success_msg "Usage: /etc/init.d/arangodb3 {start|stop|restart|force-reload|status|upgrade}"
    exit 1
    ;;
esac

exit 0
