#!/bin/bash -e
source $OPENSHIFT_CARTRIDGE_SDK_BASH
source ${OPENSHIFT_PERL_DIR}usr/lib/perl_config

# Perl cartridge. Perl packaged with OS.
# Perl control script.

HTTPD_CFG_FILE=$OPENSHIFT_PERL_DIR/etc/conf/httpd_nolog.conf
HTTPD_PASSENV_FILE=$OPENSHIFT_PERL_DIR/etc/conf.d/passenv.conf
HTTPD_PID_FILE=$OPENSHIFT_PERL_DIR/run/httpd.pid

HTTPD_CFG_DIR=$OPENSHIFT_PERL_DIR/etc/conf.d/
ERB_HTTPD_CFG_DIR=$OPENSHIFT_PERL_DIR/usr/etc/conf.d/

# construct the configuration directives for httpd
HTTPD_CMD_CONF="-C 'Include $OPENSHIFT_PERL_DIR/etc/conf.d/*.conf' -f $HTTPD_CFG_FILE"
for dir in /etc/openshift/cart.conf.d/httpd{,/perl} ; do
    [ -d $dir ] && HTTPD_CMD_CONF="$HTTPD_CMD_CONF -c 'Include $dir/*.conf'"
done

# Functions called from case statement below
function start() {
  echo "Starting Perl cartridge"
  write_httpd_passenv $HTTPD_PASSENV_FILE
  select_perl_document_root ${OPENSHIFT_REPO_DIR}
  oo-erb ${ERB_HTTPD_CFG_DIR}openshift.conf.erb > ${HTTPD_CFG_DIR}/openshift.conf
  ensure_valid_httpd_process "$HTTPD_PID_FILE" "$HTTPD_CFG_FILE"
  # Force httpd into its own pgroup, as httpd is hard-coded to TERM everything in
  # its pgroup during shutdown (even while foregrounded)
  set -m
  eval "nohup /usr/sbin/httpd $HTTPD_CMD_CONF -D FOREGROUND |& /usr/bin/logshifter -tag perl &"
  set +m
  [ "$?" == "0" ] && wait_for_pid_file $HTTPD_PID_FILE
}

function stop() {
  echo "Stopping Perl cartridge"
  ensure_valid_httpd_pid_file "$HTTPD_PID_FILE" "$HTTPD_CFG_FILE"
  if [ -f "$HTTPD_PID_FILE" ]; then
    shutdown_httpd_graceful $HTTPD_PID_FILE
  fi
}

function restart() {
  echo "Restarting Perl cartridge"
  ensure_httpd_restart_succeed $HTTPD_PID_FILE $HTTPD_CFG_FILE
  if [ -f "$HTTPD_PID_FILE" ]; then
    httpd_pid=`cat "$HTTPD_PID_FILE" 2> /dev/null`
    kill -HUP $httpd_pid
  else
    start
  fi
}

# Is the packaged software really running?
function status() {
  if [ -f "$HTTPD_PID_FILE" ] && ps --no-headers --pid $(< $HTTPD_PID_FILE) > /dev/null
  then
    client_result 'Perl is running'
  else
    client_result 'Perl is either stopped or inaccessible'
  fi
}

# Clean up any log files
function tidy() {
  client_message "Emptying perl logs in dir: $OPENSHIFT_LOG_DIR"
  shopt -s dotglob
  rm -rf $OPENSHIFT_LOG_DIR/perl.log*
}

case "$1" in
  start)   start ;;
  stop)    stop ;;
  restart) restart ;;
  status)  status ;;
  reload)  restart ;;
  tidy)    tidy ;;
  build)   $OPENSHIFT_PERL_DIR/bin/build ;;
  *)       exit 0
esac
