#!/bin/bash
set +x

#
#检查磁盘状态
#
TMP_RESULT_FILE="/tmp/tmpfilelocaldiskinfo"

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

DISK_STATUS_MML=$G_INSPECT_MMLPATH/ShowDiskOnposition

LOCAL_BACK_IP=""

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


#执行MML命令
function get_mml_result()
{
    local iRet=0
    source $G_INSPECT_MMLPATH/CommonFunc.sh
    LOCAL_BACK_IP=`GetLocalIp`
    if [ "${LOCAL_BACK_IP}X" == "X" ];then
        echo "[ERR]Node:$(hostname) ||INFO:Can't get backend IP." >> ${RESULTFILE} 2>&1
        echo "${CurInspectFun}_Pass ${CHECK_FAILED}" >>${RESULTFILE} 2>&1
        LOG "[$LINENO]Can't get backend IP."
        exit 0;
    fi

    ${DISK_STATUS_MML} ${LOCAL_BACK_IP}
    iRet=$?
    if [ $iRet -ne 0 ]; then
        echo "[ERR]Node:${LOCAL_BACK_IP} ||INFO:Failed to execute command(MmlBatch 4016 'cm localdiskinfo show'). Error(${iRet})." >> ${RESULTFILE} 2>&1
        echo "${CurInspectFun}_Pass ${CHECK_FAILED}" >>${RESULTFILE} 2>&1
        LOG "[$LINENO]MML exec failed."
        [ -f "${TMP_RESULT_FILE}" ] && rm "${TMP_RESULT_FILE}"
        exit 0;
    fi
    
    for i in $(seq 1 15)
    do
        if [ -f "${TMP_RESULT_FILE}" ];then
            break
        else
            LOG "[$LINENO]times($i) no file."
        fi
        sleep 10
    done
    return 0
}

