#!/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
declare HA_ROLE
if [[ -f /opt/CONFIG ]]; then
	source /opt/CONFIG
fi

ulimit -n 65536 || true


do_start() {
	echo "### Run starting services"
	if [ "${SSHD_ENABLED:-FALSE}" = 'TRUE' ]; then
		/etc/init.d/ssh start || true
	fi
	if [ "${REDIS_SERVER_ENABLED:-TRUE}" = 'TRUE' ] && [ "${HA_ROLE:-master}" = 'master' ]; then
		/etc/init.d/redis-server start || true
	fi
	if [ "${POSTGRESQL_ENABLED:-TRUE}" = 'TRUE' ]; then
		/etc/init.d/postgresql start || true
	fi
	if [ "${HA_ROLE:-master}" == 'master' ]; then
		/etc/init.d/uwsgi-emperor start || true
	fi
	return 0
}


do_restart() {
	# TODO: warning in uwsgi mode to use container restart
	echo "### Run restarting services"
	do_stop
	do_start
	return 0
}


do_status(){
	echo "### Run services status"
	local srv
	for srv in ssh redis-server postgresql uwsgi-emperor; do
		echo "service - $srv"
		"/etc/init.d/$srv" status || true
	done
	return 0
}


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

	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
