############################################################
# 所属模块  : OceanStor9000 巡检工具
# 功能      : 检测DS是否上报过准慢盘信息、检测NOFS上报过的准慢盘信息
# 创建时间  : 2017年05月15日
# 描述      :
#   1、DS检测并上报的准慢盘信息
#   2、NOFS检测24h内上报过的准慢盘信息
#   3、NOFS检测恢复时间为30min的准慢盘信息
############################################################
#!/bin/sh
set +x

G_INSPECT_MMLPATH="/opt/huawei/snas/script/inspect_mml"
source $G_INSPECT_MMLPATH/CommonFunc.sh
source $G_INSPECT_MMLPATH/CheckItems
G_REMOTE_TMP_FILE="${G_TMP_INSPECT_PATH}tmpfile"
G_REMOTE_TMP_FILE2="${G_TMP_INSPECT_PATH}tmpfile2"
filename="CheckDsReportPreSlow"
DS_PRESLOW_KEY="DsReportPreSlow"
G_REMOTE_TMP_FILE3="${G_TMP_INSPECT_PATH}tmpfile3"
G_REMOTE_TMP_FILE4="${G_TMP_INSPECT_PATH}tmpfile4"
filename2="CheckNofsReportPreSlow"
LOG_FILE="/var/log/inspect.log"

CurInspectNum="290"
CurInspectFun="$(GetInspectType $CurInspectNum)"
RESULTFILE="${G_TMP_INSPECT_PATH}tmpResult${CurInspectFun}"
>${RESULTFILE}

isPass=0
Result=""

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

#调用mml接口获取DS上报的准慢盘信息
function CheckDsReportPreSlow()
{
    local tmpResult=""
    local iRet=""
    /usr/local/bin/MmlBatch 988 "show ds preslowinfo" | grep $DS_PRESLOW_KEY > $G_REMOTE_TMP_FILE$filename 2>&1
    iRet=$?
    if [ $iRet -eq 0 ];then
        sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" $G_REMOTE_TMP_FILE$filename > $G_REMOTE_TMP_FILE2$filename
        cat $G_REMOTE_TMP_FILE2$filename > $G_REMOTE_TMP_FILE$filename
        tmpResult=$( cat $G_REMOTE_TMP_FILE$filename )
        LOG "[$LINENO]CheckDsReportPreSlow:$tmpResult"
        isPass=1
        echo "[ERR]INFO:DS Report PreSlow." >> ${RESULTFILE} 2>&1
        Result=${Result}"INFO_DS:DS Report PreSlow."
    else
        Result=${Result}"INFO_DS:DS Not Report PreSlow."
    fi

    [ -f "$G_REMOTE_TMP_FILE$filename" ] && rm -f "$G_REMOTE_TMP_FILE$filename"
    [ -f "$G_REMOTE_TMP_FILE2$filename" ] && rm -f "$G_REMOTE_TMP_FILE2$filename"
    return 0;
}

#调用mml接口获取NOFS上报的准慢盘信息
CheckNofsReportPreSlow()
{
    local lineInfo=""
    local name="NAME  SLOT  NE  PRE  ST  CSB  F1  F2"
    local tmpResult=""
    local iRet=""
    /opt/huawei/snas/sbin/nofs-snas listpreslowinfo > $G_REMOTE_TMP_FILE3$filename2 2>&1
    iRet=$?
    if [ $iRet -eq 0 ];then
        set_ifs
        tmpResult=$( cat $G_REMOTE_TMP_FILE3$filename2 )
        if [ "X${tmpResult}" == "X" ];then
            restore_ifs
            Result=${Result}"||INFO_NOFS($name):NOFS not report preSlow."
            return 0
        fi
    else
        isPass=1
        echo "[ERR]INFO:Get listpreslowinfo from NOFS failed." >> ${RESULTFILE} 2>&1
        return 0
    fi

    cat $G_REMOTE_TMP_FILE3$filename2 | grep -v NAME > $G_REMOTE_TMP_FILE4$filename2 2>&1
    while read line; do
        value=$( echo "$line" | awk '{print $5}' )
        if [[ $value -gt 70 ]];then
            isPass=1
            echo "[ERR]INFO:NOFS Report PreSlow(Switch Times>70)." >> ${RESULTFILE} 2>&1
        fi
        lineInfo="${lineInfo}(${line}) "
    done < $G_REMOTE_TMP_FILE4$filename2
    restore_ifs

    if [ "X${lineInfo}" == "X" ];then
        lineInfo="null"
    fi
    Result=${Result}"||INFO_NOFS($name):$lineInfo"

    [ -f "$G_REMOTE_TMP_FILE3$filename2" ] && rm -f "$G_REMOTE_TMP_FILE3$filename2"
    [ -f "$G_REMOTE_TMP_FILE4$filename2" ] && rm -f "$G_REMOTE_TMP_FILE4$filename2"
    return 0
}

CheckDsReportPreSlow

CheckNofsReportPreSlow

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

exit 0
