#!/bin/sh
# chkconfig: 345 20 80
# description: Starts/stops QueueMetrics' internal Tomcat

#
# ATTENTION: configs moved to /etc/sysconfig/qm-tomcat6
#

# source function library
. /etc/rc.d/init.d/functions

# pull in sysconfig settings
[ -f /etc/sysconfig/qm-tomcat6 ] && . /etc/sysconfig/qm-tomcat6


start() {
    echo -n "Starting Tomcat8:  "
    su $TOMCAT_OWNER -c $CATALINA_HOME/bin/startup.sh
    sleep 2
    echo "OK"
}

stop() {
    echo -n "Stopping Tomcat8: "
    ORG_JAVA_OPTS="$JAVA_OPTS"
    export JAVA_OPTS="-Xms32M -Xmx64M"
    su $TOMCAT_OWNER -c $CATALINA_HOME/bin/shutdown.sh
    export JAVA_OPTS="$ORG_JAVA_OPTS"
    sleep 8
    HPID=`$JAVA_HOME/bin/jps | grep -e'Bootstrap' | cut -d ' ' -f 1`
    if [ -n "$HPID" ]; then
            echo "Forcing shutdown of PID $HPID ...  "
            kill -9 $HPID
            sleep 10
    fi
    echo "OK"
}

threads() {
    NOW=`date '+%Y.%m.%d-%H.%M.%S'`
    echo "NOW: $NOW"
    HPID=`$JAVA_HOME/bin/jps | grep -e'Bootstrap' | cut -d ' ' -f 1`
    if [ -n "$HPID" ]; then
            $JAVA_HOME/bin/jmap -histo:live $HPID
            $JAVA_HOME/bin/jmap $HPID
            $JAVA_HOME/bin/jstack -l $HPID
    fi
}

# To make this work in OpenJDK:
#
# - enable repo /etc/yum.repos.d/CentOS-Debuginfo.repo
# - yum install yum-utils
# - yum clean all
# - debuginfo-install java-1.8.0-openjdk-devel
#
# ...or install a better JDK :-)
heapdump() {
    echo "Did you remember to install debuginfo?"
    NOW=`date '+%Y%m%d-%H%M'`
    OUTDIR=$CATALINA_HOME/logs/heapdumps
    mkdir -p $OUTDIR
    HPID=`$JAVA_HOME/bin/jps | grep -e'Bootstrap' | cut -d ' ' -f 1`
    if [ -n "$HPID" ]; then
            $JAVA_HOME/bin/jmap -F -dump:live,format=b,file=$OUTDIR/heap.$NOW $HPID
            echo "Compressing file $OUTDIR/heap.$NOW"
            nice gzip $OUTDIR/heap.$NOW
    fi
}

# Typical usage is in crontab:
#    */5 * * * * /etc/init.d/qm-tomcat6 savethreads
savethreads() {
    NOW=`date '+%Y%m%d-%H%M'`
    OUTDIR=$CATALINA_HOME/logs/threaddumps
    mkdir -p $OUTDIR
    echo "Saving thread dump to $OUTDIR/td.$NOW"
    threads > $OUTDIR/td.$NOW
}



# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        start
        ;;
  threaddump)
        threads
        ;;
  savethreads)
        savethreads
        ;;
  heapdump)
        heapdump
        ;;
  cleancache)
        stop
        rm -rf /usr/local/queuemetrics/tomcat/work/*
        ;;
  *)
        echo $"Usage: qm-tomcat6 {start|stop|restart|threaddump|savethreads|heapdump|cleancache}"
        exit
esac

