#!/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}
}

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"`
# 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"`

    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






