#!/bin/bash
set +x

LOG_FILE="/var/log/inspect.log"
. /opt/node_type_recognize.sh
. /opt/install_os_common_func.sh
. /opt/huawei/snas/script/inspect_mml/CommonFunc.sh

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

#ȡOFED汾
function get_ofed_version()
{
    local ofedVer=""
    local tmpInfo=""
    local iRet=0
    tmpInfo=$(ofed_info -s)
    iRet=$?
    if [ $? -ne 0 ];then
        LOG "[$FUNCNAME][$LINENO]get ofed info fail,iRet=${iRet},tmpInfo=${tmpInfo}"
        echo ${ofedVer}
        return 0
    fi

    if [[ "${tmpInfo}" =~ "MLNX_OFED_LINUX-3.2" ]];then
        ofedVer="3.2"
    elif [[ "${tmpInfo}" =~ "MLNX_OFED_LINUX-4.2" ]];then
        ofedVer="4.2"
    elif [[ "${tmpInfo}" =~ "OFED-internal-4.4" ]];then
        ofedVer="4.4"
    elif [[ "${tmpInfo}" =~ "OFA-LINUX-4.17" ]];then
        ofedVer="4.17"
    else
        ofedVer=""
        LOG "[$FUNCNAME][$LINENO]no match ofed info,tmpInfo=${tmpInfo}"
    fi

    echo ${ofedVer}
    return 0
}

#ȡ汾
function get_driver_version()
{
    local cm_db_file="/opt/huawei/snas/etc/cm_conf.db"
    local cm_conf_file="/opt/huawei/snas/etc/cm.ini"
    local isTS=0
    version_driver=""

    IsTSNode
    isTS=$?
    #ȡ汾һʽversion: 2.10.1.2  version: 3.2-2.0.0-HW:2.0 (25 Feb 2016)
    local my_nid=$(grep "^NID=" "${cm_conf_file}"| awk -F= '{print $2}')
    local back_card_name=$(/usr/bin/sqlite3 "${cm_db_file}" "select CARD_NAME from CM_NODE_NETCARD_T where SUBNET_ID=1 and NID=${my_nid}" | head -1)
    LOG "[$FUNCNAME][${LINENO}]my_nid=${my_nid}, back_card_name=${back_card_name}."
    version_netcard=`ethtool -i $back_card_name  2>/dev/null| grep -we ^version: | awk -F"version:" '{print $2}'| awk -F" " '{print $1}' | sed -e 's/\://'`
    if [ -z "$version_netcard" ] ; then
        version_driver=$version_driver"netcard driver: null\n"
    else
        version_driver=$version_driver"netcard driver: $version_netcard\n"
    fi

    #ȡnvdimm汾
    if [ ${isTS} -eq 0 ];then
        #ARMûnvdimm
        version_nvdimm=""
    else
        version_nvdimm=`rpm -qa |grep nvdimm |awk -F "-" '{print $(NF-1)}'`
    fi
    if [ -z "$version_nvdimm" ] ; then
        version_driver=$version_driver" nvdimm driver: null\n"
    else
        version_driver=$version_driver" nvdimm driver: $version_nvdimm\n"
    fi

    #ȡOFED汾
    ofedVer=$(get_ofed_version)

    if [ -z "$ofedVer" ] ; then
        version_driver=$version_driver" ofed driver: null\n"
    else
        version_driver=$version_driver" ofed driver: $ofedVer\n"
    fi

    #ȡSAS汾
    IsRHNode
    isrhNode=$?
    if [ "$isrhNode" = "0" ]; then
        version_sascard=`rpm -qa |grep lsisas-mpt3sas |awk -F "-" '{print $6}'`
    elif [ ${isTS} -eq 0 ];then
        #ARM ûSAS
        version_sascard=""
    else
        version_sascard=`rpm -qa |grep lsisas |awk -F "-" '{print $(NF-1)}'`
    fi
    if [ -z "$version_sascard" ] ; then
        version_driver=$version_driver"sascard driver: null\n"
    else
        version_driver=$version_driver"sascard driver: $version_sascard\n"
    fi
    echo "$version_driver"
}

#16ַתΪASCIIַ
function hex2ascii()
{
    INPUT=$1
    OUTPUT=""
    for i in $INPUT ; do
        OUTPUT=$OUTPUT`echo -e "\\x$i"`
    done
    echo "$OUTPUT"
}
#RHǴӵڶֶοʼȡ
function RHhex2ascii()
{
    local idx=0
    local INPUT=$1
    local OUTPUT=""
    for i in $INPUT ; do
        idx=$((idx+1))
        if [ $idx -gt 1 ];then
            OUTPUT=$OUTPUT`echo -e "\\x$i"`
        fi
    done
    echo "$OUTPUT"
}

