#!/bin/bash

#
#巡检用户数据库备份
#只在POE节点上检查
#

#CM_INI_PATH
readonly CM_INI_PATH="/opt/huawei/snas/etc/cm.ini"

G_INSPECT_MMLPATH="/opt/huawei/snas/script/inspect_mml"
source $G_INSPECT_MMLPATH/CheckItems
CurInspectNum="265"
CurInspectFun="$(GetInspectType $CurInspectNum)"
RESULTFILE="/tmp/tmpResult${CurInspectFun}"
>${RESULTFILE}
LOG_FILE="/var/log/inspect.log"
CHECK_PASSED=0
CHECK_FAILED=1

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

#判断该节点是否需要检查,返回：1，需要检查；0，不需要检查
#1.检查本节点是否是S3/Swift节点
#2.检查本节点是否是S3/Swift管理节点
#3.检查本节点是否是S3/Swift管理POE主节点
function isNotNeedCheck()
{
    local node_service_type=$(egrep '[[]|^'node_service_type'=' /opt/huawei/snas/etc/snas.ini | tr -d '\n' | grep -Po '(?<=[[]'NODE'[]]'node_service_type'=)[0-9]+')
    if [ "X$node_service_type" == "X2" -o "X$node_service_type" == "X3" ];then
        source /opt/obs/scripts/common/s3_config_utility.sh >> /dev/null 2>&1
        is_s3_management_node > /dev/null
    if [ $? -eq 1 ];then
            localNID=$(grep -w NID ${CM_INI_PATH}|awk -F"=" '{print $2}')

            hainfo=$(grep -w "node id(${localNID})" /proc/monc_hamap)
            if [ "$hainfo" = "" ];then
                return 1
            else
                role=${hainfo##*role(}
                role=${role%%)status*}
                if [ "$role" = "1" ];then
                    return 1;
                elif [ "$role" = "2" ];then
                    return 0;
                else
                    #非管理节点
                    return 0
                fi
            fi
        fi
    fi
}

#检查数据库备份是否正常
function checkBackup()
{
    local isPass=0
    local checkDay=
    local lastDay=
    local checkHour=$(date +%H)
    local backups=$(sh /opt/obs/scripts/upf/upf_recover.sh listBackups 2>>/dev/null|grep "Database Backups"|awk -F "_" '{print $3}'|sort)
    if [ $? -ne 0 ];then
        LOG "[$LINENO]listBackup exec failed."
        echo "[ERR]INFO:check database failed" >> ${RESULTFILE} 2>&1
        echo "${CurInspectFun}_Pass ${CHECK_FAILED}" >>${RESULTFILE} 2>&1
        return 0;
    fi

    local backupArray=($backups)
    local backupNum="${#backupArray[@]}"

    if [ $backupNum -eq 0 ];then
        LOG "[$LINENO]backup number is 0, pass."
        echo "INFO:backup number is 0." >> ${RESULTFILE} 2>&1
        echo "${CurInspectFun}_Pass ${CHECK_PASSED}" >>${RESULTFILE} 2>&1
        return 0;
    fi
    #超过当天4点，需要从今天开始检查
    checkDay=$(date -d "1 day ago" +%Y%m%d)
    if [ $checkHour -gt 4 ];then
        checkDay=$(date +%Y%m%d)
    fi

    #防止系统更改过时间
    if [ $checkDay -lt ${backupArray[0]} ];then
        checkDay=${backupArray[0]}
    fi
    lastDay=$(date -d "$checkDay 6 day ago" +%Y%m%d)
    arrayLastDay=${backupArray[$backupNum-1]}

    while [ $checkDay -ge $lastDay -a $checkDay -gt $arrayLastDay ]
    do
        local num=$(echo ${backupArray[@]}|grep -Ew "$checkDay" -c)
        if [ "X$num" != "X1" ];then
            echo "[ERR]INFO:Backup Failed Date:$checkDay" >> ${RESULTFILE} 2>&1
            isPass=1
        fi
        checkDay=$(date -d "$checkDay 1 day ago" +%Y%m%d)
    done

    if [ 0 -eq ${isPass} ]; then
        echo "INFO:pass" >> ${RESULTFILE} 2>&1
    fi
    echo "${CurInspectFun}_Pass ${isPass}" >>${RESULTFILE} 2>&1
    LOG "[$LINENO]isPass: $isPass."
}

#如果不需要检查，则直接退出脚本执行,输出isCheck:0
if isNotNeedCheck;then
    echo "INFO:Does not involve" >> ${RESULTFILE} 2>&1
    echo "${CurInspectFun}_Pass ${CHECK_PASSED}" >>${RESULTFILE} 2>&1
    LOG "[$LINENO]not need check, pass."
    exit 0;
fi

checkBackup
