#!/bin/bash

. /etc/rc.conf
. /etc/rc.d/functions


wait_for_pid () {
	try=0
	while test $try -lt 35 ; do
		case "$1" in
			'created')
			if [ -f "$2" ] ; then
				try=''
				break
			fi
			;;
			'removed')
			if [ ! -f "$2" ] ; then
				try=''
				break
			fi
			;;
		esac

		stat_append '.'
		try=`expr $try + 1`
		sleep 1
	done
}

test_config() {
	stat_busy 'Checking configuration'
	if [ $(id -u) -ne 0 ]; then
		stat_append '(This script must be run as root)'
		stat_die
	fi

	if [ ! -r /etc/php/php-fpm.conf ]; then
		stat_append '(/etc/php/php-fpm.conf not found)'
		stat_die
	fi

	local test=$(/usr/sbin/php-fpm -t 2>&1)
	if [ $? -gt 0 ]; then
		stat_append '(error in /etc/php/php-fpm.conf)'
		stat_die
	elif echo $test | grep -qi 'error'; then
		stat_append '(error in /etc/php/php.ini)'
		stat_die
	fi

	stat_done
}

case "$1" in
	start)
		test_config
		stat_busy 'Starting php-fpm'

		/usr/sbin/php-fpm --daemonize --pid /run/php-fpm/php-fpm.pid

		if [ "$?" != 0 ] ; then
			stat_fail
			exit 1
		fi

		wait_for_pid created /run/php-fpm/php-fpm.pid

		if [ -n "$try" ] ; then
			stat_fail
			exit 1
		else
			add_daemon php-fpm
			stat_done
		fi
	;;

	stop)
		test_config
		stat_busy 'Gracefully shutting down php-fpm'

		if [ ! -r /run/php-fpm/php-fpm.pid ] ; then
			stat_fail
			exit 1
		fi

		kill -QUIT `cat /run/php-fpm/php-fpm.pid`

		wait_for_pid removed /run/php-fpm/php-fpm.pid

		if [ -n "$try" ] ; then
			stat_fail
			exit 1
		else
			rm_daemon php-fpm
			stat_done
		fi
	;;

	force-quit)
		stat_busy 'Terminating php-fpm'

		if [ ! -r /run/php-fpm/php-fpm.pid ] ; then
			stat_fail
			exit 1
		fi

		kill -TERM `cat /run/php-fpm/php-fpm.pid`

		wait_for_pid removed /run/php-fpm/php-fpm.pid

		if [ -n "$try" ] ; then
			stat_fail
			exit 1
		else
			rm_daemon php-fpm
			stat_done
		fi
	;;

	restart)
		$0 stop
		$0 start
	;;

	reload)
		test_config
		stat_busy 'Reload service php-fpm'

		if [ ! -r /run/php-fpm/php-fpm.pid ] ; then
			stat_fail
			exit 1
		fi

		kill -USR2 `cat /run/php-fpm/php-fpm.pid`
		stat_done
	;;

	*)
		echo "usage: $0 {start|stop|force-quit|restart|reload|logrotate}"
		exit 1
	;;

esac