#!/bin/bash
set +x

G_INSPECT_MMLPATH="/opt/huawei/snas/script/inspect_mml"
source "${G_INSPECT_MMLPATH}/CheckItems"
source "${G_INSPECT_MMLPATH}/CommonFunc.sh"

function CheckSsdcIoMemory
{
    local isPass=0
    local result=""
    local tmpInfo=""
    local curInspectNum="304"
    local curInspectFun="$(GetInspectType $curInspectNum)"
    local RESULTFILE="/tmp/tmpResult${curInspectFun}"
    local ssdcusfile="/var/log/check_ssdc_mem.using"
    local ssdclogfile="/var/log/check_ssdc_mem.log"
    local ssdcresfile="/var/log/check_ssdc_mem.res"

    #ϴε
    LOG "[$LINENO]INFO: ${curInspectFun} backup /var/log/check_ssdc_mem.using file!"
    [ -f ${ssdcusfile} ] && mv ${ssdcusfile} ${ssdcusfile}.back
    [ -f ${ssdclogfile} ] && mv ${ssdclogfile} ${ssdclogfile}.back
    [ -f ${ssdcresfile} ] && mv ${ssdcresfile} ${ssdcresfile}.back

    >"${RESULTFILE}"

    tmpInfo=$(/usr/local/bin/MmlBatch 988 "ssdc show pt 1")
    iRet=$?
    if [[ ${iRet} -ne 0 ]];then
        isPass=$(check_pass ${isPass} 1)
        echo "[ERR]INFO:MML command execution failed (MmlBatch 988 'ssdc show pt 1')!" >> ${RESULTFILE} 2>&1
        echo "${curInspectFun}_Pass $isPass" >>${RESULTFILE}
        return
    fi
    tmpInfo=$(echo "${tmpInfo}" | sed -e 's/\x1B\[0;[3-4][0-9]m//g' -e 's/\x0D//g' -e 's/\x00//g')
    local CapPercent=$(echo "${tmpInfo}" | grep "PartitionID" | grep -Po '(?<=CapPercent: )[0-9]+')

    #ûssdͨ, ûͨ
    if [ "X${CapPercent}" == "X" ];then
        echo "CheckResult:NO SSD." >> ${RESULTFILE} 2>&1
        echo "${curInspectFun}_Pass $isPass" >> ${RESULTFILE}
        return
    fi

    #ûд򲹶,Ĭͨ
    result=$(MmlBatch 988 "mem show startaddr 1024 0xffffffffffffffff 30 0" | grep "Input Param invalid")
    if [[ "X${result}" != "X" ]];then
        echo "CheckResult:Check not supported." >>${RESULTFILE} 2>&1
        echo "${curInspectFun}_Pass ${isPass}" >>${RESULTFILE} 2>&1
        return
    fi

    local checkResult="SSDC is normal."
    local fileList=$(MmlBatch 988 "mem show using 30 1" | grep "All Used Memory using info" | awk '{print $NF}' | dos2unix | sed 's/.log.$/.log/g')
    if [ "X${fileList}" != "X" ];then
        set_ifs
        for file in ${fileList}; do
            cat ${file} >> ${ssdcusfile}
        done
        restore_ifs

        local checkInfo=$(cat ${ssdcusfile} |grep -w "base_ssdc_partition.c, line:6678" | awk -F"," '{print $1}' | sort -u)
        for item in ${checkInfo}; do
            if [ ${#item} -ne 16 ] && [[ ! "0x$item" =~ "0xffff" ]];then
                continue
            fi
            #ɴѯַб,60Sδͷŵڴ
            echo "0x$item 60 0" >> ${ssdclogfile}
        done
        if [ -f ${ssdclogfile} ];then
            #,Ƿִʧ
            local res_fail=$(MmlBatch 988 "mem show startaddr 1024 0" | grep failed)
            #,ݼѲ첻ͨ,ͬʱڹעMMLִǷʧ.
            local res_ssdc=$( [ -f ${ssdcresfile} ] && cat ${ssdcresfile})
            if [ "X${res_ssdc}" != "X" ];then
                isPass=$(check_pass ${isPass} 1)
                checkResult="SSDC is abnormal."
                echo "[ERR]INFO:SSDC is abnormal.please view the result in ${ssdcresfile}." >> ${RESULTFILE} 2>&1
            elif [ "X$res_fail" != "X" ];then
                isPass=$(check_pass ${isPass} 1)
                checkResult="MML exec failed"
                echo "[ERR]INFO:MML command execution failed (MmlBatch 988 'mem show startaddr 1024 0')!" >> ${RESULTFILE} 2>&1
            fi
        fi
    else
        checkResult="NO SSD."
    fi

    echo "CheckResult:${checkResult}" >>${RESULTFILE} 2>&1
    echo "${curInspectFun}_Pass ${isPass}" >>${RESULTFILE} 2>&1

    #Ѳͨ,ʱļͱļ
    if [ ${isPass} -eq 0 ];then
        [ -f ${ssdclogfile} ] && rm -f ${ssdclogfile}
        [ -f ${ssdcusfile} ] && rm -f ${ssdcusfile}
        [ -f ${ssdcresfile} ] && rm -f ${ssdcresfile}
        [ -f ${ssdcusfile}.back ] && rm -f ${ssdcusfile}.back
        [ -f ${ssdclogfile}.back ] && rm -f ${ssdclogfile}.back
        [ -f ${ssdcresfile}.back ] && rm -f ${ssdcresfile}.back
    fi
}

CheckSsdcIoMemory
exit 0
