#!/bin/sh
CUR_PATH=`dirname $0`
source $CUR_PATH/common.sh

REGION_NAME=$1
MODULE_LIST="${FULL_MODULE_LIST}"
if [ "" != "$2" ]
then
	MODULE_LIST=$2
fi

#


# para check
if [ "" = "${REGION_NAME}" ]
then
	echo "no region set."
	exit 1
fi

function process_module_server()
{
	local MODULE_NAME=$1
	local HOST=$2
	local PORT=$3
	local WORK_PATH=$4
	local MODULE_PATH=$5
	local NUM=$6

	if [ $NUM -gt 1 ]
	then
		echo -e "\033[36m ++++++ check [$HOST:$MODULE_NAME] begin ++++++\033[0m" 
	fi
	
	for((idx = 1; idx <= NUM; idx++))
	do
		if [ $idx -gt 1 ]
		then
			local FINAL_MODULE_PATH=$MODULE_PATH$idx
		else
			local FINAL_MODULE_PATH=$MODULE_PATH
		fi
		
		local STAT_INFO="`ssh -f -p${PORT} ${HOST} "source ~/.bash_profile && svstat ${WORK_PATH}/${FINAL_MODULE_PATH}"`"
		
		if [ $? -ne 0 ]
		then
			echo "check ${MODULE_NAME} on ${HOST}, index:${idx} failed."
		return 1
		fi
		echo "${HOST}	${STAT_INFO}"
	done
	return 0
}

function parse_module()
{
	local MODULE_NAME=$1

	# step1: get module info
	MODULE_INFO=`${CUR_PATH}/server_parse ${REGION_NAME}.${MODULE_NAME} host,port,work_path,name,num`
	local parse_ret=$?
	
	if [ $parse_ret -eq 20 ]
	then
		yello_echo "====== `date +%H:%M:%S`: check [${MODULE_NAME}] start ======"
		echo ${MODULE_INFO}
		echo "skip  ${MODULE_NAME}"
		yello_echo "====== `date +%H:%M:%S`: check [${MODULE_NAME}] end ======\n"
		return 0
	fi

	echo -e "\033[36m ====== `date +%H:%M:%S`: check [${MODULE_NAME}] start ======\033[0m"
	if [ $parse_ret -ne 0 ]
	then
		echo ${MODULE_INFO}
		echo "get info of ${REGION_NAME}.${MODULE_NAME} failed."
		return 1
	fi

	# step2: 
	server_parse ${REGION_NAME}.${MODULE_NAME} host,port,work_path,name,num | while read LINE
	do
		process_module_server $MODULE_NAME $LINE
		if [ $? -ne 0 ]
		then
			return 1
		fi
	done

	echo -e "\033[36m ====== `date +%H:%M:%S`: check [${MODULE_NAME}] end ======\033[0m\n"
	return 0
}

function auto_check()
{
	for MODULE_NAME in ${MODULE_LIST}
	do
		parse_module $MODULE_NAME
		if [ $? -ne 0 ]
		then 
			return 1
		fi
	done
	return 0
}

auto_check
