#!/bin/bash
set +x

. /opt/node_type_recognize.sh
vcpu_num=$( lscpu |grep -v -e "On-line" -e "NUMA" |grep "CPU(s)"|awk '{print $2}' ) > /dev/null
#暂时没用,解耦的时候有用
phycpu_num=$( lscpu | grep 'Socket(s):'|awk '{print $2}' )
HAVE_CORE=0
LOG_FILE="/var/log/inspect.log"
GetArcType
cpu_type=$?
X86_type=1
ARM_type=2
IsTS5280Node
ists5280=$?

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

upgradelog=$( grep mvx /var/log/upgrade.log )
if [ $? -eq 0 ];then
    coreRpcArr=$( grep rpc= /opt/huawei/deploy/etc/deploy.ini | awk -F '=' '{print $2}' | sed "s/,/ /g" )
    coreIsolcpus=$( cat /proc/cmdline | awk -F 'isolcpus=' '{print $2}' )

    passInfo="pass!"
    for cr in ${coreRpcArr[@]}
    do
        echo "${coreIsolcpus}" | grep -wq "$cr"
        if [ $? -ne 0 ];then
            passInfo="${cr} not exists!"
            break
        fi
    done
    if [ "${passInfo}" == "pass!" ];then
        echo "pass!"
        exit
    fi
fi

