#!/bin/bash
#
#FilterMonitorDetect ver1.0.3
#
# usage: 
#	 FilterMonitorDetect  callfunc detectflg tracelevel
#
# Description: 
#	 Detect AirFlow
#
#Copyright (C) 2012 NEC Corporation.
#If you tamper with the source, the behavior of the FilterMonitor is not guaranteed.
############################################################################################################
#include files
. $PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorUsage
. $PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorCommonFunc
. $PATHPREFIX/etc/FilterMonitor/MessageList

export PATH=${PATH}:"/bin:/sbin:/usr/bin:/usr/bin:/usr/sbin"

#define Values##############################################

callfunc=$1
detectflg=$2
tracelevel=$3
funcname=FilterMonitorDetect
SetPath=/etc/FilterMonitor
FM_IPMI_WriteSEL=1
NONCRITI=0
CRITI=1
DESASSERT=0
ASSERT=1

AirFlowResult=0
AirFlowData=0
PreAirFlowStatus=0
PreAbnormalStatus=0
Refvalue=0
Threasholds=0
AirFlowDetectVal=0

PreDataNum=4
DetectDataNum=5

normal=1
clogged=2
abnormal=3

CloggedFlg=0

#permission for new files
umask 077

#define functions###########################################
#finalization
Finalize()
{
	$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "$funcname end"

	exit $1
}

#when internal error occurs show error messages and put syslog
ShowAlert()
{
	if [ $1 -eq 1 ]
	then
		echo -e "Internal error occurs. Please contact to customer service for the support."
	fi
	$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog syslog $funcname ERR $tracelevel $callfunc "${msg[16]}"
}


#Abnormal AirFlow(beta) check
CheckAbnormalBeta(){
	filename=$1

	$PATHPREFIX/usr/bin/FilterMonitor/FM_FileDataChk $filename
	if [ $? -ne 0 ]
	then
		ShowAlert $detectflg 
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Can not access $filename."
		Finalize 1

	fi

	export IFS=","
	read -a Sensorinfo < $PATHPREFIX/$SetPath/$filename
	AirFlowResult=${Sensorinfo[5]}
	AirFlowData=${Sensorinfo[3]}
	PreAirFlowStatus=${Sensorinfo[1]}
	PreAbnormalStatus=${Sensorinfo[0]}
	Refvalue=${Sensorinfo[2]}
	Threasholds=${Sensorinfo[4]}

	if [ $AirFlowResult -eq 3 ]
	then
		#Abnormal AirFlow(beta) occurs
		if [ $PreAbnormalStatus -eq 1 ]
		then
			#Previous Status was Abnormal
			$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname DEBUG $tracelevel $callfunc "Previous Status was Abnormal."
			return 3
		fi

		#Previous status was not Clogged. it stayed Clogged.
		if [ $PreAirFlowStatus -eq 1 ]
		then
			$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Abnormal AirFlow(beta) occurs at $sensornum."
			return 3
		fi

		#Abnormal AirFlow(alpha) occurs, WriteSEL to abnormal status
#FIX-NONCRITI
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorIPMI $callfunc $tracelevel $FM_IPMI_WriteSEL $sensornum $ASSERT $NONCRITI $AirFlowData $ThresdHold 0
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog syslog $funcname WARN $tracelevel $callfunc \
"${msg[18]} SensorNum:$sensornum"
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Abnormal AirFlow(beta) occurs at $sensornum."
		echo "1,$PreAirFlowStatus,$Refvalue,$AirFlowData,$AbnomalValue,$AirFlowResult" > \
$PATHPREFIX/$SetPath/$filename
		return 3

	#Not Abnormal AirFlow(beta)
	else
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname DEBUG $tracelevel \
$callfunc "Not Abnormal AirFlow(beta) at $sensornum."
		return 1
	fi
}


