#!/bin/bash
set +x

#检查集群节点个数
G_INSPECT_MMLPATH="/opt/huawei/snas/script/inspect_mml"
source ${G_INSPECT_MMLPATH}/CheckItems
CurInspectNum="357"
CurInspectFun="$( GetInspectType $CurInspectNum )"
RESULTFILE="/tmp/tmpResult${CurInspectFun}"
>${RESULTFILE}

LOG_FILE="/var/log/inspect.log"
RepeatTimes=(1 2 3)
function LOG
{
   time=$(date)
   echo [${time}][$$]$@ >> ${LOG_FILE}
}

function set_ifs
{
    IFS_OLD=$IFS
    IFS=$'\n'
}

function restore_ifs
{
    IFS=$IFS_OLD
}
function CheckNodePoolDiskConsistency()
{
    local iRet=0
    local isPass=0
    local type=0
    local checkfile_tmp="/tmp/tmpfileCheckNodePoolDiskConsistency"
    local checkfile_data="/tmp/tmpfileCheckNodePoolDiskConsistencydata"
    local checkfile1_data="/tmp/tmpfileCheckNodePoolDiskConsistencydate"
    local get_nodepool_info_cmd="cat /proc/monc_dsmap"
    local Id

    cat /proc/monc_dsmap > ${checkfile_tmp} 2>&1
    iRet=$?
    if [ ${iRet} -ne 0 ]; then
        isPass=1
        echo "INFO:Failed to execute command(cat /proc/monc_dsmap). Error(${iRet})." >> "${RESULTFILE}" 2>&1
        echo "${CurInspectFun}_Pass ${isPass}" >>${RESULTFILE} 2>&1
        LOG "[$FUNCNAME]${CurInspectFun}_Pass ${isPass},get diskpool disk info failed,cmd: ${get_nodepool_info_cmd}."
        return
    else
        set_ifs
        dos2unix ${checkfile_tmp} >/dev/null 2>&1
        ips=($(grep -w "IpAddr"  ${checkfile_tmp} | awk -F " " '{print $14}'))
        #按IP排序
        grep -w "IpAddr" ${checkfile_tmp} |awk -F " " '{print $14}'|awk -F "." '{print $1 $2 $3 $4}' > ${checkfile1_data} 2>&1
        ipnumber=($(cat -n ${checkfile1_data}|sort -nk 2|awk '{print $1}'))
        NumArr1=($(grep -n -w "IpAddr" ${checkfile_tmp} | awk -F ":" '{print $1}'))
        NumArr2=($(grep -n "\-\-\-\-\-\-\-\-\-\-" ${checkfile_tmp} | awk -F ":" '{print $1}'))
        declare -a totalCap=()  #每种diskPool类型的totalCap都只存一个基值 作为后续比较 diskPool做下标
        declare -a diskType=()  #每种diskPool类型的diskType都只存一个基值 作为后续比较 diskPool做下标

        for i in ${ipnumber[*]};do
            i=$((i-1))
            distance=$((${NumArr2[i]}-${NumArr1[i]}-1))
            grep -A${distance} -w ${ips[i]} ${checkfile_tmp}|grep -v ${ips[i]}|grep -v "Pools in Ds" >${checkfile_data} 2>&1
            cat ${checkfile_data} |grep "State" |sort -nk 2 >${checkfile1_data}

            while read line;do
                Id=$( echo "${line}" | awk '{print $2}' )
                disk_pool=$( echo "${line}" | awk '{print $6}' )
                type_tmp=$( echo "${line}" | awk '{print $8}' )
                total_tmp=$( echo "${line}" | awk '{print $10}' )
                
                if [ "${totalCap[${disk_pool}]}" == "" ]; then
                    totalCap[${disk_pool}]=$total_tmp
                    diskType[${disk_pool}]=$type_tmp
                else
                    # DiskPool相同的Pool的Type和TotalCap全相同，才巡检通过
                    if [ ${totalCap[${disk_pool}]} != ${total_tmp} ] || [ ${diskType[${disk_pool}]} != ${type_tmp} ] ;then  
                        isPass=1
                        LOG "[$FUNCNAME]${CurInspectFun}_Pass ${isPass},errip:${ips[i]}, DiskPool(${disk_pool}) fail to pass the check."
                    fi
                fi

                echo "IpAddr:${ips[i]}||Id:${Id}||DiskPool:${disk_pool}||Type:${type_tmp}||TotalCap:${total_tmp}" >> "${RESULTFILE}"  2>&1
            done < ${checkfile1_data}

        done
        restore_ifs
    fi

    echo "${CurInspectFun}_Pass ${isPass}" >>${RESULTFILE} 2>&1
    rm -f ${checkfile_tmp} >/dev/null 2>&1
    rm -f ${checkfile_data} >/dev/null 2>&1
    rm -f ${checkfile1_data} >/dev/null 2>&1
}
CheckNodePoolDiskConsistency


