#!/bin/bash
set +x
LOG_FILE="/var/log/inspect.log"
G_MML_FILE_PATH="/opt/huawei/snas/script/inspect_mml"
source ${G_MML_FILE_PATH}/CheckItems
source ${G_MML_FILE_PATH}/CommonFunc.sh
CurInspectNum="344"
CurInspectFun="$(GetInspectType $CurInspectNum)"
RESULTFILE="${G_TMP_INSPECT_PATH}tmpResult${CurInspectFun}"
>${RESULTFILE}

isPass=0
resultInfo=""

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

#жϵǰڵǷbjm serverڵ
function IsBjmServer()
{
    local bjmServerBackIP=$( cat /proc/monc_jsmap | grep "active server ip" | head -n1 | awk -F'(' '{print $2}' | awk -F')' '{print $1}' )
    ifconfig | grep -w "${bjmServerBackIP}"

    return $?
}

function IsMonLeader()
{
    local monleaderBackIP=$( cat /proc/monc_leader | grep "Mon leader" | awk -F ': ' '{printf $2}' )
    ifconfig | grep -w "${monleaderBackIP}"

    return $?
}

# ռ
function CheckSnapshotCollection() {
    local strCmdOut=""
    strCmdOut=$( /usr/local/bin/MmlBatch 4004 "mon snaptrackmap 0" )
    iRet=$?
    if [ $iRet -ne 0 ]; then
        echo "[ERR]INFO:Failed to execute command(MmlBatch 4004 'mon snaptrackmap 0')." >>${RESULTFILE} 2>&1
        LOG [$FUNCNAME][$LINENO] "Failed to execute command(MmlBatch 4004 'mon snaptrackmap 0')."
        resultInfo="COLLECT_INFO:-"
        isPass=1
        return
    fi

    snapTrackEpoch=$( echo "${strCmdOut}" | grep "Snap track epoch" | head -n1 | awk '{print $5}' | sed 's/[^0-9]//g' )
    snapTrackOverepoch=$( echo "${strCmdOut}" | grep "Snap track Overepoch" | head -n1 | awk '{print $5}' | sed 's/[^0-9]//g' )
    if [ "X${snapTrackEpoch}" == "X" -o "X${snapTrackOverepoch}" == "X" ];then
       echo "[ERR]INFO:Failed to get snapTrackEpoch or snapTrackOverepoch info." >>${RESULTFILE} 2>&1
       LOG [$FUNCNAME][$LINENO] "Failed to get snapTrackEpoch or snapTrackOverepoch info."
       resultInfo="COLLECT_INFO:-"
       isPass=1
       return
    fi

    epochDelta=`expr ${snapTrackEpoch} - ${snapTrackOverepoch}`
    if [ ${epochDelta} -ge 48 -a ${epochDelta} -lt 96 ];then
        isPass=4
        echo "[ERR]INFO:DiffSnapTrackEpoch(${epochDelta}) is greater than or equal to 48, and less than 96." >>${RESULTFILE} 2>&1
        LOG [$FUNCNAME][$LINENO] "DiffSnapTrackEpoch(${epochDelta}) is greater than or equal to 48, and less than 96."
    fi

    if [ ${epochDelta} -ge 96 ];then
        isPass=1
        echo "[ERR]INFO:DiffSnapTrackEpoch(${epochDelta}) is greater than 96." >>${RESULTFILE} 2>&1
        LOG [$FUNCNAME][$LINENO] "DiffSnapTrackEpoch(${epochDelta}) is greater than 96."
    fi

    resultInfo="COLLECT_INFO:Snap track epoch:${snapTrackEpoch}, Snap track Overepoch:${snapTrackOverepoch}, DiffSnapTrackEpoch(${epochDelta})"

}

# պ̨ѹ
function CheckSnapshotBackupCleanup() {
    local strCmdOut=""
    strCmdOut=$( /usr/local/bin/MmlBatch 4104 "bjm get snapdel list" )
    iRet=$?
    if [ $iRet -ne 0 ]; then
        echo "[ERR]INFO:Failed to execute command(MmlBatch 4104 'bjm get snapdel list')." >>${RESULTFILE} 2>&1
        LOG [$FUNCNAME][$LINENO] "Failed to execute command(MmlBatch 4104 'bjm get snapdel list')."
        resultInfo="$resultInfo||CLEAN_INFO:-"
        isPass=1
        return
    fi

    echo "${strCmdOut}" | grep "[SNAP][CLN]get snap id list null!"
    if [ $iRet -eq 0 ]; then
        resultInfo="$resultInfo||CLEAN_INFO:No snapshots need to be clean."
        LOG [$FUNCNAME][$LINENO] "[SNAP][CLN]get snap id list null! No snapshots need to be clean."
        return
    fi

    snapdelWaitingCount=$( cat /var/log/snas_bjm_snapdellist | grep "SNAP_DELSTATUS_DELETWAITING" | wc -l )
    if [ ${snapdelWaitingCount} -gt 48 ];then
        isPass=1
        echo "[ERR]INFO:SnapdelWaitingCount(${snapdelWaitingCount}) is greater than 48." >>${RESULTFILE} 2>&1
        LOG [$FUNCNAME][$LINENO] "SnapdelWaitingCount(${snapdelWaitingCount}) is greater than 48."
    fi

    resultInfo="$resultInfo||CLEAN_INFO:SnapdelWaitingCount(${snapdelWaitingCount})"

}

IsBjmServer
isbjmserver=$?
IsMonLeader
ismonleader=$?

if [ ${isbjmserver} -eq 0 ] && [ ${ismonleader} -eq 0 ]; then
    # ǰڵͬʱbjm serverڵmon leaderڵ㣬ռͿպ̨ѹ
    CheckSnapshotCollection
    CheckSnapshotBackupCleanup
    LOG "[$LINENO] $resultInfo"
elif [ ${isbjmserver} -ne 0 ] && [ ${ismonleader} -eq 0 ]; then
    # ǰڵmon leaderڵ㣬ռ
    CheckSnapshotCollection
    resultInfo="$resultInfo||CLEAN_INFO:-"
    LOG "[$LINENO] $resultInfo"
elif [ ${isbjmserver} -eq 0 ] && [ ${ismonleader} -ne 0 ]; then
    # ǰڵbjm serverڵ㣬պ̨ѹ
    resultInfo="COLLECT_INFO:-"
    CheckSnapshotBackupCleanup
    LOG "[$LINENO] $resultInfo"
else
    resultInfo="COLLECT_INFO:-||CLEAN_INFO:-"
    LOG "[$LINENO] IsBjmServer: not bjm server, no need check."
    LOG "[$LINENO] IsMonLeader: not mon leader, no need check."
fi

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