#!/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
source $G_MML_FILE_PATH/CommonFunc.sh
CurInspectNum="102"
CurInspectFun="$(GetInspectType $CurInspectNum)"
RESULTFILE="${G_TMP_INSPECT_PATH}tmpResult${CurInspectFun}"
REPLACE_HWDIR_SEDSTR="s/\/opt\/huawei\//\/opt\/product\//g"
LOCAL_BACK_IP=""
MEM_FREE_MIN_LIMIT="3"
isPass=0
>${RESULTFILE}

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

function checkMemUsage()
{
    local process_info=$(ps auxww)
    local process_head=$(echo "${process_info}" | head -1)
    local process_top5=$(echo "${process_info}" | sort -k 4nr | head -5 | sed 's/</(1t)/g')
    local Result=""
    local tmpline=""
    local MemTotal=$(cat /proc/meminfo | grep MemTotal | awk '{print $2}')
    local freelist=$(vmstat | awk 'NR==3' | awk '{print $4,$5,$6}')
    local mem_free_get=0
    #计算剩余内存
    for value in $freelist
    do
        mem_free_get=$((mem_free_get+value))
    done
    MemUsed=$((MemTotal-mem_free_get))

    #计算剩余、已使用内存占用率
    mem_free_rate=$(echo "scale=3;$mem_free_get / $MemTotal * 100" | bc)
    mem_used_rate=$(echo "scale=3;$MemUsed / $MemTotal * 100" | bc)
    set_ifs
    LOCAL_BACK_IP=`GetLocalIp`
    if [ "${LOCAL_BACK_IP}X" == "X" ];then
        echo "[ERR]Node:$(hostname) ||INFO:Can't get backend IP." >> ${RESULTFILE} 2>&1
        LOG "[ERR]Node:$(hostname) ||INFO:Can't get backend IP."
        isPass=1
        restore_ifs
        return
    fi

    for line in $process_top5; do
        tmpline=$(echo ${line} | sed "${REPLACE_HWDIR_SEDSTR}")
        if [ "" != "${Result}" ];then
            Result="$Result||Memory Usage:$tmpline"
        else
            Result="Memory Usage:$tmpline"
        fi
    done
    restore_ifs

    Result="Memory Usage:${G_SEPARATOR}||Memory Usage:$LOCAL_BACK_IP||Memory Usage:TotalMem:$MemTotal||Memory Usage:UsedMem:$MemUsed||Memory Usage:Percentage(%):$mem_used_rate||Memory Usage:--------------detail--------------||Memory Usage:$process_head||${Result}"
    echo "<![CDATA[$Result]]>" >>${RESULTFILE} 2>&1
    LOG "<![CDATA[$Result]]>"

    #剩余内存占用率小于等于3%
    if [ $(echo "$mem_free_rate <= $MEM_FREE_MIN_LIMIT"|bc) -eq 1 ];then
        isPass=1
        echo "[ERR]Node:${LOCAL_BACK_IP}||INFO:Percentage(${mem_used_rate}%) is great than 97%." >> ${RESULTFILE} 2>&1
    fi
}

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

