#!/bin/bash

retry="1 2 3 4 5";

prod="nsg_php_mon"

#exec 0>&- # close stdin
exec 1>&- # close stdout
exec 2>&- # close stderr

logit ()
{
	data="$1"
	echo "$prod: $data"
	logger "$prod: $data"
}

eval "type pstack 2> /dev/null > /dev/null"
if [ $? -ne 0 ]; then
	logit "Error: pstack utility not found !"
	exit 1
fi

while [ 1 ]
do

	#Grab all nsg-php-cgi processes
	procs=`ps fax | grep nsg-php-cgi | grep -v grep | awk '{ print $1 }'`

	for pid in $procs
	do
		eval "pstack $pid | grep \"__lll_lock_wait_private\" > /dev/null"
		if [ $? -eq 0 ]; then
			stuck=0;

			#Debian friendly :)
			for try in $retry
			do
				eval "pstack $pid | grep \"__lll_lock_wait_private\" > /dev/null"
				if [ $? -eq 0 ]; then
					logit "Warning: PHP Process $pid might be stuck!"
					stuck=1;
				else
					stuck=0;
					break;
				fi
				usleep 100
			done

			if [ $stuck -gt 0 ]; then
				logit "Error: PHP Process $pid is stuck killing it"
				eval "kill -9 $pid &2> /dev/null"
			fi
			
		fi

	done

	sleep 1

done

