#!/bin/bash

source /OSM/script/os_load_base.sh
GProcess=/OSM/bin/perf
FLAG=0

function restartProcess()
{
	if [ $FLAG -eq 1 ]; then 
		chmod 775 /OSM/bin/perf
		mv /OSM/bin/perf /OSM/bin/perf.tgz
		tar zxf /OSM/bin/perf.tgz -C /OSM/bin
		chmod 550 /OSM/bin/perf
		rm -f /OSM/bin/perf.tgz
	fi

    #判定该进程是否已经被加载，是否还在运行
    red=$(ps -ww -eo pid,cmd | grep $GProcess | grep -v grep | awk '{print $1}')
    OS_echo "OMM_PERF: oldPid: $red"
    if [ "$red" = "" ]; then
        #进程不在位，只有demon不在位的情况，同时如果不在位资源利用率也不会太高，此处不考虑，直接返回OK
        return 0
    else
        OS_echo "OMM_PERF: perf will be killed."
        kill -9 $red
        sleep 1
        red=$(ps -ww -eo pid,cmd | grep $GProcess | grep -v grep | awk '{print $1}')
        OS_echo "OMM_PERF: newPid: $red"
        if [ "$red" = "" ]; then
            return 1
        else
            return 0
        fi
    fi

    return 0
}

function PATCH_START()
{
    return 
}
function PATCH_END()
{
	FLAG=1
    restartProcess
    return
}
function PATCH_ROLLSTART()
{
    return
}
function PATCH_ROLLEND()
{
	red=$(file /OSM/bin/perf | awk '{print $2}')
	# 通过ELF格式区分二进制文件与压缩文件
	if [ "$red" = "ELF" ]; then
	FLAG=0
	OS_echo "OMM_PERF: perf FLAG 0."
	else
	FLAG=1
	OS_echo "OMM_PERF: perf FLAG 1."
	fi
	restartProcess
	return
}
#start：打补丁前需要执行的操作，脚本的执行时间点在替换文件前
#end：打补丁后需要执行的操作，脚本的执行时间点在替换文件后
#rollstart：回滚补丁时需要执行的操作，脚本的执行时间点在文件被恢复之前。
#rollend：回滚补丁时需要执行的操作，脚本的执行时间点在文件被恢复之后。
#PATCH_CLOSE_SWITCH:先读取性能统计开关的状态，将其值保存到switch中,并关闭性能统计开关
#PATCH_OPEN_SWITCH:如果用户之前是打开状态，将其开关打开
OS_echo "OMM_PERF: command is ($1)."
L_CMD=$1
case $L_CMD in
        "start") 
                PATCH_START
                ;;
        "end") 
                PATCH_END
                ;;
        "rollstart") 
                PATCH_ROLLSTART
                ;;
        "rollend") 
                PATCH_ROLLEND
                ;;
        *)
                OS_echo "unsupported option."
esac
exit 0

