#!/bin/bash
set +x
LOG_FILE="/var/log/inspect.log"
G_MML_FILE_PATH="/opt/huawei/snas/script/inspect_mml"
source $G_MML_FILE_PATH/CheckItems
CurInspectNum="309"
CurInspectFun="$(GetInspectType $CurInspectNum)"
RESULTFILE="${G_TMP_INSPECT_PATH}tmpResult${CurInspectFun}"
>${RESULTFILE}

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

function checkNodeWALSwitch()
{
    cat /opt/huawei/snas/etc/ca_d.ini |grep wal_switch >>${RESULTFILE} 2>&1
    local iRet1=$?
    cat /opt/huawei/snas/etc/ca_d.ini |grep walbigfile_switch >>${RESULTFILE} 2>&1
    local iRet2=$?
    cat /opt/huawei/snas/etc/ca_d.ini |grep wal_global_switch >>${RESULTFILE} 2>&1
    local iRet3=$?
    cat /opt/huawei/snas/etc/mds_c.ini |grep mwa_system_switch >>${RESULTFILE} 2>&1
    local iRet4=$?
    LOG "[$LINENO]iRet1=$iRet1;iRet2=$iRet2;iRet3=$iRet3;iRet4=$iRet4;"
}

function checkNodeWalHealth()
{
    local walErrInfo=""

    # walûпҪ
    /usr/local/bin/MmlBatch 988 "show wal switch" | sed -e 's/\x1B\[0;[3-4][0-9]m//g' -e 's/\x0D//g' -e 's/\x00//g'| grep -q "global .*0"
    if [ $? -eq 0 ]
    then
        LOG "[$LINENO]The WAL switch is not enabled,have no need to check the WAL health status."
        return
    fi

    # wle/wl 0.5(wleΪwrite log errorд)˵MDSдWAL־ʧʸߣѲ콨Ż
    walErrInfo=$( cat /var/log/snas_workload | Workload MDS_MWA wl,wle | tail -n1 )
    if [ X"${walErrInfo}" == X"" ]
    then
        LOG "[$LINENO]there is no WAL error info in /var/log/snas_workload."
    else
        LOG "[$LINENO]WAL info:${walErrInfo}"
        writeLogCnt=$( echo "${walErrInfo}" | awk '{print $2}' | awk -F ':' '{print $2}' | awk -F ',' '{print $1}' )
        writeLogErrorCnt=$( echo "${walErrInfo}" | awk '{print $3}' | awk -F ':' '{print $2}' | awk -F ',' '{print $1}' )
        if [ ${writeLogCnt} -ne 0 ]
        then
            percent=$( echo "scale=4;${writeLogErrorCnt} / ${writeLogCnt} > 0.5000" | bc )
            [ ${percent} -eq 1 ] && echo "[ERR]INFO:The MDS fails to write WAL logs at a high rate(${walErrInfo})."  >>${RESULTFILE} 2>&1
        fi
    fi

    # WALطʧܣѲ콨Ż
    walPlaybackFailCnt=$( cat /var/log/snasmessages* | grep WAL_OprReplayFsmErr | wc -l )
    lastOnePlaybackFailInfo=$( cat /var/log/snasmessages* | grep WAL_OprReplayFsmErr | tail -1 )
    if [ X"${walPlaybackFailCnt}" != X"" -a ${walPlaybackFailCnt} -ge 1 ]
    then
        echo "[ERR]INFO:There are ${walPlaybackFailCnt} WAL playback failed records. The last record is${lastOnePlaybackFailInfo}"  >>${RESULTFILE} 2>&1
    fi

    # WALˢʧܣѲ콨Ż
    walRefreshFailCnt=$( cat /var/log/snasmessages* | grep "datalen err" | grep WAL | wc -l )
    lastOneFailWal=$( cat /var/log/snasmessages* | grep "datalen err" | grep WAL | tail -1 )
    if [ X"${walRefreshFailCnt}" != X"" -a ${walRefreshFailCnt} -ge 1 ]
    then
        echo "[ERR]INFO:There are ${walRefreshFailCnt} WAL refreshback failed records. The last record is${lastOneFailWal}"  >>${RESULTFILE} 2>&1
    fi

    return
}

# WALһУ
checkNodeWALSwitch

# WAL״̬
checkNodeWalHealth