#Abnormal AirFlow(alpha) check    
CheckAbnormalAlpha(){
	PreAirFlowData=$1
	AbnormalValue=$2
	filename=$3

	$PATHPREFIX/usr/bin/FilterMonitor/FM_FileDataChk $filename
	if [ $? -ne 0 ]
	then
		ShowAlert $detectflg 
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Can not access $filename."
		Finalize 1

	fi

	export IFS=","
	read -a Sensorinfo < $PATHPREFIX/$SetPath/$filename
	AirFlowResult=${Sensorinfo[5]}
	AirFlowData=${Sensorinfo[3]}
	PreAirFlowStatus=${Sensorinfo[1]}
	PreAbnormalStatus=${Sensorinfo[0]}
	Refvalue=${Sensorinfo[2]}
	Threasholds=${Sensorinfo[4]}

	$PATHPREFIX/usr/bin/FilterMonitor/FM_FileDataChk "FilterMonitorSetting"
	if [ $? -ne 0 ]
	then
		ShowAlert $detectflg 
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Can not access FilterMonitorSetting."
		Finalize 1

	fi
	#get AllowedChange value
	AllowedChange=`expr ${AbnormalValue} \* ${PreAirFlowData}`

	#get lowerabnormal
	lowerabnormal=`expr ${PreAirFlowData} \* 100 \- ${AllowedChange}`
	lowercheckval=`expr ${AirFlowData} \* 100`

	#get upperabnormal---2
	upperabnormal=`expr ${PreAirFlowData} \* 100 \+ ${AllowedChange}`
	uppercheckval=`expr ${AirFlowData} \* 100`

	if [ ${lowercheckval} -gt  ${lowerabnormal} ]
	then
		if [ ${uppercheckval} -lt ${upperabnormal} ]
		then	
			$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname DEBUG $tracelevel $callfunc "Not Abnormal AirFlow(alpha)."
			return 1
		fi
	fi

	#Abnormal AirFlow(alpha) occurs
	if [ $PreAbnormalStatus -eq 1 ]
	then
		#Previous Status was Abnormal
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname DEBUG $tracelevel $callfunc "Previous Status was Abnormal."
		return 3
	fi

	#Previous status was not Clogged. it stayed Clogged.
	if [ $PreAirFlowStatus -eq 1 ]
	then
		#Abnormal AirFlow(alpha) was occurs
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Abnormal AirFlow(alpha) occurs at $sensornum."
		return 3
	fi
	#First time Abnormal AirFlow(alpha) occurs, WriteSEL to abnormal status,trace,syslog
	$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorIPMI $callfunc $tracelevel $FM_IPMI_WriteSEL $sensornum $ASSERT $NONCRITI $AirFlowData $AbnormalValue 0
	$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Abnormal AirFlow(alpha) occurs at $sensornum."
	$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog syslog $funcname WARN $tracelevel $callfunc "${msg[18]}SensorNum:$sensornum"

	echo "1,$PreAirFlowStatus,$Refvalue,$AirFlowData,$AbnormalValue,$AirFlowResult" > $PATHPREFIX/$SetPath/$filename
	return 3
}

#detect Clogged AirFilter
IsCloggedFilter(){

	AirFlowTotal=$1
	AirFlowDetectVal=$2
	filename=$3

	$PATHPREFIX/usr/bin/FilterMonitor/FM_FileDataChk $filename
	if [ $? -ne 0 ]
	then
		ShowAlert $detectflg 
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Can not access $filename."
		Finalize 1

	fi

	export IFS=","
	read -a Sensorinfo < $PATHPREFIX/$SetPath/$filename
	AirFlowResult=${Sensorinfo[5]}
	AirFlowData=${Sensorinfo[3]}
	PreAirFlowStatus=${Sensorinfo[1]}
	PreAbnormalStatus=${Sensorinfo[0]}
	Refvalue=${Sensorinfo[2]}
	Threasholds=${Sensorinfo[4]}

	$PATHPREFIX/usr/bin/FilterMonitor/FM_FileDataChk "FilterMonitorSetting"
	if [ $? -ne 0 ]
	then
		ShowAlert $detectflg 
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Can not access FilterMonitorSetting."
		Finalize 1

	fi

	#get allowed value
	AllowedChange=`expr ${Refvalue} \* ${AirFlowDetectVal} \* ${DetectDataNum}`

	#get comp and detect value
	DetectValue=`expr ${AirFlowTotal} \* 100 \+ ${AllowedChange}`
	CompValue=`expr ${Refvalue} \* 100 \* ${DetectDataNum}`

	#check ( ( nAirFlowSum * 100 + nAllowedChange ) < ( nReferenceValue * 100 * DETECT_DATA_NUM ) )
	if [ $DetectValue -lt  $CompValue ]
	then
		#Clogged occurs
		if [ $PreAirFlowStatus -eq 1 ]
		then
			#Previous Status was Clogged
			$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname DEBUG $tracelevel $callfunc "Previous Status was Clogged at $sensornum."
			return 2
		fi

		#Before status was Abnormal. so need to announce recover from Abnormal then Clogged occurs
		if [ $PreAbnormalStatus -eq 1 ]
		then
			$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorIPMI $callfunc $tracelevel $FM_IPMI_WriteSEL $sensornum $DESASSERT $NONCRITI $AirFlowData $AirFlowDetectVal 0
			$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc \
			"The SensorStatus recovered from abnormal. $sensornum."
			$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog syslog $funcname INFO $tracelevel $callfunc "${msg[4]} SensorNum:$sensornum"	
		fi

		#Clogged occurs, WriteSEL to AirFlowstatus
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorIPMI $callfunc $tracelevel $FM_IPMI_WriteSEL $sensornum $ASSERT $CRITI $AirFlowData $AirFlowDetectVal 0
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Filter is Clogged at $sensornum."
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog syslog $funcname WARN $tracelevel $callfunc "${msg[17]} SensorNum:$sensornum"
		
		echo "0,1,$Refvalue,$AirFlowData,$AirFlowDetectVal,$AirFlowResult" > $PATHPREFIX/$SetPath/$filename
		return 2
	else
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname DEBUG $tracelevel \
$callfunc "No Clogged at $sensornum."
		return 1
	fi
}

