#!/bin/bash
[ -f /opt/huawei/snas/script/inspect_mml/inspect_comm.sh ] && source /opt/huawei/snas/script/inspect_mml/inspect_comm.sh

#Get node scenario: 1-SMR disk on node; 0-No SMR disk on node
# (1) First check from snas.ini whether there is a tag field DiskNodeType of SMR, mainly this field;
# (2) If DiskNodeType cannot be found, use the lsscsi tool to check and obtain the disk type. If there is an SMR disk, return 1
function IsSMRDisk()
{
    local snas_ini="/opt/huawei/snas/etc/snas.ini"
    if [ -f $sans_ini ]; then
        tmp=$(sed -n '/DiskNodeType/p' $snas_ini)
    else
        tmp=""
    fi

    local type=0
    if [ -z $tmp ]; then
        smr_cnt=$(lsscsi -g | awk '{if ($2=="(0x14)") print $NF}'| wc -l)
        if [ $smr_cnt -gt 0 ]; then
            type=1
        fi
    else
        type=$(grep -w DiskNodeType $snas_ini | awk -F '=' '{print $2}')
    fi
    
    return $type
}

function checkPhyMemory()
{
    local isC72=0
    local nodetype=""
    local nodepool=""
    local isARM=0
    local isRH=0
    local tmpFile="/tmp/tmpfilecheckPhyMemory"

    > "${tmpFile}"
    IsStandardNode
    if [ $? -eq 0 ];then
        echo "UVPFlag=1" >> "${tmpFile}"
        return 0
    fi
    nodetype=$(cat /opt/huawei/deploy/etc/deploy.ini | grep "^devicetype" |awk -F= '{print $2}' | awk '{print $1}')
    echo "devicetype=${nodetype}" >> "${tmpFile}"
    
    #判断是不是C72
    IsC72Node
    isC72=$?
    IsTSNode
    isARM=$?
    #ARM服务器中不存在NVdimm内存，因此DIMM000按照C72的处理
    if [ ${isARM} -eq 0 ] || [ $isC72 -eq 0 ];then
        isC72=1
    else
        isC72=0
    fi
    echo "isC72=${isC72}" >> "${tmpFile}"
    
    IsRHNode
    if [ $? -eq 0 ]; then
       IsRHV5Node
       if [ $? -eq 0 ];then
           isRH="V5RH"
           echo "isRH=V5RH" >>${tmpFile}
       else
           isRH="V3RH"
           echo "isRH=V3RH" >>${tmpFile}
       fi   
    else
        isRH=0
        echo "isRH=0" >>${tmpFile}
    fi
    
    IsSMRDisk
    if [ $? -eq 1 ]; then
        #SMR disk on node
        echo "SMRFlag=1" >>${tmpFile}
    else
        echo "SMRFlag=0" >>${tmpFile}
    fi
    
    nodepool=$(cat /opt/huawei/snas/etc/snas.ini | grep "^nodepool" | awk -F'=' '{print $2}' | awk '{print $1}')
    echo "nodepool=${nodepool}" >>${tmpFile}
    
    dmidecode -t memory | grep -P "^\s+(Locator:|Size:|Speed:)" >> "${tmpFile}"
    cat "${tmpFile}" |awk -v isC72=${isC72} '
    function addVal2Array(val, arr)
    {
        for(i in arr)
        {
            if (arr[i] == val)
                return
        }
        arr[length(arr)] = val
    }
    BEGIN{Memspeed="";totalmem=0;nvmem=0;phymem[0]=-1;speedarr[0]=-1;delete phymem; delete speedarr}
    {

        if ($1=="Size:"){                  /*获取内存大小*/
            mem=0;
            if(match($2,"[0-9]+")){mem=$2}
        }
        if (mem!=0)
        {
            if ($1=="Locator:"){
                if (($3=="F0")||(($2=="DIMM000")&&(isC72!=1))){             /*T3000,F0槽位为NV内存大小.RH通用服务器，DIMM000槽位是NV内存,排除C72的DIMM000、ARM的DIMM000*/
                    nvmem=mem;
                    mem=0;
                }else{
                    totalmem+=mem;
                    addVal2Array(mem, phymem)
                }
            }
            else if ($1=="Speed:"){       /*频率放入speed变量*/
                s=int($2)
                addVal2Array(s, speedarr)
                if (!match(Memspeed, $2)){
                    Memspeed=Memspeed""$2" ";
                }
            }
        }
    }
    END{
        print "totalmem="totalmem
        #print "Memspeed="Memspeed
        print "nvmem="nvmem
        print "memsizenum="length(phymem)
        #print "speednum="length(speedarr)
    }'  >> "${tmpFile}"

}

checkPhyMemory
