#!/bin/bash
set -eu
echo "$0 $@ [$$] START" >&2


if [ ${1:-} = --help ]; then
	echo Info: запуск и остановка сервисов
	echo Usage: /opt/bin/services
	echo Example: /opt/bin/services
fi


declare EVA_DEPLOY_TYPE=box
declare REDIS_SERVER_ENABLED POSTGRESQL_ENABLED NGINX_ENABLED SSHD_ENABLED
if [[ -f /opt/CONFIG ]]; then
	source /opt/CONFIG
fi


do_start(){
	echo "### Run starting services"
	if [ "${REDIS_SERVER_ENABLED:-TRUE}" = 'TRUE' ]; then
		/etc/init.d/redis-server start || true
	fi
	if [ "${POSTGRESQL_ENABLED:-TRUE}" = 'TRUE' ]; then
		/etc/init.d/postgresql start || true
	fi
	if [[ $EVA_DEPLOY_TYPE = box* ]]; then
		if [ "${NGINX_ENABLED:-TRUE}" = 'TRUE' ]; then
			/etc/init.d/nginx start || true
		fi
		/etc/init.d/converter start || true
	elif [[ $EVA_DEPLOY_TYPE = cloud ]]; then
		# Хак, Надо раскурить systemd,
		#  но при старте vm он сам не стартует.
		#  Есть гипотеза, что из-за этого: systemctl disable postgresql@13-main
		if [ "${POSTGRESQL_ENABLED:-TRUE}" = 'TRUE' ]; then
			systemctl start "postgresql@13-main"
		fi
	fi
	if [ "${SSHD_ENABLED:-FALSE}" = 'TRUE' ]; then
		/etc/init.d/ssh start || true
	fi
	/etc/init.d/wsgidav start || true
	/etc/init.d/eva-app start || true
	/etc/init.d/eva-celery start || true
	/etc/init.d/cron start || true
	return 0
}


do_restart(){
	echo "### Run restarting services"
	do_stop
	do_start
	return 0
}


do_stop(){
	echo "### Run stopping services..."
	# TODO1: иногда зависает stop и БД не успевает остановиться
	# нужно килять процессы жесче
	/etc/init.d/cron stop &
	/etc/init.d/wsgidav stop &
	/etc/init.d/eva-celery stop &
	/etc/init.d/eva-app stop &

	if [[ $EVA_DEPLOY_TYPE = box ]]; then
		if [ "${NGINX_ENABLED:-TRUE}" = 'TRUE' ]; then
			/etc/init.d/nginx stop &
		fi
		/etc/init.d/converter stop &
	fi
	sleep 10

	if [ "${POSTGRESQL_ENABLED:-TRUE}" = 'TRUE' ]; then
		/etc/init.d/postgresql stop || true
	fi
	if [ "${REDIS_SERVER_ENABLED:-TRUE}" = 'TRUE' ]; then
		/etc/init.d/redis-server stop || true
	fi
	wait || true
	if [ "${SSHD_ENABLED:-FALSE}" = 'TRUE' ]; then
		/etc/init.d/ssh stop || true
	fi
	# Бажный скрипт в комплекте.
	# Скрипт исправлен, раскомментировать если будут появляться лишние процессы.
	# killall redis-server 2>/dev/null || true
	sleep 3
	echo "### Stopping done. Run pstree -upal (must be only wrapper)"
	pstree -upal
	return 0
}



do_$1
echo "$0 $@ [$$] SUCCESS" >&2
exit 0
