#!/bin/sh
export HEALTHCHK_LOG=/var/log/roma/wpad-healthchk.log
export HEALTHCHK_BADLOG=/var/log/roma/wpad-healthchk.bad
echo wpad-httpd health cheking at `date` > $HEALTHCHK_LOG

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" != "0" ];
	then
		echo roma mode not forward. >> $HEALTHCHK_LOG
		exit 0;
fi

WAPDPID_PATH=/var/run/wpad-httpd.pid
WPADPID=`pgrep -P 1 wpad-httpd`
if [ -f $WAPDPID_PATH ];
	then
		WPADPID_1=`cat $WAPDPID_PATH`
		if [ "$WPADPID" == "" ];
			then
				sleep 1
				if [ -f $WAPDPID_PATH ];
					then
						WPADPID_2=`cat $WAPDPID_PATH`
						if [ "$WPADPID_1" == "$WPADPID_2" ];
							then
								logger -t wpadchk Process of the wpad-httpd did not exist.
								echo "wpad-httpd is not running." >> $HEALTHCHK_LOG
								service wpad-httpd start
								sleep 5
								WPADPID=`pgrep -P 1 wpad-httpd`
								if [ "$WPADPID" == "" ];
									then
										RUNLEVEL=`grep 'id:' /etc/inittab | head -n 1 | sed 's/id:\([0-9]*\):initdefault:/\1/'`
										WPADOSRUN=`ls /etc/rc.d/rc${RUNLEVEL}.d | grep '^S[0-9]*wpad'`
										WPADSET=`grep -E 'PROXY .+ PROXY' /opt/nec/wpad/wpad.dat | head -n 1`
										if [ "$WPADOSRUN" == "" ] && [ "$WPADSET" == "" ];
											then
											echo "wpad-httpd is not system running or not set." >> $HEALTHCHK_LOG
											cat $HEALTHCHK_LOG >> $HEALTHCHK_BADLOG
											exit 0;
										fi
										echo "system reboot." >> $HEALTHCHK_LOG
										cat $HEALTHCHK_LOG >> $HEALTHCHK_BADLOG
										sleep 1
										reboot
										exit 0;
								fi
								echo "wpad-httpd is restarted." >> $HEALTHCHK_LOG
								cat $HEALTHCHK_LOG >> $HEALTHCHK_BADLOG
								exit 0;
							else
								echo "checked in restart of wpad-httpd." >> $HEALTHCHK_LOG
						fi
					else
						echo "wpad-httpd is not useing1." >> $HEALTHCHK_LOG
						exit 0;
				fi
		fi
	else
		if [ "$WPADPID" == "" ];
			then
				echo "wpad-httpd is not useing2." >> $HEALTHCHK_LOG
				exit 0;
		fi
fi

OUTFILE=/tmp/wpad-healthchk

# download check file, retry 5 times, interval 10sec.
DOWNLDOK=0
WK=0
GETCHKFLG=0
TESTURL=/proxy.pac
while [ $WK -lt 5 ]; do
	#ꥯwpadchk-getĤäƤ齪λ
	pkill wpadchk-get >& /dev/null
	rm -f /tmp/wpad-healthchk
	/opt/nec/wpad/wpadchk-get 127.0.0.1 80 $TESTURL $OUTFILE 2>&1 &
	sleep 10
	if [ -f $OUTFILE ];
		then
			DOWNLDOK=1
			break;
		else
			echo "wpadchk-get faile host:`hostname -s`  date:`date`." >> $HEALTHCHK_LOG
			GETCHKFLG=1
	fi
	((WK++))
done

# 餫Υե뤬Ǥɤǧ
if [ $DOWNLDOK == '1' ];
	then
		# exists. do nothing.
		echo wpad-httpd is running. >> $HEALTHCHK_LOG
		echo okay. >> $HEALTHCHK_LOG
		#1Ǥƻ˼ԤĤ
		if [ "$GETCHKFLG" == "1" ];
			then
				cat $HEALTHCHK_LOG >> $HEALTHCHK_BADLOG
		fi
		break;
	else
		#wpad-httpdߤƤʤȤǧ
		logger -t wpadchk Response was not returned from wpad-httpd.
		echo "wpad-httpd is not running." >> $HEALTHCHK_LOG
		WPADPID=`pgrep -P 1 wpad-httpd`
		kill -s 9 $WPADPID
		sleep 1
		WPADPID=`pgrep -P 1 wpad-httpd`
		if [ "$WPADPID" == "" ];
			then
				service wpad-httpd start
				CNT=0
				while [ $CNT -le 5 ];do
					WPADPID=`pgrep -P 1 wpad-httpd`
					if [ "$WPADPID" != "" ];
						then
							echo "wpad-httpd is running." >> $HEALTHCHK_LOG
							break;
					fi
					((CNT++))
					sleep 1
				done
				if [ $CNT -ge 5 ];then
					echo "reboot wpad-httpd start failed." >> $HEALTHCHK_LOG
					RUNLEVEL=`grep 'id:' /etc/inittab | head -n 1 | sed 's/id:\([0-9]*\):initdefault:/\1/'`
					WPADOSRUN=`ls /etc/rc.d/rc${RUNLEVEL}.d | grep '^S[0-9]*wpad'`
					WPADSET=`grep -E 'PROXY .+ PROXY' /opt/nec/wpad/wpad.dat | head -n 1`
					if [ "$WPADOSRUN" == "" ] && [ "$WPADSET" == "" ];
						then
						echo "wpad-httpd is not system running or not set." >> $HEALTHCHK_LOG
						cat $HEALTHCHK_LOG >> $HEALTHCHK_BADLOG
						exit 0;
					fi
					echo "system reboot." >> $HEALTHCHK_LOG
					cat $HEALTHCHK_LOG >> $HEALTHCHK_BADLOG
					sleep 1
					reboot
				fi
			else
				echo "reboot wpad-httpd stop failed." >> $HEALTHCHK_LOG
				RUNLEVEL=`grep 'id:' /etc/inittab | head -n 1 | sed 's/id:\([0-9]*\):initdefault:/\1/'`
				WPADOSRUN=`ls /etc/rc.d/rc${RUNLEVEL}.d | grep '^S[0-9]*wpad'`
				WPADSET=`grep -E 'PROXY .+ PROXY' /opt/nec/wpad/wpad.dat | head -n 1`
				if [ "$WPADOSRUN" == "" ] && [ "$WPADSET" == "" ];
					then
					echo "wpad-httpd is not system running or not set." >> $HEALTHCHK_LOG
					cat $HEALTHCHK_LOG >> $HEALTHCHK_BADLOG
					exit 0;
				fi
				echo "system reboot." >> $HEALTHCHK_LOG
				cat $HEALTHCHK_LOG >> $HEALTHCHK_BADLOG
				sleep 1
				reboot
		fi
		cat $HEALTHCHK_LOG >> $HEALTHCHK_BADLOG
fi
exit 0
