#!/bin/sh
set +x
#MON connection Status with each subsystem
G_SCRIPT_PATH="/opt/inspect"
G_INSPECT_MMLPATH="/opt/huawei/snas/script/inspect_mml"
. $G_SCRIPT_PATH/inspect_map.sh
source ${G_INSPECT_MMLPATH}/CheckItems
source ${G_INSPECT_MMLPATH}/CommonFunc.sh
LOG_FILE="/var/log/inspect.log"
CurInspectNum="204"
CurInspectFun=`GetInspectType $CurInspectNum`
TMP_FILE="/tmp/tmpMapInfofile$$"

RESULTFILE="/tmp/tmpResult${CurInspectFun}"
>$RESULTFILE

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

isPass=0
strNormal="Normal"
len=${#strNormal}
LOCAL_BACK_IP=`GetLocalIp`
if [ -z "${LOCAL_BACK_IP}" ]; then
    echo "[ERR]Node:--||INFO:Can't get backend IP."  >> ${RESULTFILE}
    LOG "[$LINENO]ERR: CheckBalanceStatus Local_BACK_IP is empty, abort!"
    exit 1
fi

#жǷudsƷ
ProductType=$(cat "/opt/huawei/snas/etc/snas.ini"|grep productType|awk -F= '{print $2}')
#ȡڵ洢
node_service_type=$(egrep '[[]|^'node_service_type'=' /opt/huawei/snas/etc/snas.ini | tr -d '\n' | grep -Po '(?<=[[]'NODE'[]]'node_service_type'=)[0-9]+')

#ȡDsMapϢ
isOK=0
isFound=0
cat /proc/monc_dsmap >${TMP_FILE}
head_info="******************** DS Map *********************"
echo "Node:${LOCAL_BACK_IP}||INFO:$head_info" >> ${RESULTFILE}
DsMapNum=`cat ${TMP_FILE} | grep IpAddr | wc -l`
set_ifs
for line in `cat ${TMP_FILE}`
do
    tmp=`echo ${line} | grep 'ucState' `
    if [ "${tmp}" == "" ]; then
        continue
    fi
    ucstate=`echo ${line}  | grep 'ucState' | awk '{print $12}'`
    if [ "${ucstate:0:$len}" != "Normal" ];then
        LOG "[$LINENO]$LOCAL_BACK_IP monc_dsmap ucstate($ucstate) is not Normal"
        echo "[ERR]Node:${LOCAL_BACK_IP}||INFO:ucstate($ucstate) is not Normal from command(cat /proc/monc_dsmap)." >> ${RESULTFILE}
        isOK=1
        isPass=1
    fi
    isFound=1
done

if [ "${isFound}" == "0" ]; then
    LOG "[$LINENO]$LOCAL_BACK_IP cat /proc/monc_dsmap isFound(${isFound})"
    echo "[ERR]Node: ${LOCAL_BACK_IP}||INFO:ucState flag is not found from command(cat /proc/monc_dsmap)!" >> ${RESULTFILE}
    isPass=1
elif [ "$isOK" == "0" ]; then
    echo "Node: ||INFO:All DS Map Normal" >> ${RESULTFILE}
fi

#UDS,S3,swiftֻDS map
if [ "${service_type}" != "1" ] || [ $ProductType -eq 80 ];then
    continue
fi


#ȡMdsMapϢ
cat /proc/monc_mdsmap >${TMP_FILE}

isFound=0
isOK=0
head_info="**************** Active MDS Map *****************"
echo "Node: ||INFO:$head_info" >> ${RESULTFILE}
for line in $(cat ${TMP_FILE})
do
    tmp=`echo ${line} | grep 'State' `
    if [ "${tmp}" == "" ]; then
        continue
    fi
    state=`echo ${line}  | grep 'State' | awk '{print $6}'`
    if [ "${state:0:$len}" != "Normal" ];then
        LOG "[$FUNCNAME]${LOCAL_BACK_IP} monc_mdsmap state($state) is not Normal"
        echo "[ERR]Node:${LOCAL_BACK_IP}||INFO:state($state) is not Normal from command(cat /proc/monc_mdsmap)." >> ${RESULTFILE}
        isPass=1
        isOK=1
    fi
    isFound=1
done

if [ "${isFound}" == "0" ]; then
    LOG "[$LINENO]${LOCAL_BACK_IP} cat /proc/monc_mdsmap isFound(${isFound}))"
    echo "[ERR]Node:${LOCAL_BACK_IP}||INFO:ucState flag is not found or not Normal from command(cat /proc/monc_mdsmap)!" >> ${RESULTFILE}
    isPass=1
elif [ "$isOK" == "0" ]; then
    echo "Node: ||INFO:All MDS Map Normal" >> ${RESULTFILE}
fi


#ca map״̬###################################################################
isFound=0
isOK=0
head_info="******************** CA Map *********************"
echo "Node: ||INFO:$head_info" >> ${RESULTFILE}
cat /proc/monc_camap  >${TMP_FILE}
for line in $(cat ${TMP_FILE})
do
    tmp=`echo ${line} | grep 'State' `
    if [ "${tmp}" == "" ]; then
        continue
    fi
    state=`echo ${line}  | grep 'State' | awk '{print $6}'`
    if [ "${state:0:$len}" != "Normal" ];then
        LOG "[$LINENO]${LOCAL_BACK_IP} monc_mdsmap state($state) is not Normal"
        echo "[ERR]Node:${LOCAL_BACK_IP}||INFO:state($state) is not Normal from command(cat /proc/monc_camap)" >> ${RESULTFILE}
        isOK=1
        isPass=1
    fi
    isFound=1
done

if [ "${isFound}" == "0" ]; then
    LOG "[$LINENO]${LOCAL_BACK_IP} cat /proc/monc_mdsmap isFound(${isFound}))"
    echo "[ERR]Node: ${LOCAL_BACK_IP}||INFO:ucState is not found from command(cat /proc/monc_camap)!" >> ${RESULTFILE}
    isPass=1
elif [ "$isOK" == "0" ]; then
    echo "Node: ||INFO:All CA Map Normal" >> ${RESULTFILE}
fi




#pip map״̬###################################################################
cat /proc/monc_pipmap  >${TMP_FILE}
isFound=0
isOK=0
head_info="******************** PIP Map *********************"
echo "Node: ||INFO:$head_info" >> ${RESULTFILE}
for line in $(cat ${TMP_FILE})
do
    tmp=`echo ${line} | grep 'State'`
    if [ "${tmp}" == "" ]; then
        continue
    fi

    nodeIp=$(echo ${line} | awk '{print $3}')
    node_service_type=$(get_service_type_from_db "${nodeIp}")
    if [ "${node_service_type}" != "1" ]; then
        continue
    fi

    state=`echo ${line}  | grep 'State' | awk '{print $5}'`
    if [ "${state:0:$len}" != "Normal" ];then
        LOG "[$LINENO]$LOCAL_BACK_IP monc_pipmap state($state) is not Normal"
        echo "[ERR]Node:$LOCAL_BACK_IP||INFO:state($state) is not Normal from command(cat /proc/monc_pipmap)." >> ${RESULTFILE}

        isOK=1
        isPass=1
    fi
    isFound=1
done

if [ "${isFound}" == "0" ]; then
    LOG "[$FUNCNAME]$LOCAL_BACK_IP cat /proc/monc_pipmap isFound(${isFound}))"
    echo "[ERR]Node: $LOCAL_BACK_IP||INFO:ucState is not found from command(cat /proc/monc_pipmap)."  >> ${RESULTFILE}
    isPass=1
elif [ "$isOK" == "0" ]; then
    echo "Node: ||INFO:All PIP Map Normal" >> ${RESULTFILE}
fi


#mon map״̬###################################################################
isFound=0
isOK=0
head_info="******************** Mon Map *********************"
echo "Node: ||INFO:$head_info" >> ${RESULTFILE}
/usr/local/bin/MmlBatch 988 "monc monmap 0"  >${TMP_FILE} 2>&1
sed -i -e 's/\x1B\[0;[3-4][0-9]m//g' -e 's/\x0D//g' -e 's/\x00//g' ${TMP_FILE} >/dev/null 2>&1

MonMapNum=`cat ${TMP_FILE} | grep iRank | wc -l`
if [ $MonMapNum -ne $DsMapNum ]; then
    echo "[ERR]Node: $LOCAL_BACK_IP||INFO: MonMapNum:$MonMapNum, NeedMonMapNum($DsMapNum)!" >> ${RESULTFILE}
    isPass=1
else
    echo "Node: ||INFO:All Mon Map Normal" >> ${RESULTFILE}
fi

restore_ifs
[ -f "${TMP_FILE}" ] &&  rm -f "${TMP_FILE}"
echo "${CurInspectFun}_Pass ${isPass}" >>${RESULTFILE}
exit 0