function get_RH_firmware_version
{
    version_firmware=""
    #ȡBMC̼汾
    raw_version=`ipmitool raw 0x30 0x90 0x08 0x0 0x01 0x00 0x0e`
    raw_version_test=`echo $raw_version |grep -Ev ^[0-9,a-f,' ']+$`
    if [ -z "$raw_version" ] || [ ! -z "$raw_version_test" ] ; then
        version_bmc="null"
    else
        version_bmc=`RHhex2ascii "$raw_version"`
    fi
    version_firmware=$version_firmware"           BMC: $version_bmc\n"
    #ȡBIOS̼汾
    raw_version=`ipmitool raw 0x30 0x90 0x08 0x00 0x06 0x00 0x0e`
    raw_version_test=`echo $raw_version |grep -Ev ^[0-9,a-f,' ']+$`
    if [ -z "$raw_version" ] || [ ! -z "$raw_version_test" ] ; then
        version_bios="null"
    else
        version_bios=`RHhex2ascii "$raw_version"`
        version_bios=`echo $version_bios|awk -F ")" '{print $2}'`
    fi
    version_firmware=$version_firmware"          BIOS: $version_bios\n"
    IsRH2288Node
    if [ "$?" = "0" ]; then
        #ȡ2288 CPLD̼汾
        raw_version=`ipmitool raw 0x30 0x90 0x08 0x00 0x02 0x00 0x0e`
        raw_version_test=`echo $raw_version |grep -Ev ^[0-9,a-f,' ']+$`
        if [ -z "$raw_version" ] || [ ! -z "$raw_version_test" ] ; then
            version_mb_cpld="null"
        else
            version_mb_cpld=`RHhex2ascii "$raw_version"`
            version_mb_cpld=`echo $version_mb_cpld|awk -F ")" '{print $2}'`
        fi
        version_firmware=$version_firmware"       MB_CPLD: $version_mb_cpld\n"
        echo "$version_firmware"

    else
        raw_version=` ipmitool raw 0x30 0x90 0x08 0x00 0x02 0x00 0x0e`
        raw_version_test=`echo $raw_version |grep -Ev ^[0-9,a-f,' ']+$`
        if [ -z "$raw_version" ] || [ ! -z "$raw_version_test" ] ; then
            version_mb_cpld="null"
        else
            version_mb_cpld=`RHhex2ascii "$raw_version"`
            version_mb_cpld=`echo $version_mb_cpld|awk -F ")" '{print $2}'`
        fi
        version_firmware=$version_firmware"       MB_CPLD: $version_mb_cpld\n"
        echo "$version_firmware"
    fi
}

function get_TS_firmware_version
{
    local iobBordId="69"
    local retCheck=""
    version_firmware=""
    #ȡBMC̼汾
    raw_version=`ipmitool raw 0x30 0x90 0x08 0x0 0x01 0x00 0x0e`
    raw_version_test=`echo $raw_version |grep -Ev ^[0-9,a-f,' ']+$`
    if [ -z "$raw_version" ] || [ ! -z "$raw_version_test" ] ; then
        version_bmc="null"
    else
        version_bmc=`RHhex2ascii "$raw_version"`
    fi
    version_firmware=$version_firmware"           BMC: $version_bmc\n"

    #ȡBIOS̼汾
    raw_version=`ipmitool raw 0x30 0x90 0x08 0x00 0x06 0x00 0x0e`
    raw_version_test=`echo $raw_version |grep -Ev ^[0-9,a-f,' ']+$`
    if [ -z "$raw_version" ] || [ ! -z "$raw_version_test" ] ; then
        version_bios="null"
    else
        version_bios=`RHhex2ascii "$raw_version"`
        version_bios=`echo $version_bios|awk -F ")" '{print $2}'`
    fi
    version_firmware=$version_firmware"          BIOS: $version_bios\n"

    IsTS5280Node
    if [ "$?" = "0" ]; then

        #ȡ5280 CPLD̼汾
        raw_version=`ipmitool raw 0x30 0x90 0x08 0x00 0x02 0x00 0x0e`
        raw_version_test=`echo $raw_version |grep -Ev ^[0-9,a-f,' ']+$`
        if [ -z "$raw_version" ] || [ ! -z "$raw_version_test" ] ; then
            version_mb_cpld="null"
        else
            version_mb_cpld=`RHhex2ascii "$raw_version"`
            version_mb_cpld=`echo $version_mb_cpld|awk -F ")" '{print $2}'`
        fi
        version_firmware=$version_firmware"       MB_CPLD: $version_mb_cpld\n"

        #ٻȡIOB/IOB_CPLD/BBU/backend_cpld̼汾
        echo "$version_firmware"

    else
        raw_version=` ipmitool raw 0x30 0x90 0x08 0x00 0x02 0x00 0x0e`
        raw_version_test=`echo $raw_version |grep -Ev ^[0-9,a-f,' ']+$`
        if [ -z "$raw_version" ] || [ ! -z "$raw_version_test" ] ; then
            version_mb_cpld="null"
        else
            version_mb_cpld=`RHhex2ascii "$raw_version"`
            version_mb_cpld=`echo $version_mb_cpld|awk -F ")" '{print $2}'`
        fi
        version_firmware=$version_firmware"       MB_CPLD: $version_mb_cpld\n"
        #ٻȡIOB/IOB_CPLD/BBU/backend_cpld̼汾
        echo "$version_firmware"
    fi
}

