#!/bin/sh

JIGSAW_HOME=/usr/local/Jigsaw
JIGSAW_SCRIPT=${JIGSAW_HOME}/scripts/jigsaw
LOGDIR=${JIGSAW_HOME}/Jigsaw/logs
LOGFILE=${LOGDIR}/jigsaw 
PIDFILE=/var/run/jigsaw.pid

DUMPDATE=`date +%Y%m%d%H%M%S`

case "$1" in
 start)
  if [ -f ${JIGSAW_SCRIPT} ]; then
   echo "starting jigsaw..."
   echo "##################################################" >> "${LOGFILE}"
   echo "Starting Jigsaw from /etc/init.d/httpd..." >> "${LOGFILE}"
   echo -n "Date: " >> "${LOGFILE}"
   date "+%Y-%m-%d %H:%M:%S" >> "${LOGFILE}"
   echo "##################################################" >> "${LOGFILE}"
   ${JIGSAW_SCRIPT} >> "${LOGFILE}" 2>&1 &
   echo " done"
  else
   echo "CANNOT exec ${JIGSAW_SCRIPT}"
   exit 1
  fi
  ;;

 stop)
  echo "stopping jigsaw..."

  # Retrieve PID of Jigsaw process (note there should one running process at most!)
  jigpid=`ps aux | grep java | grep "org.w3c.jigsaw.Main " | sed -e "s/ +/ /" | xargs echo | cut -d " " -f 2`

  if [ -n "${jigpid}" ]; then
   echo "##################################################" >> "${LOGFILE}"
   echo "Killing Jigsaw from /etc/init.d/httpd..." >> "${LOGFILE}"
   echo -n "Date: " >> "${LOGFILE}"
   date "+%Y-%m-%d %H:%M:%S" >> "${LOGFILE}"

   echo "Heap summary, see: ${LOGDIR}/dump-heap-summary-${DUMPDATE}.log" >> "${LOGFILE}"
   jmap -heap ${jigpid} > "${LOGDIR}/dump-heap-summary-${DUMPDATE}.log"

   echo "Heap dump, see: ${LOGDIR}/dump-heap-histo-${DUMPDATE}.log" >> "${LOGFILE}"
   jmap -F -histo ${jigpid} > "${LOGDIR}/dump-histo-${DUMPDATE}.log"

   echo "Heap binary dump, see: ${LOGDIR}/dump-hprof-${DUMPDATE}.bin" >> "${LOGFILE}"
   jmap -F -dump:format=b,file="${LOGDIR}/dump-hprof-${DUMPDATE}.bin" ${jigpid}

   echo "Thread dump, see below" >> "${LOGFILE}"
   echo "##################################################" >> "${LOGFILE}"

   #Thread dump
   /bin/kill -3 ${jigpid}

   #Wait a bit for thread dump to complete
   sleep 5

   #Kill process
   /bin/kill -9 ${jigpid}
   echo " done"
  else
   echo "Jigsaw server not started!"
   exit 1
  fi
  ;;

 restart)
  $0 stop
  $0 start
  ;;

 *)
  echo "Usage: /etc/init.d/httpd {start|stop|restart}"
  exit 1
  ;;

esac

exit 0

