#!/bin/sh

#
# romaưå
#
export HEALTHCHK_LOG=/var/log/roma/healthchk.log
export HEALTHCHK_BADLOG=/var/log/roma/healthchk.bad
echo roma health cheking at `date` > $HEALTHCHK_LOG

# roma桼ˤäߤƤ֤ǤʤȤǧ
#  - /var/run/roma.pid¸ߤǧ롣¸ߤʤϲ줫
#    桼ˤäߤƤ
#    romadisposewatcherˤäƸФǤ
if [ -s /var/run/roma.pid ];
	then
		export ROMAPID=`cat /var/run/roma.pid`
		echo roma is running. >> $HEALTHCHK_LOG
		break;
	else
		echo roma is not running. >> $HEALTHCHK_LOG
		exit 0;
fi

# ưromaIPɥ쥹/ݡֹroma.confROMAHOSTPORTسǼ
# θwgetޥɤѤƼºݤ˥Ԥ
rm -f /tmp/health-check

# forwardreversemain_http_host_portν񼰤ۤʤ뤿ʬ
ROMAPROXYMODE=`grep 'main_proxy_mode' /opt/nec/roma/etc/roma.conf | head -n 1 | sed 's/main_proxy_mode[^(0-9)]*\([(0-9)]*\)/\1/'`
if [ $ROMAPROXYMODE == 3 ]; 
	then
		#echo "roma is running in reverse proxy mode."
		ROMAHOSTPORT_=`grep 'main_http_host_port' /opt/nec/roma/etc/roma.conf | head -n 1 | sed 's/main_http_host_port \([(0-9).]*\)[^(0-9)]*\([(0-9)]*\)[^(0-9)]*.*/\1:\2/'`
		ROMAHOSTPORT2_=`grep 'main_http_host_port' /opt/nec/roma/etc/roma.conf | head -n 1 | sed 's/main_http_host_port \([(0-9).]*\)[^(0-9)]*\([(0-9)]*\)[^(0-9)]*.*/\1 \2/'`
		break;
	else
		#echo "roma is running in forward proxy mode."
		ROMAHOSTPORT_=`grep 'main_http_host_port' /opt/nec/roma/etc/roma.conf | head -n 1 | sed 's/main_http_host_port \([(0-9).]*\)[^(0-9)]*\([(0-9)]*\)/\1:\2/'`
		ROMAHOSTPORT2_=`grep 'main_http_host_port' /opt/nec/roma/etc/roma.conf | head -n 1 | sed 's/main_http_host_port \([(0-9).]*\)[^(0-9)]*\([(0-9)]*\)/\1 \2/'`
		export http_proxy=http://$ROMAHOSTPORT/
fi

ROMAHOSTPORT=`echo $ROMAHOSTPORT_ | perl -p -i -e "s/(^|[\. \:])0+([1-9])/\1\2/g"`
ROMAHOSTPORT2=`echo $ROMAHOSTPORT2_ | perl -p -i -e "s/(^|[\. ])0+([1-9])/\1\2/g"`
#echo $ROMAHOSTPORT
#echo $ROMAHOSTPORT2

#internal objectΥץե
ROMAINTPREFX=`grep 'main_internal_objects_prefix' /opt/nec/roma/etc/roma.conf | head -n 1 | sed 's/main_internal_objects_prefix[ ]*\([^\n.]*\)/\1/'`
ROMAINTPRFXLEN=`echo $ROMAINTPREFX | wc -w`
if [ $ROMAINTPRFXLEN == 0 ];
	then
		ROMAINTPREFX="roma-internal"
fi

#echo trying URL is http://$ROMAHOSTPORT/$ROMAINTPREFX/health-check
TESTURL=http://$ROMAHOSTPORT/$ROMAINTPREFX/health-check
OUTFILE=/tmp/health-check

# download check file, retry 5 times, interval 10sec.
DOWNLDOK=0
WK=0
while [ $WK -lt 5 ]; do
        rm -f /tmp/health-check
        #wget -T 5 -w 5 -P /tmp -q http://$ROMAHOSTPORT/$ROMAINTPREFX/health-check > /dev/null 2>&1 &
        /opt/nec/roma/bin/romachk-get $ROMAHOSTPORT2 $TESTURL $OUTFILE 2>&1 &
        sleep 10
        if [ -f $OUTFILE ];
            then
                DOWNLDOK=1
                break;
        fi
        ((WK++))
        #echo wget: timeout occured, retry
done

ADMIN=$3
# 餫Υե뤬Ǥɤǧ
if [ $DOWNLDOK == '1' ];
	then
		# exists. do nothing.
		echo okay. >> $HEALTHCHK_LOG
		break;
	else
		/bin/touch /var/log/roma/icpcheck.status
		echo "roma of `hostname -s` may be dead at `date`." >> $HEALTHCHK_LOG
		#echo "roma of `hostname -s` may be dead at `date`." | mail -s "notice of `hostname -s`" $ADMIN
		/usr/sbin/tcpdump -s 1500 -w /var/log/roma/tcpdump.dat -i any -c 300 >& /var/tmp/romachk.log &
		/bin/tar -czvlf /var/log/roma/roma_errs.tar.gz /var/log/roma/roma_err.* >& /var/tmp/romachk.log
		netstat -n > /var/log/roma/netstat-n.txt
		netstat -s > /var/log/roma/netstat-s.txt
		ps -ax > /var/log/roma/ps-ax.txt
		vmstat 1 1 > /var/log/roma/vmstat.txt
		top b n 1 > /var/log/roma/top.txt
		tail -n 100 /var/log/roma/access_log > /var/log/roma/lastaccess.txt
		tail -n 100 /var/log/roma/roma_log > /var/log/roma/lastromalog.txt
		tail -n 100 /var/log/messages > /var/log/roma/lastmessages.txt
		if [ -s /var/run/watcher.pid ];
			then
				echo watcher exists. >> $HEALTHCHK_LOG
				#kill -QUIT $ROMAPID >& /dev/null
				kill -USR2 $ROMAPID >& /dev/null
				sleep 60
				kill -TRAP $ROMAPID >& /dev/null
				break;
			else
				echo watcher does not exist. >> $HEALTHCHK_LOG
				#kill -QUIT $ROMAPID >& /dev/null
				kill -USR2 $ROMAPID >& /dev/null
				sleep 60
				kill -TRAP $ROMAPID >& /dev/null
				sleep 15
				rm -f /var/run/roma.pid >& /dev/null
				echo abort > /proc/net/CacheBlast/param/api&
				sleep 3
				/etc/init.d/roma start
				break;
		fi
		sleep 30
		if [ -s /var/run/roma.pid ]; 
			then
				echo restart succeeded. >> $HEALTHCHK_LOG
				#echo "roma of `hostname -s` was restarted at `date`." | mail -s "notice of `hostname -s`" $ADMIN
				break;
			else
				echo cannot restart the roma... >> $HEALTHCHK_LOG
				#echo "cannot restart roma of `hostname -s` at `date`." | mail -s "ALERM OF `hostname -s`"  $ADMIN
				#reboot
				break;
		fi
		break;
		cat $HEALTHCHK_LOG >> $HEALTHCHK_BADLOG
fi