function checkUpgradeFlag()
{
    # ĽڵupgflagΪ0 ; ڵûfuncversion汾upgflagΪ 1; ڵfuncversion汾upgflagΪ2. ͬ汾upgflagΪ3
    local FuncVersion=$1
    local upgflag=0

    #´汾,򲻼,Ҫųа汾,Իͬ汾, Ӧòͬ汾.
    local upgrade_log=/var/log/upgrade.log
    local update_ver=$(cat ${upgrade_log} | grep -Po '(?<=pre_clusterVersion is )[0-9]+' | tail -n 1 | tr -d ' ')
    if [ "X$update_ver" == "X$FuncVersion" ];then
        upgflag=3
        echo $upgflag
        return
    fi
    #,ж
    old_svn_count=$(cat ${upgrade_log} | grep "mvx -s finish" | wc -l)
    if [ $old_svn_count -eq 0 ]  ;then
        upgflag=0
    else
        new_cluster_count=$(cat ${upgrade_log} | grep "new_cluster_version" | tail -n 1 |grep ${FuncVersion} | wc -l)
        if [ $new_cluster_count -eq 0 ];then
            if [ $old_svn_count -lt 2 ];then
                upgflag=0
            else
                upgflag=1
            fi
        else
            upgflag=2
        fi
    fi
    echo $upgflag
}


version_all=`get_driver_version`
IsRHNode
if [ $? -eq 0 ]; then
    version_all=$version_all"`get_RH_firmware_version`"
fi

#ARM
IsTSNode
if [ $? -eq 0 ]; then
    version_all=$version_all"`get_TS_firmware_version`"
fi

echo -e "$version_all"

nodetype=$(cat  /opt/huawei/deploy/etc/deploy.ini | grep devicetype |awk -F= '{print $2}')
echo "devicetype: $nodetype"
LOG "devicetype: $nodetype"

is3008SasCard
is3008SasFlag=$?
is3416SasCard
is3416SasFlag=$?
if [ $is3008SasFlag -eq 0 ]; then
    echo "sastype: 3008"
    LOG "sastype: 3008"
elif [ $is3416SasFlag -eq 0 ]; then
    echo "sastype: 3416"
    LOG "sastype: 3416"
else
    echo "sastype: 0"
    LOG "sastype: 0"
fi

cat /opt/huawei/deploy/package/version | grep ExternalVersion | sed 's/=/: /'
#ȡ汾
ComponentVersion=`cat /var/huawei/patch/cur/version|grep ProductVersion|awk -F'=' '{print$2}'`
if [ "$ComponentVersion" != "" ];then
    echo "ComponentVersion:$ComponentVersion"
else
    echo "ComponentVersion:"
fi
LOG "ComponentVersion:$ComponentVersion"

#ȡȲ汾
SphVersion=`ls /var/huawei/patch/cur/sph |awk -F'_' '{print$NF}'`
if [ "$SphVersion" != "" ];then
    echo "SphVersion:$SphVersion"
else
    echo "SphVersion:"
fi
LOG "SphVersion: $SphVersion"

#ȡڵ汾
FuncVersion=$(cat /opt/huawei/snas/static/funcver.ini |tr -d " "|grep "NodeVersion=" |awk -F"=" '{print $2}')
echo "FuncVersion:$FuncVersion"
LOG "[GetNodeVersion][$LINENO]FuncVersion:$FuncVersion"

upgflag=$(checkUpgradeFlag $FuncVersion)
echo "UpgradeFlag:$upgflag"
LOG "[GetNodeVersion][$LINENO]UpgradeFlag:$upgflag"
ClusterUpdStatus=$(cat /opt/huawei/snas/etc/updresult.ini |grep ClusterUpdStatus | awk -F= '{print $2}'| sed 's/[^0-9]//g')
echo "ClusterUpdStatus:$ClusterUpdStatus"
ClusterVersion=$(cat /opt/huawei/snas/etc/clusterver.ini |tr -d " "|grep "ClusterVersion="|awk -F"=" '{print $2}')
echo "ClusterVersion:$ClusterVersion"
LOG "[GetNodeVersion][$LINENO]ClusterVersion:$ClusterVersion"