#write data for data files
WriteData(){

	airflowfile=$1
	AirFlowDetectVal=$2 
	datacount=$3

	#read data from each sensor info file
	$PATHPREFIX/usr/bin/FilterMonitor/FM_FileDataChk $filename
	if [ $? -ne 0 ]
	then
		ShowAlert $detectflg 
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Can not access $filename."
		Finalize 1

	fi

	export IFS=","
	read -a Sensorinfo < $PATHPREFIX/$SetPath/$filename
	AirFlowData=${Sensorinfo[3]}
	Refvalue=${Sensorinfo[2]}
	reduceValue=`expr ${Refvalue} \/ 100 \* ${AirFlowDetectVal}`

	$PATHPREFIX/usr/bin/FilterMonitor/FM_FileDataChk "FilterMonitorSetting"
	if [ $? -ne 0 ]
	then
		ShowAlert $detectflg 
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Can not access FilterMonitorSetting."
		Finalize 1
	fi
	export IFS=","
	read -a Setting < $PATHPREFIX/$SetPath/FilterMonitorSetting
	DataPath=${Setting[5]}
	Interval=${Setting[10]}
	CalibDate=${Setting[13]}

	#get interval day
	if [ $Interval -eq 0 ]
	then
		Intervalday=1
	else
		Intervalday=`expr ${Interval} '*' 7`
	fi
# Highball-S
#	now=$(echo $(date '+%Y%m%d%H%M%S') $(printf '%03d' $(expr `date +%N` / 1000000)))
	now=$(echo $(date '+%Y%m%d%H%M%S'))
	day=(`echo $now | cut -c 1-8`)
	time=(`echo $now | cut -c 9-14`)
#	ms=(`echo $now | cut -c 16-18`)
	ms=000
# Highball-E

	tempdata=`echo "$day,$time$ms,$AirFlowData,$Refvalue,$AirFlowDetectVal,$reduceValue,$CalibDate,$Intervalday"`

# HighBall-S
#	echo "$tempdata"> $PATHPREFIX/$DataPath/$airflowfile
# HighBall-E
#
# HighBall-S
#	if [ $datacount -eq 0 ]
#	if [ $datacount -ne 0 ]
# HighBall-E
#	then
#
# HighBall-S
#		echo "$tempdata"> $PATHPREFIX/$DataPath/$airflowfile
#	else
#		sed "1i\\${tempdata}" $PATHPREFIX/$DataPath/$airflowfile > $PATHPREFIX/$DataPath/temp
#		cat $PATHPREFIX/$DataPath/$airflowfile >> $PATHPREFIX/$DataPath/temp
# HighBall-E
#		mv -f $PATHPREFIX/$DataPath/temp $PATHPREFIX/$DataPath/$airflowfile
#	fi

# Highball-S
	if [ $datacount -eq 0 ]
	then

		echo -e "$tempdata" > $PATHPREFIX/$DataPath/$airflowfile
	else
		echo -e "$tempdata" > $PATHPREFIX/$DataPath/temp
		cat $PATHPREFIX/$DataPath/$airflowfile >> $PATHPREFIX/$DataPath/temp
		mv -f $PATHPREFIX/$DataPath/temp $PATHPREFIX/$DataPath/$airflowfile
	fi
# Highball-E




}


