#!/bin/bash
set +x
source /opt/huawei/snas/script/inspect_mml/CheckItems
source /opt/huawei/snas/script/inspect_mml/CommonFunc.sh
source /opt/node_devicename.sh
CurInspectNum="134"
CurInspectFun="$(GetInspectType $CurInspectNum)"
RESULTFILE="/tmp/tmpResult${CurInspectFun}"
isPass=0
>${RESULTFILE}


function checkNodeNCQ()
{
    local status=""
    local nodeType=""
    local type=""
    local hSata=""
    local NCQStatus=""

    /opt/huawei/snas/script/inspect_mml/CheckNCQStatus
    dos2unix /tmp/tmpfileCheckNCQStatus
    status=$(cat /tmp/tmpfileCheckNCQStatus)
    if [ "${status}" = "" ];then
        LOG "[$FUNCNAME][$LINENO] content is empty."
        return
    fi

    echo "${status}" | grep "[ERR]get information fail"
    if [ $? -eq 0 ];then
        ErrInfoCommon "INFO: Get information failed from command(MmlBatch 4016 'cm LocalNodeDiskType show')" "${RESULTFILE}"
        isPass=1
        return
    fi

    echo "${status}" >> $LOG_FILE 2>&1

    #处理C72，不涉及
    echo "${status}" | grep -q "^isC72=0"
    if [ $? -eq 0 ];then
        echo "NodeType:C72||Have_SATA:--||NCQStatus:--" >> ${RESULTFILE} 2>&1
        return
    fi
    #处理RH服务器
    echo "${status}" | grep -q "^isRH=0"
    if [ $? -eq 0 ];then
        echo "NodeType:RH||Have_SATA:--||NCQStatus:--" >> ${RESULTFILE} 2>&1
        return
    fi
    #处理TaiShan服务器
    echo "${status}" | grep -q "^isTS=0"
    if [ $? -eq 0 ];then
        echo "NodeType:TaiShan||Have_SATA:--||NCQStatus:--" >> ${RESULTFILE} 2>&1
        return
    fi
    #处理T3000,解析是否节点类型‘是否包含sata盘、ncq状态
    nodeType=$(echo "${status}" | grep -Po '(?<=Node_Type: )[0-9]+' | tr -d ' ')
    type=$(MapNodeType  $nodeType)
    hSata=$(echo "${status}" | grep -Po '(?<=Hava_Sata: )[0-9]+' | tr -d ' ')
    if [ "${hSata}X" = "1X" ];then
        hava_sata="yes"
    else
        hava_sata="no"
    fi
    NCQStatus=$(echo "${status}" | grep -Po '(?<=SATA Native Command Queuing:    )[a-zA-Z]+' | tr -d ' ')

    #p25/p节点有则必须打开
    if [ $nodeType -eq 5 -o $nodeType -eq 0 ];then
        if [ $hSata -ne 1 ];then
            echo "NodeType:T3000($type)||Have_SATA:$hava_sata||NCQStatus:--" >> ${RESULTFILE} 2>&1
            return
        fi
    fi

    if [ "${NCQStatus}" != "Disabled" -a "${NCQStatus}" != "Enabled" ];then
        ErrInfoCommon "INFO: Can't get NCQ status information from command(/opt/driver/lsisas-driver/lsiutil 1 68)" "${RESULTFILE}"
        isPass=1
        LOG "[$FUNCNAME][$LINENO] get NCQ status information failed."
        return
    fi

    if [ "${NCQStatus}" == "Disabled" ];then
        NCQStatus="Close"
        isPass=4
        ErrInfoCommon "INFO: NCQ status is close." "${RESULTFILE}"
    elif [ "${NCQStatus}" == "Enabled" ];then
        NCQStatus="Open"
    fi

    echo "NodeType:T3000($type)||Have_SATA:$hava_sata||NCQStatus:${NCQStatus}">> ${RESULTFILE} 2>&1

}

checkNodeNCQ
echo "${CurInspectFun}_Pass $isPass" >>${RESULTFILE} 2>&1

