#!/bin/sh
#
# Are you sure you switched to Linie 2, Before. if yes proceed
# -     jcmd <pid> GC.heap_dump <file>
# - jcmd <pid> Thread.print > <file>
# Wait for finishing heat dumps / thread print
# Instructions for Jboss restart for Online colleague
# Check in server.log if jboss is running fine (last messages) ? Switch back to Linie 1
#- Connect to HTTPd server Linie1 and start systemctl start httpd;
# 6. Send mail to Michael Faber
# To use it create if /usr/local/jboss/standalone/log/jcmd/ not existing
# mkdir -p /usr/local/jboss/standalone/log/jcmd/
# Author: Georgi Georgiev hipo@pc-freak.net

SERVER_LOG='/usr/local/jboss/standalone/log/server.log';
GREP_STRING='JBAS014134';
GC_heap_log=/usr/local/jboss/standalone/log/jcmd/GC.heap_dump.out
Thread_log=/usr/local/jboss/standalone/log/jcmd/Thread_print.out
Jmap_log=/usr/local/jboss/standalone/log/jcmd/jmap_log.out
MAIL_TO='michael.faber@equensworldline.com';


dump_gc_heap () {
read -p '| !!! Are you sure you you switched to Linie 2 [ Y / N ] ? !!! : ' linie;

echo "||| $linie";
if [[ "$linie" == "Y" ]] || [[ "$linie" == "y" ]]; then
echo "Proceeding with G.heap_dump into $GC_heap_log.$(date +%d-%m-%y-%M)";
echo "Proceeding with Thread.print.out $Thread_log.$(date +%d-%m-%y-%M)";
java_pid=$(pgrep java)
echo sudo -u jboss jcmd $java_pid GC.heap_dump $GC_heap_log."$(date +%d-%m-%y-%M)"
echo "sudo -u jboss jcmd $java_pid Thread.print >> $Thread_log."$(date +%d-%m-%y-%M)""
echo "sudo -u jboss jmap $java_pid >> $Jmap_log."$(date +%d-%m-%y-%M)""
sudo -u jboss jcmd $java_pid GC.heap_dump $GC_heap_log."$(date +%d-%m-%y-%M)"
sudo -u jboss jcmd $java_pid Thread.print >> $Thread_log."$(date +%d-%m-%y-%M)"
if [[ $? == '0' ]]; then echo "Thread.print file created"; fi
sudo -u jboss jmap $java_pid >> $Jmap_log."$(date +%d-%m-%y-%M)"

echo 'Dump of java pid: $java_pid GC.heap_dump completed';
echo -e 'Dump of java pid: $java_pid Thread.print completed \n\n';

echo 'Next: Jboss restart run on Linie1 commands:';
echo 'sudo systemctl stop jbosseap6.service';
echo 'sudo systemctl start jbosseap6.service'
echo 'Check in server.log if jboss is running fine (last messages) ? Switch back to Linie 1'
echo "Print last 500 log lines Run: tail -n 500 $SERVER_LOG";
else
echo 'Existing ...';
exit 1;
fi

}

# this function is not used could be enabled if necessery
jcb_err () {
JCB_OUT=$(tail -n 10000 $SERVER_LOG | grep -i "$GREP_STRING");
if [[ $JCB_OUT ]]; then
echo "ERROR: $JCB_OUT JBAS014134: EJB Invocation failed on component" |tee -a $LOG_F_ZABBIX
#echo "NOT OK";
echo "ERROR IN APPLICATION CHECK !!!!!!!!!! pool-available-count !!!!!!!!!!!";

echo "$(date '+%Y-%m-%d %H:%M:%S') Server | TIME_WAIT | Connections count netstat -etna|grep -i TIME_WAIT: $(netstat -etna|grep -i TIME_WAIT|wc -l)" >> $LOG_F_LOCAT
OK='1';
#exit 1;
fi
}


#restart_jboss () {
#/bin/systemctl stop jbosseap6.service
#sleep 5;
#/bin/systemctl start jbosseap6.service
#}

send_mail () {
if [ $? == "0" ]; then
if [ ! -f /var/tmp/mail_jcmd_dump_restart_jboss.pid ]; then

echo -e "$(hostname): jboss6.service restarted on $(date +%d.%m.%Y) by $USERNAME $(id) \n\n Dump files generated: \n /usr/local/jboss/log/Thread.print.out \n /usr/local/jboss/log/GC.heap_dump.out" | mailx -s "jboss on $hostname restarted by $(id)" $MAIL_TO && rm -f /var/tmp/mail_jcmd_dump_restart_jboss.pid
fi
fi

}

main () {
dump_gc_heap;
#jcb_err;
send_mail;
}
main;