if [ $cpu_type -eq $X86_type ];then
    # 2*2403, 或 1*atom,
    if [ $vcpu_num -eq 8  ];then
        if [ $phycpu_num -eq 1  ];then
            #维持原有的C72,单atom 不变
            CORE_NAME=$( cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2}' )
            for i in 5 6
            do
                for j in $CORE_NAME
                do
                    if [ $i == $j ]
                    then
                        HAVE_CORE=1
                        break
                    fi
                done

                if [ $HAVE_CORE == 0 ]
                then
                    echo "failed!"
                    exit
                fi

                HAVE_CORE=0
            done
            NOT_RPC_THREAD=$( ps -eFl |awk '{if ($13==5||$13==6) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat" )
        else
            #M节点,双2403
            CORE_NAME=$( cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2}' )
            for i in 4 5
            do
                for j in $CORE_NAME
                do
                    if [ $i == $j ]
                    then
                        HAVE_CORE=1
                        break
                    fi
                done

                if [ $HAVE_CORE == 0 ]
                then
                    echo "failed!"
                    exit
                fi

                HAVE_CORE=0
            done
            NOT_RPC_THREAD=$( ps -eFl |awk '{if ($13==4||$13==5) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat" )
        fi
    # 2*2603, 暂不支持单2420
    elif [ $vcpu_num -eq 12  ];then
        if [ $phycpu_num -eq 1  ];then
            CORE_NAME=$( cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2}' )
            for i in 4 5
            do
                for j in $CORE_NAME
                do
                    if [ $i == $j ]
                    then
                        HAVE_CORE=1
                        break
                    fi
                done

                if [ $HAVE_CORE == 0 ]
                then
                    echo "failed!"
                    exit
                fi

                HAVE_CORE=0
            done
            NOT_RPC_THREAD=$( ps -eFl |awk '{if ($13==4||$13==5) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat" )
        else
            CORE_NAME=$( cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2}' )
            for i in 6 7
            do
                for j in $CORE_NAME
                do
                    if [ $i == $j ]
                    then
                        HAVE_CORE=1
                        break
                    fi
                done

                if [ $HAVE_CORE == 0 ]
                then
                    echo "failed!"
                    exit
                fi

                HAVE_CORE=0
            done
            NOT_RPC_THREAD=$( ps -eFl |awk '{if ($13==6||$13==7) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat" )
        fi
    # 目前只有:单*2620V4,
    elif [ $vcpu_num -eq 16  ];then
        CORE_NAME=$( cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2}' )
        for i in 4 5
        do
            for j in $CORE_NAME
            do
                if [ $i == $j ]
                then
                    HAVE_CORE=1
                    break
                fi
            done

            if [ $HAVE_CORE == 0 ]
            then
                echo "failed!"
                exit
            fi

            HAVE_CORE=0
        done
        NOT_RPC_THREAD=$( ps -eFl |awk '{if ($13==4||$13==5) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat" )
    # 2*2420 或   2*2620-V3
    elif [ $vcpu_num  -eq  24 ];then
        CORE_NAME=$( cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2 " " $3 " " $4}' )
        for i in 6 7 8 9
        do
            for j in $CORE_NAME
            do
                if [ $i == $j ]
                then
                    HAVE_CORE=1
                    break
                fi
            done

            if [ $HAVE_CORE == 0 ]
            then
                echo "failed!"
                exit
            fi

            HAVE_CORE=0
        done
        NOT_RPC_THREAD=$( ps -eFl |awk '{if ($13==7||$13==8||$13==9||$13==6) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat" )
    # 32个vCPU, 2*2620-V4
    elif [ $vcpu_num  -eq 32 ];then
        CORE_NAME=$( cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2 " " $3 " " $4}' )
        for i in 8 9 10 11
        do
            for j in $CORE_NAME
            do
                if [ $i == $j ]
                then
                    HAVE_CORE=1
                    break
                fi
            done

            if [ $HAVE_CORE == 0 ]
            then
                echo "failed!"
                exit
            fi

            HAVE_CORE=0
        done
        NOT_RPC_THREAD=$( ps -eFl |awk '{if ($13==11||$13==8||$13==9||$13==10) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat" )
    #40个vCPU，2*4114
    elif [ $vcpu_num  -eq 40 ];then
        CORE_NAME=$( cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2 " " $3 " " $4}' )
        for i in 10 11 12 13
        do
            for j in $CORE_NAME
            do
                if [ $i == $j ]
                then
                    HAVE_CORE=1
                    break
                fi
            done

            if [ $HAVE_CORE == 0 ]
            then
                echo "failed!"
                exit
            fi

            HAVE_CORE=0
        done
        NOT_RPC_THREAD=$( ps -eFl |awk '{if ($13==11||$13==12||$13==13||$13==10) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat" )
    #48个vCPU，2*4214
    elif [ $vcpu_num  -eq 48 ];then
        CORE_NAME=$( cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2 " " $3 " " $4}' )
        for i in 12 13 14 15
        do
            for j in $CORE_NAME
            do
                if [ $i == $j ]
                then
                    HAVE_CORE=1
                    break
                fi
            done

            if [ $HAVE_CORE == 0 ]
            then
                echo "failed!"
                exit
            fi

            HAVE_CORE=0
        done
        NOT_RPC_THREAD=$( ps -eFl |awk '{if ($13==12||$13==13||$13==14||$13==15) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat" )    
    # 5120T，14核
    elif [ $vcpu_num  -eq 56 ];then
        CORE_NAME=$( cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2 " " $3 " " $4 " " $5 " " $6}' )
        for i in 14 15 16 17 18 19
        do
            for j in $CORE_NAME
            do
                if [ $i == $j ]
                then
                    HAVE_CORE=1
                    break
                fi
            done

            if [ $HAVE_CORE == 0 ]
            then
                echo "failed!"
                exit
            fi

            HAVE_CORE=0
        done
        NOT_RPC_THREAD=$( ps -eFl |awk '{if ($13==15||$13==16||$13==17||$13==18||$13==19||$13==14) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat" )
    elif [ $vcpu_num  -eq 80 ];then
        CORE_NAME=$( cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2 " " $3 " " $4 " " $5 " " $6}' )
        for i in 20 21 22 23 24 25
        do
            for j in $CORE_NAME
            do
                if [ $i == $j ]
                then
                    HAVE_CORE=1
                    break
                fi
            done

            if [ $HAVE_CORE == 0 ]
            then
                echo "failed!"
                exit
            fi

            HAVE_CORE=0
        done
        NOT_RPC_THREAD=$( ps -eFl |awk '{if ($13==20||$13==21||$13==22||$13==23||$13==24||$13==25) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat" )    
    elif [ $vcpu_num  -eq 96 ];then
        CORE_NAME=$( cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2 " " $3 " " $4 " " $5 " " $6}' )
        for i in 24 25 26 27 28 29
        do
            for j in $CORE_NAME
            do
                if [ $i == $j ]
                then
                    HAVE_CORE=1
                    break
                fi
            done

            if [ $HAVE_CORE == 0 ]
            then
                echo "failed!"
                exit
            fi

            HAVE_CORE=0
        done
        NOT_RPC_THREAD=$( ps -eFl |awk '{if ($13==24||$13==25||$13==26||$13==27||$13==28||$13==29) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat" )    

    else
        #未经验证的不支持分支,
        CORE_NAME=$( cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2 " " $3 " " $4}' )
        for i in 6 7 8 9
        do
            for j in $CORE_NAME
            do
                if [ $i == $j ]
                then
                    HAVE_CORE=1
                    break
                fi
            done

            if [ $HAVE_CORE == 0 ]
            then
                echo "failed!"
                exit
            fi

            HAVE_CORE=0
        done
        NOT_RPC_THREAD=$( ps -eFl |awk '{if ($13==7||$13==8||$13==9||$13==6) {print}}'|egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat" )
    fi

elif [ $cpu_type -eq $ARM_type ];then
    CORE_NAME=$( cat /proc/cmdline |awk -F 'isolcpus=' '{print $2}' |awk '{print $1}' |awk -F ',' '{print $1 " " $2 " " $3 " " $4 " " $5 " " $6 " " $7 " " $8}' )
    if [ $ists5280 -eq 0 ];then
        if [ "${vcpu_num}" -eq 64 ];then
            isolcpus="26 27 28 29 30 31"
        else
            isolcpus="40 41 42 43 44 45 46 47"
        fi
    else
        isolcpus="64 65 66 67 68 69 70 71"
    fi
    for i in ${isolcpus[*]}
    do
        for j in $CORE_NAME
        do
            if [ $i == $j ]
            then
                HAVE_CORE=1
                break
            fi
        done

        if [ $HAVE_CORE == 0 ]
        then
            echo "failed!"
            exit
        fi

        HAVE_CORE=0
    done
    NOT_RPC_THREAD=$( ps -eFl |awk '{if ($13==$isolcpus[0]||$13==$isolcpus[1]||$13==$isolcpus[2]||$13==$isolcpus[3]||$13==$isolcpus[4]||
    $13==$isolcpus[5]||$13==$isolcpus[6]||$13==$isolcpus[7]) {print}}'| egrep -v  "swapper|kthreadd|migration|kworker|ksoftirqd|watchdog|cpuset|khelper|kdevtmpfs|netns|sync_supers|bdi-default|kintegrityd|kblockd|md|khungtaskd|kswapd1|limit_shrinkwor|ksmd|khugepaged|fsnotify_mark|crypto|kthrotld|kpsmoused|deferwq|kmpath_rdacd|vdl_moni_thread|khubd|scsi_eh_0|fw_event0|mpt2bdm_event1|poll_0_status|kjournald|ata_sff|kflush-8|kauditd|kiblnd_|socknal_|SendRpcd_|Rpcd_|SendRpcdRecov|RpcdRecov|AsyncBulk_|RPCLocalProcess|vmstat|kcompactd2|kswapd2|cpuhp" )
fi

if [ -z "$NOT_RPC_THREAD" ]
then
    echo "pass!"
else
    echo "$NOT_RPC_THREAD"
fi






