#!/bin/bash
# chkconfig: 345 91 9
# description: Alfresco Content Service
### BEGIN INIT INFO
# Provides: Alfresco MM Module Content Service
# Required-Start: $local_fs $network $activemq
# Required-Stop: $local_fs $network $activemq
# Default-Start: 3 4 5
# Default-Stop: 0 1 6
# Description: Start the program
### END INIT INFO

### Fill in these bits:

USER="alfresco-content-services"

PID_FILE="<%= node['media']['content_services_pid_path'] %>/alfresco-content-services.pid"
JAR_LOCATION=<%= node['media']['content_services_folder'] %>
JAR_FILE=<%= node['media']['content_services_jar_path'] %>

START_CMD="\"cd $JAR_LOCATION;java -jar $JAR_FILE server <%= node['media']['content_services_config_path'] %> > /dev/null 2>&1 &\""
NAME="alfresco-content-services"
PGREP_STRING="$JAR_FILE"

### No Changes required below this point!

CUR_USER=`whoami`

killproc() {
  pkill -u $USER -f $PGREP_STRING
}

start_daemon() {
  eval "$*"
}

log_success_msg() {
  echo "$*"
  logger "$_"
}

log_failure_msg() {
  echo "$*"
  logger "$_"
}

check_proc() {
  pgrep -u $USER -f $PGREP_STRING >/dev/null
}

start_script() {
  if [ "${CUR_USER}" != "root" ] ; then
    log_failure_msg "$NAME can only be started as 'root'."
    exit -1
  fi

  check_proc
  if [ $? -eq 0 ]; then
    log_success_msg "$NAME is already running."
    exit 0
  fi

  [ -d /var/run/$NAME ] || (mkdir /var/run/$NAME )

  # For SELinux we need to use 'runuser' not 'su'
  if [ -x "/sbin/runuser" ]; then
     SU="/sbin/runuser -s /bin/sh"
  else
     SU="/bin/su -s /bin/sh"
  fi
  start_daemon $SU $USER -c "$START_CMD"

  # Sleep for a while to see if anything cries
  sleep 5
  check_proc

  if [ $? -eq 0 ]; then
    log_success_msg "Started $NAME."
  else
    log_failure_msg "Error starting $NAME."
    exit -1
  fi
}

stop_script() {
  if [ "${CUR_USER}" != "root" ] ; then
    log_failure_msg "You do not have permission to stop $NAME."
    exit -1
  fi

  check_proc
  if [ $? -eq 0 ]; then
    killproc -p $PID_FILE >/dev/null

    # Make sure it's dead before we return
    until [ $? -ne 0 ]; do
      sleep 1
      check_proc
    done

    check_proc
    if [ $? -eq 0 ]; then
      log_failure_msg "Error stopping $NAME."
      exit -1
    else
      log_success_msg "Stopped $NAME."
    fi
  else
    log_failure_msg "$NAME is not running or you don't have permission to stop it"
  fi
}

check_status() {
  check_proc
  if [ $? -eq 0 ]; then
    log_success_msg "$NAME is running."
  else
    log_failure_msg "$NAME is stopped."
    exit -1
  fi
}

case "$1" in
  start)
    start_script
    ;;
  stop)
    stop_script
    ;;
  restart)
    stop_script
    start_script
    ;;
  status)
    check_status
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
esac

exit 0