#Detection Start
$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "$funcname Start"

export IFS=","
read -a Setting < $PATHPREFIX/$SetPath/FilterMonitorSetting
# HighBall-S
#HWID=${Setting[0]}
SKU=${Setting[0]}
# HighBall-E
DataPath=${Setting[5]}
LastAirFlowDate=${Setting[14]}

if [ ! -e $DataPath ]
then
	mkdir $DataPath
fi

#check &reading data from FilterMonitorSetting
$PATHPREFIX/usr/bin/FilterMonitor/FM_FileDataChk "FilterMonitorSetting"
if [ $? -ne 0 ]
then 
	if [ $? -eq 3 ]
	then
		ShowAlert $detectflg 
# HighBall-S
#		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "HWID is not found in SKUDefine."
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "SKU is not found in SKUDefine."
# HighBall-E
		Finalize 1
	else
		ShowAlert $detectflg 
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Can not access FilterMonitorSetting."
		Finalize 1
	fi

fi

#setting fist Airflow flg
if [ $LastAirFlowDate = "19700101" ]
then
	FistAirFlowFlg=1
else
	FistAirFlowFlg=0
fi

#Setting default IFS
IFS=$'\n'$'\t'" "
#get sensor info files names
filenames=(`ls $PATHPREFIX/$SetPath/*_Setting 2>/dev/null`)
#get each sensor file name

