#!/bin/bash
set +x

source /opt/huawei/snas/script/inspect_mml/CommonFunc.sh
G_REMOTE_TMP_FILE="/tmp/tmpfilecheckPhyMemory"
LOG_FILE="/var/log/inspect.log"
. /opt/node_type_recognize.sh

function LOG
{
    echo [`date`][$$]$@ >> $LOG_FILE
}

#获取节点场景: 1 - 节点上有SMR磁盘; 0 - 节点上没有SMR磁盘
#(1)先从snas.ini中查看是否有SMR的标记字段DiskNodeType, 以这个字段为主;
#(2)如果查不到DiskNodeType, 那么利用lsscsi工具查看, 获取磁盘类型, 如果有SMR磁盘, 返回1
function IsSMRDisk()
{
    snas_ini="/opt/huawei/snas/etc/snas.ini"
    if [ -f $sans_ini ]; then
        tmp=`sed -n '/DiskNodeType/p' $snas_ini`
    else
        tmp=""
    fi

    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()
{
    > "${G_REMOTE_TMP_FILE}"
    local isC72=0
    local isARM=0
    #UVP虚拟机不涉及
    IsStandardNode
    if [ $? -eq 0 ];then
        echo "UVPFlag=1" >> "${G_REMOTE_TMP_FILE}"
        return 0
    fi
	nodetype=$(cat  /opt/huawei/deploy/etc/deploy.ini | grep devicetype |awk -F= '{print $2}')
	echo "devicetype=${nodetype}" >> "${G_REMOTE_TMP_FILE}"

    #判断是不是C72
    IsC72Node
    isC72=$?
    IsTSNode
    isARM=$?

    #ARM服务器中不存在NVdimm内存，因此DIMM000按照C72的处理
    if [ ${isARM} -eq 0 ] || [ $isC72 -eq 0 ];then
        isC72=0
    fi
    echo "isC72=${isC72}" >> "${G_REMOTE_TMP_FILE}"

    dmidecode -t memory | grep -P "^\s+(Locator:|Size:|Speed:)" >> "${G_REMOTE_TMP_FILE}"
	cat "${G_REMOTE_TMP_FILE}" |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 (match($3,"GB")){mem=mem*1024}
                if (match($3,"KB")){mem=mem/1024}
            }
		}
		if (mem!=0)
		{
			if ($1=="Locator:"){
				if (($3=="F0")||(($2=="DIMM000")&&(isC72!=0))){             /*T3000,F0槽位为NV内存大小.RH通用服务器，DIMM000槽位是NV内存,排除C72、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 "memsizenum="length(phymem)
		print "speednum="length(speedarr)
	}'  >> "${G_REMOTE_TMP_FILE}"
    IsRHNode
    if [ $? -eq 0 ]; then
       #通用服务器
       IsRHV5Node
       if [ $? -eq 0 ];then
           echo "isRH=V5RH" >>${G_REMOTE_TMP_FILE}
       else
           echo "isRH=V3RH" >>${G_REMOTE_TMP_FILE}
       fi
    elif [ ${isARM} -eq 0 ];then
        echo "isRH=ARM" >>${G_REMOTE_TMP_FILE}
    else
       echo "isRH=1" >>${G_REMOTE_TMP_FILE}
    fi

    IsSMRDisk
    if [ $? -eq 1 ]; then
        #节点上有SMR磁盘
        echo "SMRFlag=1" >>${G_REMOTE_TMP_FILE}
    else
        #节点上没有SMR磁盘
        echo "SMRFlag=0" >>${G_REMOTE_TMP_FILE}
    fi
}

checkPhyMemory
