############################################################
# 所属模块	: OceanStor9000 巡检工具
# 功能      : SPH201补丁中协议InfoEqualizer进程检查和浮动IP地址配置异常
# 创建时间	:
# 描述		：
#
#
#
############################################################
#!/bin/sh
set +x

G_MML_FILE_PATH="/opt/huawei/snas/script/inspect_mml"
source $G_MML_FILE_PATH/CheckItems
source $G_MML_FILE_PATH/CommonFunc.sh
CurInspectNum="330"
CurInspectFun="$(GetInspectType $CurInspectNum)"
RESULTFILE="${G_TMP_INSPECT_PATH}tmpResult${CurInspectFun}"
LOG_FILE="/var/log/inspect.log"
>${RESULTFILE}


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

PROGRAM_NAME=${0##*/}
NAS_IPFIX_LOG=/var/log/platform/cmr_ipcheck.log
patch_show="/opt/huawei/snas/upd/patch_script/cluster_patch.sh"
basedir=/home/omuser/`date '+%s'`/
nassh="$basedir""nas.sh"
ACTION=$1

function touch_nassh()
{
    mkdir -p $basedir
    touch $nassh
    > $nassh
    echo "#!/bin/bash" >> $nassh
    echo "\$*" >> $nassh
    chmod 755 $nassh
}

function remove_nassh()
{
    rm -rf $nassh
}

## 获取协议的第一个后端IP
function get_backend_ip()
{
    echo `grep -a "State Normal" /proc/monc_pipmap | head -1 | awk -F ' ' '{print $3}'`
}

## 匹配产品版本信息
## return value
##     1 不匹配
##     0 匹配
function product_version()
{
    version_value=$1
    grep -a "ExternalVersion" /opt/huawei/deploy/package/version | grep -a "$version_value" > /dev/null

    if [[ $? -ne 0 ]]; then
        return 0
    fi

    return 1
}

## 匹配补丁版本信息 >=7.1.1.SPH201
## return value
##     1 不匹配
##     0 匹配
function patch_version()
{
    local version_check=$( echo $1 | awk -F "7.1.1.SPH" '{print $2}') 
    local version_real=""
    local backend_ip=$(get_backend_ip)
    local version_real=$( $patch_show "$backend_ip" show | grep -a "Node Status:confirm ok" | awk -F "7.1.1.SPH" '{print $2}' | awk -F "," '{print $1}')
    if [ "X${version_check}" != "X" ] && [ "X${version_real}" != "X" ] && [[ ${version_real} -ge ${version_check} ]]; then
        return 0
    fi

    return 1
}

## 匹配协议InfoEqualizer二进程文件信息
## return value
##     1 不匹配
##     0 匹配
function process_version()
{
    sum=$1
    sha256sum /usr/local/bin/InfoEqualizer | grep -a "$sum" > /dev/null

    if [[ $? -ne 0 ]]; then
        return 0
    fi

    return 1
}

## 判断已分配的IP地址个数与节点上的IP地址个数是否相同
## return value
##     1 不相同
##     0 相同
function check_dynip_of_node()
{
    ipnumber_on_nodes=`$nassh nas_proto_cluster -c get_node | grep -a "<node_dynamicip>" | wc -l`
    ipnumber_on_iplist=`$nassh nas_proto_cluster -c get_dynip | grep -a "<dynamicip_state>1<" | wc -l`

    if [[ $ipnumber_on_iplist -gt 0 && $ipnumber_on_iplist -gt $ipnumber_on_nodes ]]; then
        return 1
    fi

    return 0
}

## 版本检查
## return value
##     1 不匹配
##     0 匹配
function version_check()
{
    product_version "7.1.1.SPC2"
    if [[ $? -eq 0 ]]; then
        return 0
    fi
    #如果打了7.1.1.SPH201并且没有修复则巡检不通过,所以不再检查补丁版本
    # patch_version "7.1.1.SPH201"

    uname -m | grep -ai "x86" > /dev/null
    if [[ $? -eq 0 ]]; then
        process_version "71e5f3154b5cc83b6a19115188e106c607a83a7edef4870104ce0663d17648d0"
    else
        process_version "bac14be6fc3f4f808efcb50ff49d5326c72aac2f57fbde729d8e9a22de108091"
    fi
    if [[ $? -eq 0 ]]; then
        return 0
    fi
    isPass=1
    process_version_result="matched"
    return 1
}

## 检查浮动IP地址配置异常
## return value
##     1 异常
##     0 正常
function dynamicip_check()
{
    check_dynip_of_node
    if [[ $? -ne 0 ]]; then
        isPass=1
        dynamicip_status="abnormal"
        return 1
    fi

    return 0
}

process_version_result="unmatched"
process_version_ERR="NULL"
dynamicip_status="normal"
function main()
{
    local Result=""
    local ret1=0   # version matched --1
    local ret2=0   # ip_check ERR    --1
    # versioncheck 
    version_check
    ret1=$?

    # ipcheck
    touch_nassh
    dynamicip_check
    ret2=$?
    remove_nassh
    #case1. 如果仅版本信息匹配，没有浮动IP地址配置异常，使用OceanStor_9000_V5_upd_patch_for_7.1.1.SPH201.zip工具手动修复。
    #case2. 如果版本信息不匹配，浮动IP地址配置异常，使用InfoEqualizer_dynamicip_fix.zip工具手动修复。
    #case3. 如果版本信息匹配且浮动IP地址配置异常，先使用OceanStor_9000_V5_upd_patch_for_7.1.1.SPH201.zip工具手动修复，再使用InfoEqualizer_dynamicip_fix.zip工具手动修复。
    if [ $ret1 -eq 1 ] && [ $ret2 -eq 0 ];then
        repair="For details, see Case 1."
    elif [ $ret1 -eq 0 ] && [ $ret2 -eq 1 ];then
        repair="For details, see Case 2."
    elif [ $ret1 -eq 1 ] && [ $ret2 -eq 1 ];then
        repair="For details, see Case 3."
    else
        repair="NULL"
    fi
    echo "process_version_result:${process_version_result}||dynamicip_status:${dynamicip_status}||repair_method:${repair}" >>${RESULTFILE}
    #所有项的标识必须相同，这会影响工具界面显示
    echo "${CurInspectFun}_Pass $isPass" >>${RESULTFILE}

}
main
exit 0
