#!/bin/bash
# LGSM fn_monitor function
# Author: Daniel Gibbs
# Website: http://gameservermanagers.com
# Version: 150815

# Description: Monitors server by checking for running proccesses
# then passes to fn_monitor_query.

local modulename="Monitor"

fn_monitor_teamspeak3(){
fn_check_root
fn_check_systemdir
fn_logs
fn_printdots "${servername}"
fn_scriptlog "${servername}"
sleep 1
if [ ! -f "${rootdir}/${lockselfname}" ]; then
	fn_printinfo "Disabled: No lock file found"
	fn_scriptlog "Disabled: No lock file found"
	sleep 1
	echo -en "\n"
	echo "To enable monitor run ./${selfname} start"
	exit
fi
fn_printdots "Checking session: CHECKING"
fn_scriptlog "Checking session: CHECKING"
sleep 1
fn_check_ts3status
if [ "${ts3status}" = "Server is running" ]; then
	fn_printok "Checking session: OK"
	fn_scriptlog "Checking session: OK"
	sleep 1
	sleep 0.5
	echo -en "\n"
	exit
else
	fn_printfail "Checking session: FAIL"
	fn_scriptlog "Checking session: FAIL"
	sleep 1
	fn_printfail "Checking session: FAIL: ${ts3status}"
	fn_scriptlog "Checking session: FAIL: ${ts3status}"
	failurereason="${ts3status}"
	if [ "${emailnotification}" = "on" ]; then
		subject="${servicename} Monitor - Restarting ${servername}"
		actiontaken="restarted ${servername}"
		fn_emailnotification
	fi
fi
sleep 0.5
echo -en "\n"
fn_restart
}

fn_monitor_tmux(){
fn_check_root
fn_check_systemdir
fn_check_ip
fn_details_config
fn_printdots "${servername}"
fn_scriptlog "${servername}"
sleep 1
if [ ! -f "${rootdir}/${lockselfname}" ]; then
	fn_printinfo "Disabled: No lock file found"
	fn_scriptlog "Disabled: No lock file found"
	sleep 1
	echo -en "\n"
	echo "To enable monitor run ./${selfname} start"
	exit
fi

updatecheck=$(ps -ef|grep "${selfname} update"|grep -v grep|wc -l)
if [ "${updatecheck}" = "0" ]||[ "${gamename}" == "Unreal Tournament 99" ]||[ "${gamename}" == "Unreal Tournament 2004" ]; then
	fn_printdots "Checking session: CHECKING"
	fn_scriptlog "Checking session: CHECKING"
	sleep 1
	tmuxwc=$(tmux list-sessions 2>&1|awk '{print $1}'|grep -v failed|grep -Ec "^${servicename}:")
	if [ "${tmuxwc}" -eq 1 ]; then
		fn_printok "Checking session: OK"
		fn_scriptlog "Checking session: OK"
		sleep 1
		echo -en "\n"

		if [ "${engine}" == "avalanche" ]||[ "${engine}" == "goldsource" ]||[ "${engine}" == "realvirtuality" ]||[ "${engine}" == "source" ]||[ "${engine}" == "spark" ]||[ "${engine}" == "unity3d" ]||[ "${engine}" == "unreal" ]||[ "${engine}" == "unreal2" ]; then
			fn_monitor_query
		fi
		exit
	else
		fn_printfail "Checking session: FAIL"
		fn_scriptlog "Checking session: FAIL"
		sleep 1
		echo -en "\n"
		if [ "${emailnotification}" = "on" ]; then
			subject="${servicename} Monitor - Starting ${servername}"
			failurereason="${servicename} process not running"
			actiontaken="${servicename} has been restarted"
			fn_email
		fi
		fn_scriptlog "Monitor is starting ${servername}"
		fn_start
	fi
else
	fn_printinfonl "SteamCMD is currently checking for updates"
	fn_scriptlog "SteamCMD is currently checking for updates"
	sleep 1
	fn_printinfonl "When update is complete ${servicename} will start"
	fn_scriptlog "When update is complete ${servicename} will start"
	sleep 1
fi
}

if [ "${gamename}" == "Teamspeak 3" ]; then
	fn_monitor_teamspeak3
else
	fn_monitor_tmux
fi
