#!/bin/bash

. ./diag_eio.sh
. ./diag_fc.sh
. ./diag_hang.sh
. ./diag_lock.sh
. ./diag_map.sh
. ./diag_memory.sh
. ./diag_net.sh
. ./diag_pfc.sh
. ./diag_sys.sh

function FAULT_Diagnosis()
{
	(EIO_Diagnosis)&
	(FC_Diagnosis)&
	(HANG_Diagnosis)&
	(LOCK_Diagnosis)&
	(MAP_Diagnosis)&
	(MEM_Diagnosis)&
	(NET_Diagnosis)&
	(PFC_Diagnosis)&
	(SYS_Diagnosis)&
	wait
}

function main()
{
	local opt="$1"
	
	if [ -z "$opt" ];then
		echo "#####Starting to diagnose the module(${opt:-all}) of node($(hostname)), the detailed log is in ${DIAG_LOGFILE}" >&$output_fd
		FAULT_Diagnosis
	else
	
		for m in $opt ;do
			if ! echo "$m" | egrep -i 'eio|fc|hang|lock|map|mem|net|pfc|sys';then
				COMM_Usage "Invalid option:$m"
				return $E_FAIL
			fi
		done

		echo "#####Starting to diagnose the module(${opt:-all}) of node($(hostname)), the detailed log is in ${DIAG_LOGFILE}" >&$output_fd
		for m in $opt ;do
			(
			m=$(echo "$m" | tr 'a-z' 'A-Z')
			${m}_Diagnosis
			) &
    	done
		wait
	fi
	
	echo "#####End of diagnosis" >&$output_fd
	return $E_PASS		
}

echo "++++++++++++++++++++++++++++++++++++++++++++" >>$DIAG_LOGFILE
echo "+                                           " >>$DIAG_LOGFILE
echo "+ DIAG OPT COMMAND: $@                      " >>$DIAG_LOGFILE
echo "+ $(date)                                   " >>$DIAG_LOGFILE
echo "+                                           " >>$DIAG_LOGFILE
echo "++++++++++++++++++++++++++++++++++++++++++++" >>$DIAG_LOGFILE

COMM_SetupLogFile $DIAG_LOGFILE $MAX_LOGFILE_SIZE
set -x


optfg=0
while getopts ":m:h" opt;do
	case "$opt" in
	m)
		main "$OPTARG" ;;
	h)
		COMM_Usage  ;;
	\?)
		COMM_Usage "Invalid option:-$OPTARG" ;;
	:)
		main ;;
	esac
	optfg=1
done

[ $# -eq 0 ] && COMM_Usage "Invalid Option: Requires an argument"
[ $# -gt 0 -a $optfg -eq 0 ] && COMM_Usage  "Invalid Option: $@"


RET=$?
set +x
unset PS4
COMM_UnsetupLogfile

exit $RET
