#!/bin/bash
set +x

#检查电子标签检查
source /opt/inspect/inspect_map.sh
CurInspectNum="157"
CurInspectFun="$( GetInspectType $CurInspectNum )"
RESULTFILE="/tmp/tmpResult${CurInspectFun}"
>${RESULTFILE}
isPass=0
DEVICE_TYPE_ERR=99

LOG_FILE="/var/log/inspect.log"
source /opt/node_type_recognize.sh

function LOG
{
   time=$(date)
   echo [${time}][$$][$CurInspectFun]$@ >> $LOG_FILE
}
function GetProdumctName()
{
    local retryTime=0
    local maxTryTimes=3
    local productName=""
    local productCode=""
    while [ ${retryTime} -lt ${maxTryTimes} ]; do
        productCode=$(ipmitool raw 0x30 0x90 0x05 0x00 0x06 0x01 0x00 0x20)
        if [ -z "${productCode}" ]; then
            LOG "[$FUNCNAME][$LINENO] ERR:Get product code fail, retry time ${retryTime}."
            retryTime=$((retryTime + 1))
            sleep 1
            continue
        fi
        break
    done
    if [ -z "${productCode}" ]; then
        LOG "[$FUNCNAME][$LINENO] ERR:Get product code fail."
        echo ${productName}
        return
    fi
    local index=0
    for code in ${productCode}; do
        if [ ${index} -ne 0 ]; then
            ascii=$(echo $((16#${code})) | awk '{printf("%c", $1)}')
            productName="${productName}${ascii}"
        fi
        index=$((index + 1))
    done
    echo ${productName}
    return
}

function IsValidProductElecLable()
{
    local devicename="${1}"
    local item=""    

    flag_P=$(echo $devicename | egrep "9000 P Node")
    flag_C=$(echo $devicename |egrep "9000 C Node|9000 B Node")
    flag_M=$(echo $devicename |egrep "9000 M Node")
    #V3服务器对应的9000电子标签
    #C36E和C36E-H的差异在于4109和4114CPU
    flag_P25E=$(echo $devicename |egrep "P25E Node")
    flag_P36E=$(echo $devicename |egrep "P36E Node")
    flag_C36E_L=$(echo $devicename |egrep "C36E Node")
    flag_C36E_H=$(echo $devicename |egrep "C36E-H Node")
    flag_P12E=$(echo $devicename |egrep "P12E Node")
    #V3服务器对应的SFS电子标签
    flag_FSFile=$(echo $devicename |egrep "FusionStorage File/Object Node")
    flag_F12=$(echo $devicename |egrep "FusionStorage F12A")
    flag_F25=$(echo $devicename |egrep "FusionStorage F25A")
    #块FS6.0的电子标签，已弃用
    flag_FSBlock=$(echo $devicename |egrep "FusionStorage Block Node")
    flag_B12=$(echo $devicename |egrep "FusionStorage B12")
    flag_B25=$(echo $devicename |egrep "FusionStorage B25")
    flag_VM_DJ=$(echo $devicename |egrep "VM DJ/eSight Node")
    flag_VM_FSM=$(echo $devicename |egrep "VM FSM Node")
    #V5服务器对应的9000电子标签
    local flag_P12X=$(echo $devicename |egrep "P12X Node")
    local flag_P25X=$(echo $devicename |egrep "P25X Node")
    local flag_P36X=$(echo $devicename |egrep "P36X Node")
    local flag_P36X_H=$(echo $devicename |egrep "P36X-H Node")
    local flag_C36X_L=$(echo $devicename |egrep "C36X Node")
    local flag_C36X_H=$(echo $devicename |egrep "C36X-H Node")
    #Taishan服务器对应的9000电子标签
    local flag_taishan_P12A=$(echo $devicename |egrep "P12A Node")
    local flag_taishan_S12A=$(echo $devicename |egrep "S12A Node") 
    local flag_taishan_S25A=$(echo $devicename |egrep "S25A Node")       
    local flag_taishan_P25A=$(echo $devicename |egrep "P25A Node")
    local flag_taishan_P36A=$(echo $devicename |egrep "P36A Node")
    local flag_taishan_C36A=$(echo $devicename |egrep "C36A Node")
    local flag_taishan_C72A=$(echo $devicename |egrep "C72A Node")
    local flag_taishan_S36A=$(echo $devicename |egrep "S36A Node")
    #V5服务器对应的SFS电子标签
    local flag_F12X=$(echo $devicename |egrep "FusionStorage F12B Node")
    local flag_F25X=$(echo $devicename |egrep "FusionStorage F25B Node")
    local flag_F36X=$(echo $devicename | grep -E 'FusionStorage F36B Node|FusionStorage C36X-V1-H Node')
    local flag_F12C=$(echo $devicename | grep -E 'F12C Node|P12K-V2 Node')
    local flag_F25C=$(echo $devicename |egrep "F25C Node")
    local flag_F36C=$(echo $devicename | grep -E 'F36C Node|C36K-V2 Node')
    local flag_F36B_L=$(echo $devicename |grep -E 'FusionStorage F36B-L Node|FusionStorage C36X-V1 Node')
    local flag_F36B_C=$(echo $devicename |grep -E 'FusionStorage F36B-C Node|FusionStorage C36X-V1-L Node')
    local flag_F36B_CH=$(echo $devicename |egrep "FusionStorage F36B-CH Node")
    #V3和V5的全闪存
    local flag_sasssd_v3=$(echo $devicename |egrep "FusionStorage S25A Node")
    local flag_sasssd_v5=$(echo $devicename |egrep "FusionStorage S25B Node")
    #融合资源池电子标签
    local flag_F12B_H=$(echo $devicename | grep -E 'FusionStorage F12B-H Node|FusionStorage P12X-V1-H Node')
    local flag_sasssd_ts=$(echo $devicename |egrep "FusionStorage S25C Node")
    local flag_9k_x86_SSD=$(echo $devicename |egrep "S25X Node")


    if [ "${flag_P}" != "" ];then
        device_type=0
    elif [ "${flag_C}" != "" ];then
        device_type=1
    elif [ "${flag_M}" != "" ];then
        device_type=3
    elif [ "${flag_P12E}" != "" ];then
        device_type=12
    elif [ "${flag_P25E}" != "" ];then
        device_type=13
    elif [ "${flag_P36E}" != "" ];then
        device_type=14
    elif [ "${flag_C36E_L}" != "" ];then
        device_type=15
    elif [ "${flag_C36E_H}" != "" ];then
        device_type=16
    #文件/对象设备
    elif [ "${flag_FSFile}" != "" ];then
        device_type=17
    elif [ "${flag_F12}" != ""  ];then
        device_type=12
    elif [ "${flag_F25}" != ""  ];then
        device_type=13    
    #块设备
    elif [ "${flag_FSBlock}" != "" ];then
        device_type=18
    elif [ "${flag_B12}" != ""  ];then
        device_type=18
    elif [ "${flag_B25}" != ""  ];then
        device_type=18
    #16G虚拟机
    elif [ "${flag_VM_DJ}" != "" ];then
        device_type=19
    #32G虚拟机
    elif [ "${flag_VM_FSM}" != "" ];then
        device_type=20
    elif [ "${flag_P12X}" != "" ];then
        device_type=21
    elif [ "${flag_P25X}" != "" ];then
        device_type=22
    elif [ "${flag_P36X}" != "" ];then
        device_type=23
    elif [ "${flag_P36X_H}" != "" ];then
        device_type=24
    elif [ "${flag_C36X_L}" != "" ];then
        device_type=25
    elif [ "${flag_C36X_H}" != "" ];then
        device_type=26
    elif [ "${flag_F12X}" != "" ];then
        device_type=27
    elif [ "${flag_F25X}" != "" ];then
        device_type=28
    elif [ "${flag_F36X}" != "" ];then
        device_type=29
    #sas_ssd
    elif [ "${flag_sasssd_v3}" != "" ];then
        device_type=30
    elif [ "${flag_sasssd_v5}" != "" ];then
        device_type=31
    elif [ "${flag_F12B_H}" != "" ];then
        device_type=40  
    elif [ "${flag_taishan_P12A}" != "" ];then
        device_type=32
    elif [ "${flag_taishan_P25A}" != "" ];then
        device_type=33
    elif [ "${flag_taishan_P36A}" != "" ];then
        device_type=34
    elif [ "${flag_taishan_C36A}" != "" ];then
        device_type=35
    elif [ "${flag_F12C}" != "" ];then
        device_type=36
    elif [ "${flag_F25C}" != "" ];then
        device_type=37
    elif [ "${flag_F36C}" != "" ];then
        device_type=38
    elif [ "${flag_sasssd_ts}" != "" ];then
        device_type=39
    elif [ "${flag_9k_x86_SSD}" != "" ];then
        device_type=41
    elif [ "${flag_taishan_S12A}" != "" ];then
        device_type=42
    elif [ "${flag_taishan_S25A}" != "" ];then
        device_type=43
    elif [ "${flag_taishan_C72A}" != "" ];then
        device_type=44
    elif [ "${flag_taishan_S36A}" != "" ]; then
        device_type=45
    elif [ "${flag_F36B_L}" != "" ];then
        device_type=46
    elif [ "${flag_F36B_C}" != "" ];then
        device_type=47
    elif [ "${flag_F36B_CH}" != "" ];then
        device_type=48
    else
        device_type=${DEVICE_TYPE_ERR}
    fi

    return ${device_type}
}

function CheckElecLable
{
    # 检查系统域电子标签，用于系统识别V3/V5/TS/T3000电子标签，修改后重启才生效
    PRODUCT_NAME=$(GetProdumctName)
    if [ -z "${PRODUCT_NAME}" ]; then
        isPass=1
        LOG "[$FUNCNAME][$LINENO] ERR:Get product name fail."
        echo "[ERR]NodeType:Get product name fail." >>${RESULTFILE} 2>&1
        echo "${CurInspectFun}_Pass ${isPass}" >>${RESULTFILE} 2>&1
        return
    fi
    local isRH=0
    local isTS=0
    IsRHNode
    isRH=$?
    IsTSNode
    isTS=$?
    if [ $isRH -ne 0 ] && [ $isTS -ne 0 ];then
        isPass=1
        echo "[ERR]SysDomainElecLable:$PRODUCT_NAME" >>${RESULTFILE} 2>&1
        return
    fi

    # 检查产品域电子标签，用于判断系统识别盘位等信息，修改后实时生效
    ProductDomainElecLable=$( ipmitool fru | grep 'Product Name' | head -1 | awk -F: '{print $2}' | sed "s/^ *//g" | sed "s/ *$//g" )
    IsValidProductElecLable "${ProductDomainElecLable}"
    if [ $? -eq ${DEVICE_TYPE_ERR} ]; then
        isPass=1
        echo "[ERR]ProductDomainElecLable:$ProductDomainElecLable" >>${RESULTFILE} 2>&1
        return
    fi

    echo "SysDomainElecLable:$PRODUCT_NAME||ProductDomainElecLable:$ProductDomainElecLable" >>${RESULTFILE} 2>&1

    return
}

CheckElecLable
echo "${CurInspectFun}_Pass ${isPass}" >>${RESULTFILE} 2>&1
exit 0