#!/bin/bash
set +x

G_INSPECT_MMLPATH="/opt/huawei/snas/script/inspect_mml"
source $G_INSPECT_MMLPATH/CheckItems
CurInspectNum="254"
CurInspectFun="$(GetInspectType $CurInspectNum)"
RESULTFILE="/tmp/tmpResult${CurInspectFun}"
LOG_FILE="/var/log/inspect.log"
>${RESULTFILE}

G_REMOTE_TMP_FILE1="/tmp/tmpfileProStat1"
G_REMOTE_TMP_FILE2="/tmp/tmpfileProStat2"
>$G_REMOTE_TMP_FILE1
>$G_REMOTE_TMP_FILE2

Queue=""
osc=""
s3fs=""
s3fs_bill=""
memcache=""

POE=""
visitor=""

dns=""
gaussdb_mdc=""
gaussdb_upf=""
isPass=0
nodeName=$(hostname)

function LOG
{
   time=$(date)
   echo [${time}][$$][${CurInspectFun}]$@ >> ${LOG_FILE}
}

function checkS3Servicemanager()
{
	#所有的节点上都有
	Queue=$(sh /opt/obs/service/queue/bin/queue_monitor.sh status|awk -F: '{print $2}')
	LOG "[$LINENO]Queue = $Queue"
	osc=$(sh /opt/obs/service/osc/bin/osc.sh status)
	LOG "[$LINENO]osc = $osc"
	s3fs=$(sh /opt/obs/scripts/s3fs/uds_s3fs.sh status|awk -F: '{print $2}')
	LOG "[$LINENO]s3fs = $s3fs"
	s3fs_bill=$(sh /opt/obs/scripts/s3fs/uds_s3fs_bill.sh status|awk -F: '{print $2}')
	LOG "[$LINENO]s3fs_bill = $s3fs_bill"
	memcache=$(sh /opt/obs/service/memcache/bin/memcache.sh status|awk -F: '{print $2}')
	LOG "[$LINENO]memcache = $memcache"

	#仅OM 主节点有
	sh /opt/obs/service/poe/bin/poe.sh status > $G_REMOTE_TMP_FILE1 2>&1
	POE=$(cat $G_REMOTE_TMP_FILE1|grep running)
	LOG "[$LINENO]POE = $POE"
	sh /opt/obs/service/visitor/bin/visitor.sh status > $G_REMOTE_TMP_FILE2 2>&1
	visitor=$(cat $G_REMOTE_TMP_FILE2|grep running)
	LOG "[$LINENO]visitor = $visitor"

	#OM主备节点都有
	dns=$(sh /opt/obs/scripts/dns/nsd_service.sh status|awk -F: '{print $2}')
	gaussdb_mdc=$(su - gaussdba -c "/opt/huawei/gaussdb/app/bin/gs_ctl query -D /var/uds/user/data_mdc"| grep LOCAL_ROLE | awk -F ':' '{print $2}' | head -1)
	LOG "[$LINENO]gaussdb_mdc = $gaussdb_mdc"
	gaussdb_upf=$(su - gaussdba -c "/opt/huawei/gaussdb/app/bin/gs_ctl query -D /var/uds/user/data_upf"| grep LOCAL_ROLE | awk -F ':' '{print $2}' | head -1)
	LOG "[$LINENO]gaussdb_upf = $gaussdb_upf"
}


function checkS3ServiceBussniss()
{
	#所有的节点上都有
	Queue=$(sh /opt/obs/service/queue/bin/queue_monitor.sh status|awk -F: '{print $2}')
	LOG "[$LINENO]Queue = $Queue"
	osc=$(sh /opt/obs/service/osc/bin/osc.sh status)
	LOG "[$LINENO]osc = $osc"
	s3fs=$(sh /opt/obs/scripts/s3fs/uds_s3fs.sh status|awk -F: '{print $2}')
	LOG "[$LINENO]s3fs = $s3fs"
	s3fs_bill=$(sh /opt/obs/scripts/s3fs/uds_s3fs_bill.sh status|awk -F: '{print $2}')
	LOG "[$LINENO]s3fs_bill = $s3fs_bill"
	memcache=$(sh /opt/obs/service/memcache/bin/memcache.sh status|awk -F: '{print $2}')
	LOG "[$LINENO]memcache = $memcache"
}

function checkResS3Manager()
{
    local role=$1
    local lsrole=$(grep LSRole /opt/huawei/snas/etc/multiaz.ini  | grep -Po '[0-9]+')
    LOG "[$LINENO]lsrole = $lsrole"
    if [[ "$lsrole" == "2" || "$lsrole" == "4" ]];then
        #数据库级联场景，备AZ
        role="Standby"
    fi
    LOG "[$LINENO]role = $role"
    result="NodeType:$NodeType||NodeObjssType:$NodeObjssType||Queue:$Queue||osc:$osc||s3fs:${s3fs}||s3fs_bill:$s3fs_bill||memcache:$memcache||dns:$dns||gaussdb_mdc:$gaussdb_mdc||gaussdb_upf:$gaussdb_upf||POE:$POE||visitor:"$visitor""
    LOG "[$LINENO]result : $result"
    if [[ "$Queue" == "normal" && "$osc" == "running" && "$s3fs" == "normal" && "$s3fs_bill" == "normal" && "$memcache" == "normal" && "$dns" == "normal" && "$gaussdb_mdc" == " ${role}" && "$gaussdb_upf" == " ${role}" && "$POE" == "running" && "$visitor" == "running" ]];then
        Status="normal"
        result="nodeName:${nodeName}||Status:$Status||$result"
        echo "$result"  >> ${RESULTFILE}
    else
        Status="abnormal"
        result="nodeName:${nodeName}||Status:$Status||$result"
        isPass=1
        echo "$result"  >> ${RESULTFILE}
    fi
}