function main()
{
    local isPass=0
    source "/opt/inspect/inspect_map.sh"

    get_mml_result
    dos2unix ${TMP_RESULT_FILE}

    local javaID=`cat ${TMP_RESULT_FILE} |grep "Disk_ID"|sed 's/^ *//g'|sed "/^$/d"`
    if [ "$javaID" == "" ];then
        isPass=1
        echo "[ERR]Node:${LOCAL_BACK_IP} ||INFO:Get disk information from command(MmlBatch 4016 'cm localdiskinfo show') failed." >> ${RESULTFILE} 2>&1
        echo "${CurInspectFun}_Pass ${isPass}" >>${RESULTFILE} 2>&1
        LOG "[$LINENO]:IP:${LOCAL_BACK_IP},Can not get disk information."
        return 0
    fi
    IFS_OLD=$IFS
    IFS=$'\n'

    isDiskEncrypt=`cat /opt/huawei/snas/etc/snas.ini |grep isDiskEncrypt |awk -F '=' '{print $2}'`
    
    for line in $javaID; do
        if [ "$line" = "" ];then
            continue;
        fi
        #格式Disk_ID: 123606 || parent_ID: 2575 || location: 06 || Health_Status: 1 || Running_Status: 27 || Disk_type: 2 || BandWidth: 0 || Speed: 7200 || Tempreature: 31 || Model: WDC WD1003FBYX-01Y7B0 || Version: 01.01V01 || Manufacture: Western Digital || SN: WD-WCAW30712454 || Size: 1000204886016 || RunTime: 3 || DiskNeedUpg: -- || DiskUpgStrategy: -- || SedType: 1 || AutoLockState: 1

        ID=$(echo "${line}" | awk -F'\\|\\|' '{print $1}' | awk -F':' '{print $2}' | tr -d ' ')

        parentID=$(echo "${line}" | awk -F'\\|\\|' '{print $2}' | awk -F':' '{print $2}' | tr -d ' ')
        #根据parentID获得IP
        parentIP=$(get_node_backnet_ip $parentID)

        slot=$(echo "${line}" | awk -F'\\|\\|' '{print $3}' | awk -F':' '{print $2}' | tr -d ' ')
        healthStatus=$(echo "${line}" | awk -F'\\|\\|' '{print $4}' | awk -F':' '{print $2}' | tr -d ' ')
        healthStatus=$(MapHealthStatus $healthStatus)

        runningStatus=$(echo "${line}" | awk -F'\\|\\|' '{print $5}' | awk -F':' '{print $2}' | tr -d ' ')
        runningStatus=$(MapRunningStatus $runningStatus)

        diskType=$(echo "${line}" | awk -F'\\|\\|' '{print $6}' | awk -F':' '{print $2}' | tr -d ' ')
        diskType=$(MapDiskType $diskType)

        bandwidth=$(echo "${line}" | awk -F'\\|\\|' '{print $7}' | awk -F':' '{print $2}' | tr -d ' ')
        speed=$(echo "${line}" | awk -F'\\|\\|' '{print $8}' | awk -F':' '{print $2}' | tr -d ' ')
        Temperature=$(echo "${line}" | awk -F'\\|\\|' '{print $9}' | awk -F':' '{print $2}' | tr -d ' ')
        model=$(echo "${line}" | awk -F'\\|\\|' '{print $10}' | awk -F':' '{print $2}')
        version=$(echo "${line}" | awk -F'\\|\\|' '{print $11}' | awk -F':' '{print $2}' | tr -d ' ')
        manu=$(echo "${line}" | awk -F'\\|\\|' '{print $12}' | awk -F':' '{print $2}' | tr -d ' ')
        SN=$(echo "${line}" | awk -F'\\|\\|' '{print $13}' | awk -F':' '{print $2}' | tr -d ' ')
        size=$(echo "${line}" | awk -F'\\|\\|' '{print $14}' | awk -F':' '{print $2}' | tr -d ' ')
        runTime=$(echo "${line}" | awk -F'\\|\\|' '{print $15}' | awk -F':' '{print $2}' | tr -d ' ')
        diskNeedUpg=$(echo ${line} | awk -F'\\|\\|' '{print $16}' | awk -F':' '{print $2}' | tr -d ' ')
        diskUpgStrategy=$(echo ${line} | awk -F'\\|\\|' '{print $17}' | awk -F':' '{print $2}' | tr -d ' ')
        sedType=$(echo ${line} | awk -F'\\|\\|' '{print $18}' | awk -F':' '{print $2}' | tr -d ' ')
        autoLockState=$(echo ${line} | awk -F'\\|\\|' '{print $19}' | awk -F':' '{print $2}' | tr -d ' ')
        if [ "${runningStatus}" != "NOT_EXIST" ];then
            Result="ID:$ID||NodeID:$parentID||Node:$parentIP||slot:$slot||healthStatus:$healthStatus||runningStatus:$runningStatus||diskType:$diskType||bandwidth:$bandwidth||speed:$speed||Temperature(degrees):$Temperature||model:$model||version:$version||manu:$manu||SN:$SN||size(bytes):$size||runTime(days):$runTime||diskNeedUpg:${diskNeedUpg}||diskUpgStrategy:${diskUpgStrategy}||sedType:${sedType}||autoLockState:${autoLockState}"
            echo "${Result}" >> ${RESULTFILE} 2>&1

            if [ "${runningStatus}" != "ONLINE" ] || [ "${healthStatus}" != "NORMAL" ];then
            LOG "[$LINENO]:Error, ${Result}"
                isPass=1
                echo "[ERR]Node:${LOCAL_BACK_IP}||INFO:ID($ID) HealthStatus($healthStatus) is not NORMAL or runningStatus($runningStatus) is not ONLINE." >> ${RESULTFILE} 2>&1
            fi

            #加密盘场景的autolock必须为开
            if [ ${sedType} == 1 ] && [ ${isDiskEncrypt} == 1 ] && [ ${autoLockState} != 1 ];then
                LOG "[$LINENO]:Error, ${Result}"
                isPass=1
                echo "[ERR]Node:${LOCAL_BACK_IP}||INFO:ID($ID) DiskEncrypt Autolock state(${autoLockState}) must be enabled(1)." >> ${RESULTFILE} 2>&1
            fi
        fi
    done

    IFS=$IFS_OLD

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

    return 0
}

main
