#!/bin/bash
VERSION="1.0"

CATALINA_FILEPATH="/servershare/common/tomcat/current/bin/catalina.sh"

check_root_permission()
{
    if [ $(id -u) != 0 ]; then
        echo
        echo "Please run this script with root permissions:"
        echo
        echo "sudo bash $0"
        echo
        exit 1
    fi
}

backup() {
    CATALINA_DIR=$(dirname $CATALINA_FILEPATH)
    CURRENT=$(date +%F-%H-%M-%S)
    BACKUP_FILENAME="$CATALINA_DIR/catalina.sh_$CURRENT"
    cp -p $CATALINA_FILEPATH $BACKUP_FILENAME
    echo "backup catalina.sh to $BACKUP_FILENAME"
}


restart_tomcat() {

    /etc/init.d/tomcat restart &> /dev/null
}

run_get-current-settings() {
    Xmx=$(ps aux | grep tomcat | grep MaxPermSize | grep Xmx | awk '{print $18}' | awk -F"-" '{print $2}')
    echo "Maximum Heap Memory: $Xmx"
}

run_increase-max-memory() {
    # backup
    sed -i s/^JAVA_OPTS\=\"\$JAVA_OPTS\ \-Xms8192m\ \-Xmx16384m\ \-XX\:MaxPermSize\=4096m\ \-XX\:\+HeapDumpOnOutOfMemoryError\ \-XX\:\+UseG1GC\ \-server\"$/JAVA_OPTS\=\"\$JAVA_OPTS\ \-Xms8192m\ \-Xmx51200m\ \-XX\:MaxPermSize\=4096m\ \-XX\:\+HeapDumpOnOutOfMemoryError\ \-XX\:\+UseG1GC\ \-server\"/g $CATALINA_FILEPATH
    restart_tomcat
    if ps aux | grep tomcat | grep MaxPermSize | grep "\-Xms8192m\ \-Xmx51200m" > /dev/null; then 
        echo -e "\e[1;32m[SUCCESS]\e[0m Updated $CATALINA_FILEPATH: increased max heap memory (Xmx) to 51200m"
    else
        echo -e "\e[1;31m[ERROR]\e[0m Failed to update $CATALINA_FILEPATH to desired max heap memory setting"
    fi
}

run_restore-max-memory() {
    # backup
    sed -i s/^JAVA_OPTS\=\"\$JAVA_OPTS\ \-Xms8192m\ \-Xmx51200m\ \-XX\:MaxPermSize\=4096m\ \-XX\:\+HeapDumpOnOutOfMemoryError\ \-XX\:\+UseG1GC\ \-server\"$/JAVA_OPTS\=\"\$JAVA_OPTS\ \-Xms8192m\ \-Xmx16384m\ \-XX\:MaxPermSize\=4096m\ \-XX\:\+HeapDumpOnOutOfMemoryError\ \-XX\:\+UseG1GC\ \-server\"/g $CATALINA_FILEPATH
    restart_tomcat
    if ps aux | grep tomcat | grep MaxPermSize | grep "\-Xms8192m\ \-Xmx16384m" > /dev/null; then 
        echo -e "\e[1;32m[SUCCESS]\e[0m Restore $CATALINA_FILEPATH: restored max heap memory (Xmx) to 16384m"
    else
        echo -e "\e[1;31m[ERROR]\e[0m Failed to restore $CATALINA_FILEPATH to the original max heap memory setting"
    fi    
}

maincmd=$(basename $0)

usage() {
    echo "Name: $maincmd, Version: $VERSION"
    echo
    echo "Usage: $maincmd <subcommand> [options]"
    echo "Subcommands:"
    echo "  increase-max-memory: increase tomcat max heap memory to 51200MB"
    echo "  restore-max-memory: restore tomcat max heap memory to 16384MB"
    echo "  get-current-settings: get current tomcat settings, i.e. max heap memory"
}

check_root_permission

subcmd=$1
case $subcmd in
    '' | '-h' | '--help' )
        usage
        ;;
    * )
        shift
        run_${subcmd} $@
        if [ $? = 127 ]; then
            echo "Error: '$subcmd' is not valid subcommand." >&2
            echo "  sudo bash $maincmd --help"
        fi
        ;;
esac