for (( i = 0 ; i < ${#filenames[*]} ; i++ ))
{
#justcommentin

filename="`basename ${filenames[i]}`"

#Highball-S
#sensornum=(`echo $filename | cut -c 6-7`)
sensornum=(`echo $filename | cut -d "_" -f2`)
#Highball-E

#check file and reading data from SKUDefine
# HighBall-S
#$PATHPREFIX/usr/bin/FilterMonitor/FM_FileDataChk "SKUDefine" $HWID $sensornum
$PATHPREFIX/usr/bin/FilterMonitor/FM_FileDataChk "SKUDefine" $SKU $sensornum
# HighBall-E
if [ $? -ne 0 ]
then
	ShowAlert $detectflg 
	$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel #$callfunc "Can not access SKUDefine."
	Finalize 1

fi
export IFS=","
# HighBall-S
#SKU=(`echo $sensordata | grep "$HWID,$sensornum" $PATHPREFIX/$SetPath/"SKUDefine"`)
SKU=(`echo $sensordata | grep "$SKU,$sensornum" $PATHPREFIX/$SetPath/"SKUDefine"`)
# HighBall-E
AirFlowDetectVal=${SKU[4]}
AbnormalValue=${SKU[5]}

#Highball-S
#airflowfile=(`echo $filename | cut -c 1-7`)
#airflowfile=(`echo $filename | -d "_" -f1-2`)
airflowfile=(`echo $filename | cut -d "_" -f1-2`)
#Highball-E

#create AirFlowData Files
if [ $FistAirFlowFlg -eq 1 ]
then

	touch $PATHPREFIX/$DataPath/$airflowfile 2>/dev/null
	if [ $? -eq 1 ]
	then
		ShowAlert $detectflg 
		$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc \
"Can not make AirFlow Data Files."
		Finalize 1
	fi
fi

#is there airflow data?
if [ ! -f $PATHPREFIX/$DataPath/$airflowfile ]
then
	ShowAlert $detectflg 
	$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "There is no Airflow data or can not access the file."
	Finalize 1
fi

#Get ref from sensor's info files
$PATHPREFIX/usr/bin/FilterMonitor/FM_FileDataChk $filename
if [ $? -ne 0 ]
then
	ShowAlert $detectflg 
	$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Can not access $filename."
	Finalize 1

fi
#reading Refvalue and status
if [ ! -f $PATHPREFIX/$SetPath/$sensornum ]
then
	ShowAlert $detectflg 
	$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Can not access $sensornum CalibValue."
	Finalize 1

fi
Ref=0
Prestatus="normal"
export IFS=","
read -a CalibVStatus < $PATHPREFIX/$SetPath/$sensornum
Ref=${CalibVStatus[0]}
#reading PreStatus
Prestatus=${CalibVStatus[1]}

export IFS=","
read -a Sensorinfo < $PATHPREFIX/$SetPath/$filename
AirFlowResult=${Sensorinfo[5]}
AirFlowData=${Sensorinfo[3]}
Refvalue=$Ref
Threasholds=${Sensorinfo[4]}

if [ $Prestatus = "clogged" ]
then
	PreAirFlowStatus=1
else
	if [ $Prestatus = "abnormal" ]
	then
		PreAbnormalStatus=1
	else 
		PreAirFlowStatus=0
		PreAbnormalStatus=0
	fi
fi

echo "$PreAbnormalStatus,$PreAirFlowStatus,$Refvalue,$AirFlowData,$AirFlowDetectVal,$AirFlowResult" > $PATHPREFIX/$SetPath/$filename

#check abnormalBeta
CheckAbnormalBeta  $filename
if [ $? -eq 1 ]
then

	#count airflow data
	datacount=0
	datacount=(`wc -l < $PATHPREFIX/$DataPath/$airflowfile`)

	#there is no Airflow data, then put Refvalue in PreAirFlowData or get previous data
	if [ $datacount -eq 0 ]
	then
		PreAirFlowData=${Refvalue}
	else	
		
		export IFS=","
		read -a ReadAirFlowdata < $PATHPREFIX/$DataPath/$airflowfile
		PreAirFlowData=${ReadAirFlowdata[2]}
	fi

	#check abnormal alpha
	CheckAbnormalAlpha $PreAirFlowData $AbnormalValue $filename
	if [ $? -eq 1 ]
	then
		#check the amount of data
		IFS=$'\n'$'\t'" "
		if [ $datacount -lt $PreDataNum ]
		then	
			#less than $PreDataNum
			WriteData $airflowfile $AirFlowDetectVal $datacount
			echo "0,0,$Refvalue,$AirFlowData,$AirFlowDetectVal,$AirFlowResult" > $PATHPREFIX/$SetPath/$filename
			#Recover from Abnormal Airflow. 
			if [ $PreAbnormalStatus -eq 1 ]
			then
				$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorIPMI $callfunc $tracelevel $FM_IPMI_WriteSEL $sensornum $DESASSERT $NONCRITI $AirFlowData $AirFlowDetectVal 0
				$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "The SensorStatus recovered from abnormal. $sensornum."
				$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog syslog $funcname INFO $tracelevel $callfunc "${msg[4]} SensorNum:$sensornum"
			fi
		else
			#get total from previous data
			totalvalue=0
			count=0
			while read LINE; do
				export IFS=","
				predata=(${LINE})
				totalvalue=`expr ${totalvalue} \+ ${predata[2]}`
				count=`expr ${count} \+ 1`
				if [ $count -eq $PreDataNum ]
				then
					break	
				fi
			done < $PATHPREFIX/$DataPath/$airflowfile

			#add current airflow to total
			totalvalue=`expr ${totalvalue} \+ ${AirFlowData}`

			IsCloggedFilter $totalvalue $AirFlowDetectVal $filename
			if [ $? -eq 1 ]
			then
#				WriteData $airflowfile $AirFlowDetectVal $datacount
				$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname DEBUG $tracelevel $callfunc "Normal Airflow at $sensornum."
#check get previous sensorstatus
			#Recover from Airflow clogged?
			if [ $PreAirFlowStatus -eq 1 ]
			then

				$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorIPMI $callfunc $tracelevel $FM_IPMI_WriteSEL $sensornum $DESASSERT $CRITI $AirFlowData $AirFlowDetectVal 0
				$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "The SensorStatus recovered from clogged.$sensornum."
				$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog syslog $funcname INFO $tracelevel $callfunc "${msg[3]} SensorNum:$sensornum"
			fi

			#Recover from Abnormal Airflow. 
			if [ $PreAbnormalStatus -eq 1 ]
			then
				$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorIPMI $callfunc $tracelevel $FM_IPMI_WriteSEL $sensornum $DESASSERT $NONCRITI $AirFlowData $AirFlowDetectVal 0
				$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "The SensorStatus recovered from abnormal. $sensornum."
				$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog syslog $funcname INFO $tracelevel $callfunc "${msg[4]} SensorNum:$sensornum"
			fi

			#Airflowstatus,AbnormalStatu set to 0
			$PATHPREFIX/usr/bin/FilterMonitor/FM_FileDataChk $filename
			if [ $? -ne 0 ]
			then
				ShowAlert $detectflg 
				$PATHPREFIX/usr/bin/FilterMonitor/FilterMonitorLog tracelog $funcname INFO $tracelevel $callfunc "Can not access $filename."
				Finalize 1

			fi
			#write date for detection
			echo "0,0,$Refvalue,$AirFlowData,$AirFlowDetectVal,$AirFlowResult" > $PATHPREFIX/$SetPath/$filename
			fi
			WriteData $airflowfile $AirFlowDetectVal $datacount
#check clogged exit
		fi
#check abnormal-alpha exit
	fi

#check abnormalBeta exit
fi
}
#for end

################################################
#check each sensor status
#S-fix for Ver1.0.3
AbnormalStatusFlg=0
AirFlowStatusFlg=0
#E-fix for Ver1.0.3
IFS=$'\n'$'\t'" "
#get sensor info files names
filenames=(`ls $PATHPREFIX/$SetPath/*_Setting 2>/dev/null`)
for (( i = 0 ; i < ${#filenames[*]} ; i++ ))
{	
	filename="`basename ${filenames[i]}`"
	export IFS=","
	read -a Sensorinfo < $PATHPREFIX/$SetPath/$filename
	AbnormalStatusFlg=`expr ${AbnormalStatusFlg} \+ ${Sensorinfo[0]}`
	AirFlowStatusFlg=`expr ${AirFlowStatusFlg} \+ ${Sensorinfo[1]}`

}

#Write the result of detections.
StatusResult=1
if [ $AbnormalStatusFlg -ne 0 ]
then
	StatusResult=3
fi

if [ $AirFlowStatusFlg -ne 0 ]
then
	StatusResult=2
fi

export IFS=","
read -a Setting < $PATHPREFIX/$SetPath/FilterMonitorSetting
# HighBall-S
#HWID=${Setting[0]}
SKU=${Setting[0]}
# HighBall-E
AirFlowAbnomalPointMaxNum=${Setting[1]}
IPMITOOL_RetryNum=${Setting[2]}
CalibrationRetryNum=${Setting[3]}
DataPath=${Setting[5]}
LogDirectory=${Setting[6]}
LogTraceLevel=${Setting[7]}
Hour=${Setting[8]}
Minute=${Setting[9]}
Interval=${Setting[10]}
DayofWeek1=${Setting[11]}
DayofWeek2=${Setting[12]}
CalibDate=${Setting[13]}
LastAirFlowDate=${Setting[14]}
Func_RetryNum=${Setting[15]}
SensorNum=${Setting[16]}

today=`date +%Y%m%d`

# HighBall-S
#echo "$HWID,$AirFlowAbnomalPointMaxNum,$IPMITOOL_RetryNum,$CalibrationRetryNum,$StatusResult,$DataPath,$LogDirectory,$LogTraceLevel,$Hour,\
#$Minute,$Interval,$DayofWeek1,$DayofWeek2,$CalibDate,$today,$Func_RetryNum,$SensorNum"> $PATHPREFIX/$SetPath/FilterMonitorSetting
echo "$SKU,$AirFlowAbnomalPointMaxNum,$IPMITOOL_RetryNum,$CalibrationRetryNum,$StatusResult,$DataPath,$LogDirectory,$LogTraceLevel,$Hour,\
$Minute,$Interval,$DayofWeek1,$DayofWeek2,$CalibDate,$today,$Func_RetryNum,$SensorNum"> $PATHPREFIX/$SetPath/FilterMonitorSetting
# HighBall-E


#check SensorStatus
$PATHPREFIX/usr/bin/FilterMonitor/FM_FileDataChk "FilterMonitorSetting"
export IFS=","
read -a Setting < $PATHPREFIX/$SetPath/FilterMonitorSetting
finalSensorStatus=${Setting[4]}

if [ $detectflg -eq 1 ]
then
	case $finalSensorStatus in
		"$normal") 
		echo -e "The dust filter is normal."
		;;	
		"$clogged")
		echo -e "The dust filter is clogged. Please replace the filter."
		;;
		"$abnormal")
		echo -e "Abnormal AirFlow detected. Please execute status command to check."
		;;
		"*")
		ShowAlert $detectflg
		;;
	esac
fi

Finalize 0