function checkResS3Standby()
{
	local role=$1
	LOG "[$LINENO]role = $role"
	result="NodeType:$NodeType||NodeObjssType:$NodeObjssType||Queue:$Queue||osc:$osc||s3fs:${s3fs}||s3fs_bill:$s3fs_bill||memcache:$memcache||dns:$dns||gaussdb_mdc:$gaussdb_mdc||gaussdb_upf:$gaussdb_upf||POE:$POE||visitor:"$visitor""
	LOG "[$LINENO]result : $result"
	if [[ "$Queue" == "normal" && "$osc" == "running" && "$s3fs" == "normal" && "$s3fs_bill" == "normal" && "$memcache" == "normal" && "$dns" == "normal" && "$POE" != "running" && "$visitor" != "running" ]];then
		Status="normal"
		result="nodeName:${nodeName}||Status:$Status||$result"
		echo "$result" >> ${RESULTFILE}
	else
		Status="abnormal"
		result="nodeName:${nodeName}||Status:$Status||$result"
        isPass=1
		echo "$result" >> ${RESULTFILE}
	fi
}
function checkResS3Buss()
{
	result="NodeType:$NodeType||NodeObjssType:$NodeObjssType||Queue:$Queue||osc:$osc||s3fs:$s3fs||s3fs_bill:$s3fs_bill||memcache:$memcache||dns:||gaussdb_mdc:||gaussdb_upf:||POE:||visitor:"
	LOG "[$LINENO]result : $result"
	if [[ "$Queue" == "normal" && "$osc" == "running" && "$s3fs" == "normal" && "$s3fs_bill" == "normal" && "$memcache" == "normal" ]];then
		Status="normal"
		result="nodeName:${nodeName}||Status:$Status||$result"
		echo "$result" >> ${RESULTFILE}
	else
		Status="abnormal"
		result="nodeName:${nodeName}||Status:$Status||$result"
        isPass=1
		echo "$result" >> ${RESULTFILE}
	fi
}

#获取节点业务类型（主/备节点/业务节点）
function getNodeType()
{
	localIp=$(cat /opt/huawei/snas/etc/snas.ini|grep ipaddr_1|awk -F= '{print $2}')

	LOG "[$LINENO]localIp:$localIp"
	primaryIp=$(cat /proc/monc_hamap|grep role\(1\))
	pIp=$(echo $primaryIp | grep $localIp)
	LOG "[$LINENO]pIp:$pIp"

	standbyIp=$(cat /proc/monc_hamap|grep role\(2\))
	sIp=$(echo $standbyIp | grep $localIp)
	LOG "[$LINENO]sIp:$sIp"

	if [[ "$pIp" != "" ]];then
		return 1 #主节点返回“1”
	elif [[ "$pIp" == "" && "$sIp" != "" ]];then
		return 2 #备节点返回“2”
	else
		return 3	#非主备业务节点返回“3”
	fi
}
#节点存储类型
MapObjsType()
{
	case $1 in
		1)
			echo "DFS"
			;;
		2)
			echo "S3"
			;;
		3)
			echo "Swift"
			;;
		*)
			echo "UNKNOWN"
			;;
	esac
}
#单节点类型
MapNodeType()
{
	case $1 in
		1)
			echo "Primary"
			;;
		2)
			echo "Standby"
			;;
		3)
			echo "Business"
			;;
		*)
			echo "UNKNOWN"
			;;
	esac
}

#获取节点存储类型
node_service_type=$(egrep '[[]|^'node_service_type'=' /opt/huawei/snas/etc/snas.ini | tr -d '\n' | grep -Po '(?<=[[]'NODE'[]]'node_service_type'=)[0-9]+')

if [ "${node_service_type}" == "1" ];then
	echo "nodeName:${nodeName}||Status:Does not involve.||NodeType:--||NodeObjssType:--||Queue:--||osc:||s3fs:--||s3fs_bill:--||memcache:--||dns:--||gaussdb_mdc:--||gaussdb_upf:--||POE:--||visitor:--" >> ${RESULTFILE}
    echo "${CurInspectFun}_Pass $isPass" >>${RESULTFILE}
	LOG "[$LINENO]node_service_type :${node_service_type}.Does not involve"
	exit 0
fi

if [ "${node_service_type}" == "2" -o "${node_service_type}" == "3" ];then
	LOG "[$LINENO]node_service_type :${node_service_type}"
	getNodeType
	NodeTypeNum=$?
	NodeType=$(MapNodeType "$NodeTypeNum")
	NodeObjssType=$(MapObjsType "$node_service_type")
	LOG "[$LINENO]NodeTypeNum:${NodeTypeNum},NodeType:${NodeType},NodeObjssType:${NodeObjssType}"

	case ${NodeTypeNum} in
		1)
			checkS3Servicemanager
			checkResS3Manager "Primary"
		;;
		2)
			checkS3Servicemanager
			checkResS3Standby "Standby"
		;;
		3)
			checkS3ServiceBussniss
			checkResS3Buss
		;;
		*)
			echo "type is error!"
		;;
	esac
fi
echo "${CurInspectFun}_Pass $isPass" >>${RESULTFILE}
[ -f "${G_REMOTE_TMP_FILE1}" ] && rm -f "${G_REMOTE_TMP_FILE1}"
[ -f "${G_REMOTE_TMP_FILE2}" ] && rm -f "${G_REMOTE_TMP_FILE2}"
exit 0

