#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          virtualizor
# Required-Start:    $local_fs $remote_fs $network $syslog $named
# Required-Stop:     $local_fs $remote_fs $network $syslog $named
# Should-Start:      $network $time
# Should-Stop:       $network $time
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Virtualizor is a Control Panel.
# Description:       virtualizor is a web based cloud control panel. "virtualizor".
### END INIT INFO
# (c) Softaculous Ltd.
# Service for EMPS (VIRTUALIZOR)
#
# chkconfig: 2345 99 90
# description: Virtualizor is a cloud control panel \
# which helps you deploy virtual machine.
#
# processname: virtualizor
# config: /usr/local/emps/etc
#

rc=0

# See how we were called.
case "$1" in
  start)

	# Remove the check file first
	rm -rf /usr/local/virtualizor/virtualizor-manually-stopped
    
	# Make sure the log folder exists
	if [ ! -d /var/virtualizor/log ] ; then
		mkdir /var/virtualizor
		mkdir /var/virtualizor/log
	fi
	
	echo "Starting services" > /var/virtualizor/log/virtservice
	
	# Create a hardlink for the Virtualizor Service file
	which systemctl
	if [ $? == '0' ] ; then
		if [ ! -f /etc/systemd/system/virtualizor.service ] ; then
		
			echo "Creating virtualizor.service file for systemd"
			echo "Creating virtualizor.service file for systemd" > /var/virtualizor/log/virtservice
			ln /usr/local/virtualizor/conf/emps/virtualizor.service /etc/systemd/system/virtualizor.service
			
			# Enable the service as well
			systemctl enable virtualizor
			
		fi
	fi
  
	/usr/local/emps/bin/fpmctl start
	/usr/local/emps/bin/nginxctl start
	/usr/local/emps/bin/mysqlctl start
	
	# Do a service check
	/usr/local/emps/bin/php /usr/local/virtualizor/scripts/service_check.php >> /var/virtualizor/log/virtservice 2>&1 &
	
	echo "DONE ! Starting services" >> /var/virtualizor/log/virtservice
	
	;;
  stop)

	touch /usr/local/virtualizor/virtualizor-manually-stopped
	/usr/local/emps/bin/fpmctl stop
	/usr/local/emps/bin/nginxctl stop
	
	currtime=$(date +%s)
	diffallowed=60
	
	killall -9 /usr/local/emps/sbin/nginx > /dev/null 2>&1
	rm -rf /usr/local/emps/var/log/nginx/nginx.pid
	
	# Kill dead NGINX processes
	filemtime=$(stat -c %Y "/usr/local/emps/var/nginx_stop_time" 2>/dev/null)
	diff=$(( (currtime - filemtime) ))
	
	if [ $diff -lt $diffallowed ]; then
		echo "Checking and killing NGINX processes whose binaries are deleted ($diff) !";
		ls -l /proc/*/exe 2>/dev/null | grep "/usr/local/emps/sbin/nginx" | awk -F '/proc/' '{print $2}' | awk -F '/exe' '{print $1}' | xargs kill -9 > /dev/null 2>&1
	fi
	
	touch /usr/local/emps/var/nginx_stop_time
	
	killall -9 /usr/local/emps/sbin/php-fpm > /dev/null 2>&1
	rm -rf /usr/local/emps/var/php-fpm.pid
	rm -rf /usr/local/emps/var/virt9178.sock
	rm -rf /usr/local/emps/var/virt9179.sock
	rm -rf /usr/local/emps/var/virt9180.sock
	
	# Kill dead php-fpm processes
	filemtime=$(stat -c %Y "/usr/local/emps/var/phpfpm_stop_time" 2>/dev/null)
	diff=$(( (currtime - filemtime) ))
	
	if [ $diff -lt $diffallowed ]; then
		echo "Checking and killing PHP-FPM processes whose binaries are deleted ($diff) !";
		ls -l /proc/*/exe 2>/dev/null | grep "/usr/local/emps/sbin/php-fpm" | awk -F '/proc/' '{print $2}' | awk -F '/exe' '{print $1}' | xargs kill -9 > /dev/null 2>&1
	fi
	
	touch /usr/local/emps/var/phpfpm_stop_time
  
	/usr/local/emps/bin/fpmctl stop
	/usr/local/emps/bin/nginxctl stop
	/usr/local/emps/bin/mysqlctl stop
	;;
  status)
  
	/usr/local/emps/bin/fpmctl status
	/usr/local/emps/bin/nginxctl status
	/usr/local/emps/bin/mysqlctl status
	;;
  restart|reload)
    cd "$CWD"
	$0 stop
	rm -rf /usr/local/virtualizor/virtualizor-manually-stopped
	$0 start
	;;
  *)
	echo $"Usage: $0 {start|stop|restart|reload|status}"
	exit 1	
esac

exit $rc