#!/bin/bash
set +x

CurInspectNum="202"
G_INSPECT_MMLPATH="/opt/huawei/snas/script/inspect_mml"
source "${G_INSPECT_MMLPATH}/CheckItems"
source "${G_INSPECT_MMLPATH}/CommonFunc.sh"
CurInspectFun="$(GetInspectType $CurInspectNum)"
RESULTFILE="/tmp/tmpResult${CurInspectFun}"
>"${RESULTFILE}"
LOG_FILE="/var/log/inspect.log"
NFSPassFlag=0
CIFSPassFlag=0

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

checkIOPerform()
{
    local IO_PERFORM=$2
    local isPass=0

    rcount=$(echo "${IO_PERFORM}" | grep "read count" | awk -F":" '{print $2}')
    wcount=$(echo "${IO_PERFORM}" | grep "write count" | awk -F":" '{print $2}')
    ccount=$(echo "${IO_PERFORM}" | grep "cmd count" | awk -F":" '{print $2}')
    rbytes=$(echo "${IO_PERFORM}" | grep "read bytes" | awk -F":" '{print $2}')
    wbytes=$(echo "${IO_PERFORM}" | grep "write bytes" | awk -F":" '{print $2}')

    if [ -z "${rcount}" ] || [ -z "${wcount}" ] || [ -z "${ccount}" ] || [ -z "${rbytes}" ] || [ -z "${wbytes}" ]; then
        ErrInfoCommon "INFO:Get IO data failed." "${RESULTFILE}"
        isPass=1
    fi

    maxcalldelay=$(echo "${IO_PERFORM}" | grep "max call delay" | awk -F":" '{print $2}')
    maxreaddelay=$(echo "${IO_PERFORM}" | grep "max read delay" | awk -F":" '{print $2}')
    maxwritedelay=$(echo "${IO_PERFORM}" | grep "max write delay" | awk -F":" '{print $2}')

    result="Protocol:$1||Read count:${rcount}||Write count:${wcount}||Cmd count:${ccount}||Read bytes:${rbytes}||Write bytes:${wbytes}"
    result=${result}"||max call delay(ms):${maxcalldelay}||max read delay(ms):${maxreaddelay}||max write delay(ms):${maxwritedelay}"
    echo "$result" >> "${RESULTFILE}" 2>&1
    LOG "[$FUNCNAME][${LINENO}]result=${result}!"

    if [ "$1" = "CIFS" ];then
        CIFSPassFlag=${isPass}
    else
        NFSPassFlag=${isPass}
    fi

    return 0
}

#[ERR]ʶǷ
function checkNodeIOPerform()
{
    local ret
    NFSFlag=0
    CIFSFlag=0
    CHECK_PASSED=0
    CHECK_FAILED=1
    #ȡڵ洢
    node_service_type=$(egrep '[[]|^'node_service_type'=' /opt/huawei/snas/etc/snas.ini | tr -d '\n' | grep -Po '(?<=[[]'NODE'[]]'node_service_type'=)[0-9]+')

    if [ "${node_service_type}" != "1" ];then
        #S3 
        echo "Protocol:Does not involve||Read count:--||Write count:--||Cmd count:--||Read bytes:--||Write bytes:--||max call delay(ms):--||max read delay(ms):--||max write delay(ms):--" >>"${RESULTFILE}" 2>&1
        echo "${CurInspectFun}_Pass ${CHECK_PASSED}" >>"${RESULTFILE}" 2>&1
        LOG "[$LINENO]node_service_type :${node_service_type}."
        return 0
    fi

    #ȡCIFSIOͳ
    CIFS_IO_PERFORM=$(/usr/local/bin/nas_proto_pum -m smb2 -c io_perform)
    ret=$?
    LOG "[$FUNCNAME][${LINENO}]CIFS_IO_PERFORM: ${CIFS_IO_PERFORM}, ret=${ret}!"
    if [ ${ret} -ne 0 ]; then
        CIFSFlag=1
    fi

    #ȡNFSIO
    NFS_IO_PERFORM=$(/usr/local/bin/nas_proto_pum -m nfs -c io_perform)
    ret=$?
    LOG "[$FUNCNAME][${LINENO}]NFS_IO_PERFORM: ${NFS_IO_PERFORM}, ret=${ret}!"
    if [ ${ret} -ne 0 ]; then
        NFSFlag=1
    fi

    #
    if [ $CIFSFlag -eq 0 ]; then
        checkIOPerform "CIFS" "${CIFS_IO_PERFORM}"
    else
        ErrInfoCommon "INFO:Get IO data of CIFS failed." "${RESULTFILE}"
        CIFSPassFlag=1
    fi
    if [ $NFSFlag -eq 0 ]; then
        checkIOPerform "NFS" "${NFS_IO_PERFORM}"
    else
        ErrInfoCommon "INFO:Get IO data of NFS failed." "${RESULTFILE}"
        NFSPassFlag=1
    fi

    LOG "[$FUNCNAME][${LINENO}]CIFSPassFlag=${CIFSPassFlag}, NFSPassFlag=${NFSPassFlag}!"
    if [ "${CIFSPassFlag}" = "1" -o "${NFSPassFlag}" = "1" ];then
        echo "${CurInspectFun}_Pass ${CHECK_FAILED}" >>"${RESULTFILE}" 2>&1
    else
        echo "${CurInspectFun}_Pass ${CHECK_PASSED}" >>"${RESULTFILE}" 2>&1
    fi

    return 0
}

checkNodeIOPerform
