#!/bin/bash
#
# /etc/init.d/cf-scan-reporter -- startup script for cf-scan-reporter
#
### BEGIN INIT INFO
# Provides:          cf-scan-reporter
# Required-Start:    $network $remote_fs $named
# Required-Stop:     $network $remote_fs $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts cf-scan-reporter
# Description:       Starts cf-scan-reporter using start-stop-daemon
### END INIT INFO

PATH=/bin:/usr/bin:/sbin:/usr/sbin
NAME=cf-scan-reporter
DESC="$NAME service"
DEFAULT=/etc/default/$NAME

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

. /lib/lsb/init-functions

if [ -r /etc/default/rcS ]; then
  . /etc/default/rcS
fi

# The following variables can be overwritten in $DEFAULT

# Run cf-scan-reporter as this user ID and group ID
CF_USER=cloudfinder
CF_GROUP=cloudfinder

# Directory where the cf-scan-reporter binary distribution resides
CF_HOME=/opt/cloudfinder/$NAME

# cf-scan-reporter log directory
LOG_DIR=/var/log/$NAME

# cf-scan-reporter configuration directory
CONF_DIR=/etc/cloudfinder/$NAME

# cf-scan-reporter PID file directory
PID_DIR=/var/run/$NAME

# End of variables that can be overwritten in $DEFAULT

# overwrite settings from default file
if [ -f "$DEFAULT" ]; then
  . "$DEFAULT"
fi

# Define other required variables
PID_FILE="$PID_DIR/$NAME.pid"
DAEMON=$CF_HOME/bin/$NAME
DAEMON_OPTS="server $CONF_DIR/configuration.yml"

export JAVA_HOME

# Check DAEMON exists
test -x $DAEMON || (log_daemon_msg "Cannot find executable $DAEMON" && exit 0)


checkJava() {
  if [ -x "$JAVA_HOME/bin/java" ]; then
    JAVA="$JAVA_HOME/bin/java"
  else
    JAVA=`which java`
  fi

  if [ ! -x "$JAVA" ]; then
    echo "Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME"
    exit 1
  fi
}

case "$1" in
  start)
  checkJava

  log_daemon_msg "Starting $DESC"

  pid=`pidofproc -p $PID_FILE $NAME`
  if [ -n "$pid" ] ; then
    log_begin_msg "Already running."
    log_end_msg 0
    exit 0
  fi
  # Prepare environment
  mkdir -p "$LOG_DIR" && chown "$CF_USER":"$CF_GROUP" "$LOG_DIR"

  # Ensure that the PID_DIR exists (it is cleaned at OS startup time)
  if [ -n "$PID_DIR" ] && [ ! -e "$PID_DIR" ]; then
    mkdir -p "$PID_DIR" && chown "$CF_USER":"$CF_GROUP" "$PID_DIR"
  fi
  if [ -n "$PID_FILE" ] && [ ! -e "$PID_FILE" ]; then
    touch "$PID_FILE" && chown "$CF_USER":"$CF_GROUP" "$PID_FILE"
  fi

  # Start Daemon
  echo $DAEMON_OPTS
  start-stop-daemon -d $CF_HOME --start -b --make-pidfile --user "$CF_USER" -c "$CF_USER" --pidfile "$PID_FILE" --exec $DAEMON -- $DAEMON_OPTS
  return=$?
  if [ $return -eq 0 ]; then
    i=0
    timeout=10
    # Wait for the process to be properly started before exiting
    until { cat "$PID_FILE" | xargs kill -0; } >/dev/null 2>&1
    do
      sleep 1
      i=$(($i + 1))
      if [ $i -gt $timeout ]; then
        log_end_msg 1
        exit 1
      fi
    done
  fi
  log_end_msg $return
  exit $return
  ;;
  stop)
  log_daemon_msg "Stopping $DESC"

  if [ -f "$PID_FILE" ]; then
    start-stop-daemon --stop --pidfile "$PID_FILE" \
      --user "$CF_USER" \
      --quiet \
      --retry forever/TERM/20 > /dev/null
    if [ $? -eq 1 ]; then
      log_progress_msg "$DESC is not running but pid file exists, cleaning up"
    elif [ $? -eq 3 ]; then
      PID="`cat $PID_FILE`"
      log_failure_msg "Failed to stop $DESC (pid $PID)"
      exit 1
    fi
    rm -f "$PID_FILE"
  else
    log_progress_msg "(not running)"
  fi
  log_end_msg 0
  ;;
  status)
  status_of_proc -p $PID_FILE $NAME $NAME && exit 0 || exit $?
  ;;
  restart|force-reload)
  if [ -f "$PID_FILE" ]; then
    $0 stop
    sleep 1
  fi
  $0 start
  ;;
  *)
  log_success_msg "Usage: $0 {start|stop|restart|force-reload|status}"
  exit 1
  ;;
esac

exit 0
