#!/bin/bash

source $OPENSHIFT_CARTRIDGE_SDK_BASH
cartridge_type="python-$OPENSHIFT_PYTHON_VERSION"

#  Source in the utility functions.
pycart_dir="${OPENSHIFT_PYTHON_DIR}"
source "$pycart_dir/versions/$OPENSHIFT_PYTHON_VERSION/lib/utils"


function _is_running() {
   if [ -f "$pycart_dir/run/appserver.pid" ]; then
      zpid=$(cat "$pycart_dir/run/appserver.pid" 2> /dev/null)
      myid=$(id -u)
      if `ps -opid,args --pid $zpid 2>&1 | grep "app.py" &> /dev/null`; then
         return 0
      fi
   fi

   return 1

}  #  End of function  _is_running.


function _start_service() {
   if _is_running; then
      echo "$cartridge_type application is already running" 1>&2
      return 0
   fi

   pushd $OPENSHIFT_REPO_DIR > /dev/null
   source "$pycart_dir/bin/activate_virtenv"

   nohup python -u app.py > "$pycart_dir/logs/appserver.log" 2>&1 &
   pid=$!
   echo "$pid" > "$pycart_dir/run/appserver.pid"

   sleep 5

   #BZ 908673
   #popd > /dev/null

}  #  End of function  _start_service.


function _stop_service() {
   if ! _is_running; then
      echo "$cartridge_type application is already stopped!" 1>&2
      return 0
   fi

   if [ -f "$pycart_dir/run/appserver.pid" ]; then
      zpid=$(cat "$pycart_dir/run/appserver.pid" 2> /dev/null)
   fi

   if [ -n "$zpid" ]; then
      /bin/kill $zpid
      ret=$?
      if [ $ret -eq 0 ]; then
         TIMEOUT=10
         while [ $TIMEOUT -gt 0 ] &&  _is_running ; do
            /bin/kill -0 "$zpid" > /dev/null 2>&1  ||  break
            sleep 1
            let TIMEOUT=${TIMEOUT}-1
         done
      fi
   fi


}  #  End of function  _stop_service.


function _restart_service() {
   _stop_service  ||  :
   _start_service

}  #  End of function  _restart_service.


function status() {
   if output=$(curl http://$OPENSHIFT_PYTHON_IP:$OPENSHIFT_PYTHON_PORT/ &> /dev/null)
   then
      client_result "Application is running"
      client_result $output
   else
      client_result "Application is either stopped or inaccessible"
   fi
}

function build() {
   $OPENSHIFT_PYTHON_DIR/versions/$OPENSHIFT_PYTHON_VERSION/bin/build
}

function deploy() {
   $OPENSHIFT_PYTHON_DIR/versions/$OPENSHIFT_PYTHON_VERSION/bin/deploy
}

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

case "$1" in
   start)                    _start_service    ;;
   graceful-stop|stop)       _stop_service     ;;
   restart|reload|graceful)  _restart_service  ;;
   status)                   status            ;;
   build)                    build             ;;
   deploy)                   deploy            ;;
   tidy)                     tidy              ;;
esac

