#!/bin/bash
set +x

#0: debug off 1 debug on 
DBG_SWITCH=0
CurInspectNum="101"
LOG_FILE="/var/log/inspect.log"
G_INSPECT_MMLPATH="/opt/huawei/snas/script/inspect_mml"
source $G_INSPECT_MMLPATH/CheckItems
CurInspectFun="$(GetInspectType $CurInspectNum)"
RESULTFILE="/tmp/tmpResult${CurInspectFun}"
>${RESULTFILE}

function DBG()                                                                                        
{  
    if [ $DBG_SWITCH -ne 0 ];then                                                                     
    echo `date "+%Y-%m-%d %H:%M:%S"` $*                                                            
    fi
}              

get_sys_cpu()
{
    cpu_usage=`top -b -n 2|grep -w Cpu|tail -n 1`
    #redhat的top命令输出显示格式变动
    userUsage=`echo $cpu_usage |awk -F':' '{print $2}'| awk -F',' '{print $1}'| sed 's/^[ \t]*//' | grep -o "^[0-9.]*"`
    sysUsage=`echo $cpu_usage |awk -F',' '{print $2}' | sed 's/^[ \t]*//' | grep -o "^[0-9.]*"`
    idleUsage=`echo $cpu_usage |awk -F',' '{print $4}' | sed 's/^[ \t]*//'| grep -o "^[0-9.]*"`
    
    Percentage=$(echo "100-$idleUsage" |bc -l)
    #add for check task which hold CPU  100% as long as 1 min
    get_task_crazy 
    #end
    echo "CPU_Usage: $userUsage $sysUsage $Percentage" >>${RESULTFILE} 2>&1
    local crazytasks=0
    crazytasks=$(cat /tmp/tmpfileShowCpuTopResult)
    echo "CPU_CrazyTask:${crazytasks}" >>${RESULTFILE} 2>&1
}

get_top_5()
{
    grep -A 5 'PID USER'  /tmp/tmpfileShowCpuTop.log | head -n 6 >>${RESULTFILE} 2>&1
}
#add for check task which hold CPU  100% as long as 1 min
get_task_crazy()
{
    local preTask=0 
    local curTask=0
    local keepFlag=0
    local loop=0
    local arr_crazyTask=()
    local crazyTask=() 
    local crazyTaskNum=0
    local i=0
    local j=0
    local count=1

    #check for 60s sleep 10s every time
    top -H -b -n 6 -d 10 > /tmp/tmpfileShowCpuTop.log
    grep -A 10 'PID USER' /tmp/tmpfileShowCpuTop.log | awk '/[0-9]+/ {print $1,$9;}' > /tmp/tmpfileShowCpuTop1.log
    while read topTask cpuPer; 
    do
        curTask=$topTask
        DBG "$curTask $cpuPer"
        #check CPU
        if [ $(echo "$cpuPer >= 99"|bc) -eq 1 ];then
            arr_crazyTask[crazyTaskNum]=$topTask
            crazyTaskNum=$(( $crazyTaskNum + 1 ))
        fi
    done < /tmp/tmpfileShowCpuTop1.log
    
    if [ $crazyTaskNum -lt 6 ];then
        echo "0" > /tmp/tmpfileShowCpuTopResult
        return 0
    fi
    
    loop=0
    for((i=0;i<$crazyTaskNum;i++))
    do 
        for((j=$i + 1;j<$crazyTaskNum;j++))
        do
            if [ ${arr_crazyTask[i]} == ${arr_crazyTask[j]} ];then
                count=$(( $count + 1 ))
            fi   
        done
        
        if [ $count -eq 6 ];then
           crazyTask[loop]=${arr_crazyTask[i]}
           loop=$(( $loop + 1))
        fi
        
        count=1
    done
    
    if [ ${#crazyTask[@]} -eq 0 ] ;then
        echo "0" > /tmp/tmpfileShowCpuTopResult
    else
        echo "${crazyTask[*]}" > /tmp/tmpfileShowCpuTopResult
    fi
}

get_sys_cpu
get_top_5
[ -f "/tmp/tmpfileShowCpuTop.log" ] &&  rm -f "/tmp/tmpfileShowCpuTop.log"
[ -f "/tmp/tmpfileShowCpuTop1.log" ] && rm -f "/tmp/tmpfileShowCpuTop1.log"
[ -f "/tmp/tmpfileShowCpuTopResult" ] && rm -f "/tmp/tmpfileShowCpuTopResult"
