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

DISKTYPEFILE="/tmp/tmpfile_disk_typefile.tmp"
DISKTYPE_3_FILE="/tmp/tmpfile_disktype_3_file.tmp"
INVAILDNUMBER=4294967295

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

function GetDiskNameList()
{
    local tmpinfo=''
    local diskNum=`/usr/local/bin/disktool -s |grep sd- |wc -l`
    if [ $diskNum == 0 ]; then
        tmpinfo=`/usr/local/bin/disktool -f A |grep "System Device" | awk '{print $3}'`
    else
        tmpinfo=`/usr/local/bin/disktool -s | awk 'BEGIN{i=0}
        {
            if($1~/^\/dev\/sd-[0-9]+a$/)
            {
                #diskname: "/dev/sd-64a",get name of number "64"
                nameLen=length($1)
                sdLen=length("/dev/sd-")
                tmpname=substr($1,sdLen+1,nameLen-sdLen-1)
                if(tmpname >= 64)
                {
                    namelist[i]=$1
                    i++
                }
            }
        }
        END{
            namelistlen=length(namelist)
            for(i=0;i<namelistlen;i++){print namelist[i];}
        }'`
    fi
    echo ${tmpinfo}
}
function checkDiskModePage()
{
    NameList=()
    NameList=`GetDiskNameList`
    LOG "[$FUNCNAME][$LINENO] NameList =($NameList)"
    /usr/local/bin/MmlBatch 4016 "cm showdiskname" | grep "Disk_Type" |grep -v $INVAILDNUMBER | sed 's/.*\(Disk_Type:.*\)/\1/' > $DISKTYPEFILE
    dos2unix $DISKTYPEFILE > /dev/null 2>&1
    sed -i -e 's/\x1B\[0;[3-4][0-9]m//g' -e 's/\x0D//g' -e 's/\x00//g' $DISKTYPEFILE >/dev/null 2>&1
    LOG "[$LINENO] result=(`cat $DISKTYPEFILE`)"
    if [ ! -s $DISKTYPEFILE ];then
        isPass=1
        echo "[ERR]INFO:Failed to execute command(MmlBatch 4016 'cm showdiskname')."    >>${RESULTFILE}
        LOG "[$LINENO] exec command failed(/usr/local/bin/MmlBatch 4016 cm showdiskname)"
        return 1
    fi
    #ֻsas ssd Disk_Type:3
    cat $DISKTYPEFILE | grep -w "Disk_Type:3" > ${DISKTYPE_3_FILE}
    if [ ! -s $DISKTYPE_3_FILE ];then
        echo "Device:disk||BROADCAST ASYNCHRONOUS EVENT switch:NO SAS SSD" >>${RESULTFILE}
        return 0
    fi
    for item in ${NameList[*]};do
        grep "${item}" $DISKTYPE_3_FILE > /dev/null 2>&1
        if [ $? -ne 0 ];then
            LOG "[$FUNCNAME][$LINENO] skip kicked or fault disk($item)"
            continue
        fi
        curr_process=`sg_modes -p 0x19 -c 3 ${item} |tail -1 |awk '{print $4}'`; 
        flag=`echo $((0x$curr_process & 0x20))`
        if [ $flag -ne 0 ];then
            isPass=1
            echo "[ERR]Device:${item}||INFO: The BROADCAST ASYNCHRONOUS EVENT switch on the mode page is 1, should be 0" >>${RESULTFILE}
            LOG "[$FUNCNAME][$LINENO] Device:${item}: The BROADCAST ASYNCHRONOUS EVENT switch on the mode page is 1, should be 0"        
        fi
    done
    if [ $isPass -eq 0 ];then
        echo "Device:disk||BROADCAST ASYNCHRONOUS EVENT switch:0" >>${RESULTFILE}
    else
        echo "Device:disk||BROADCAST ASYNCHRONOUS EVENT switch:1" >>${RESULTFILE}
    fi    
}

checkDiskModePage
if [ -f $DISKTYPEFILE ];then
    rm -f $DISKTYPEFILE
    LOG "[$LINENO] delete tmp file"
fi
if [ -f $DISKTYPE_3_FILE ];then
    rm -f $DISKTYPE_3_FILE
fi
echo "${CurInspectFun}_Pass $isPass" >>${RESULTFILE}
exit 0

