#!/bin/bash

# ********************************************** ***************************** #
# File Name: appctl
# Description: Provide Basic Interfaces For Component-Upgrade
# Input:
# Output:
# Author:
# Created: 2018-12-11
# Function List:
# **************************************************************************** #

# **********************************Global Vars******************************* #
CMPT_NAME="CMPT_OMM_INFRA"
PKG_DIR=`dirname $0`/..
REPO_DIR=$PKG_DIR/repo
CMPT_DIR=/OSM/component/omm_infra
OM_MAJOR_FILE="extend.ini passwd shadow group passwd.bak shadow.bak group.bak sudoers sshd_port.conf sha256sum_ps sha256sum_ps_bak license.dat license.dat.bak"
SECURE_PATH="Defaults secure_path = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/OSM/script:/OSM/bin:/OSM/bin/script:/OSM/script"
OAM_USER_GID=64200

if [ "$NODE_TYPE" == "DATA_NODE"  ];then
	PROCESS=("/OSM/component/omm_infra/bin/osd_msg_server")
else
	PROCESS=("/OSM/component/omm_infra/bin/msg_server")
fi
# **********************************Private Function************************** #
function DeleteRedundentFiles()
{
	OS_echo "[$CMPT_NAME] Begin to delete redundent files."

	if [ "$NODE_TYPE" == "DATA_NODE"  ];then
		rm /OSM/component/omm_infra/bin/msg_server  /OSM/bin/msg_server         &>/dev/null
		mv /OSM/conf/maintain_cmds_nof.json /OSM/conf/maintain_cmds.json -f &>/dev/null
	else
		rm /OSM/component/omm_infra/bin/osd_msg_server  /OSM/bin/osd_msg_server    &>/dev/null
		rm /OSM/conf/maintain_cmds_nof.json &>/dev/null
	fi

	OS_echo "[$CMPT_NAME] Finish delete redundent files."
}

function CombineFiles()
{
	OS_echo "[$CMPT_NAME] Begin to combine files."

	if [ "$NODE_TYPE" == "DATA_NODE"  ];then
		mv /usr/local/etc/serial_port_mode_cmd_list_nof /usr/local/etc/serial_port_mode_cmd_list    &>/dev/null
	else
		rm /usr/local/etc/serial_port_mode_cmd_list_nof    &>/dev/null
	fi

	OS_echo "[$CMPT_NAME] Finish combine files."
}
# **********************************Public Function*************************** #

# show help info
function ShowHelp()
{
	echo "Usage:"
	echo "	appctl [options]"
	echo ""
	echo "Options:"
	echo "	showhelp"
	echo "	install"
	echo "	uninstall"
	echo "	start"
	echo "	stop"
	echo "	check_status"
	echo "	online"
	echo "	offline"
	echo "	pre_upgrade"
	echo "	upgrade"
	echo "	check_upgrade"
	echo "	pre_rollbak"
	echo "	rollback"

	return 0
}

function isNonRoot()
{
	[ -f /OSM/conf/unroot_flag ] && return 1 || return 0
}

function PrepareWhiteListForExportLog()
{
    eulerOsVersionStr=`uname -a|grep -Eo "eulerosv2r+[0-9]+"`
    eulerOsVersionNum=${eulerOsVersionStr##*r}
    # 欧拉版本9及以下，不需要这个白名单文件，但Service已发布补丁会改该文件，生成一个文件保证补丁成功
    if [[ -n "${eulerOsVersionNum}" && $eulerOsVersionNum -le 9 ]]; then
        mv -f /opt/esyslog_log_collect/global_var_v2r10.py /opt/esyslog_log_collect/global_var.py
        return 0
    fi
	eulerOsVersion=`uname -a|grep eulerosv2r10`
	if [ -n "${eulerOsVersion}" ];then
		mv -f /opt/esyslog_log_collect/global_var_v2r10.py /opt/esyslog_log_collect/global_var.py
		return 0
	fi
	eulerOsVersionr11=`uname -a|grep eulerosv2r11`
	eulerOsVersionr12=`uname -a|grep eulerosv2r12`
	if [ -n "${eulerOsVersionr11}" ] || [ -n "${eulerOsVersionr12}" ];then
		mv -f /opt/esyslog_log_collect/global_var_v2r11.py /opt/esyslog_log_collect/global_var.py
		return 0
	fi
	return 0
}

function LinkOpensslLib()
{
    dst_ver=$dst_num_version
    dst_lib_path='/usr/lib64/storage/'
    arch=`uname -r|grep x86_64`
    if [ -n "$arch" ];then
        OS_echo "[$CMPT_NAME] this is x86 env."
        return 0
    fi
    lib_list=("libssl.so" "libcrypto.so" "libssl.so.3" "libcrypto.so.3")
    cmpt_lib_path="/OSM/component/omm_infra/lib"  # 组件lib目录：例如基础设施是/OSM/component/infra/lib，各个模块根据自己的环境上的组件目录修改此处
    if [ -z "$dst_ver" ];then
        OS_echo "[$CMPT_NAME] dst_ver is empty."
        return 1
    fi

    for lib in ${lib_list[@]}
    do
        ln -sf $dst_lib_path/$dst_ver/$lib $cmpt_lib_path/$lib
        if [ $? -ne 0 ];then
            OS_echo "[$CMPT_NAME] create link $lib($dst_ver) failed."
            return 1
        fi
        if [ -f /OSM/conf/unroot_flag ]; then
            chown -h root:OceanStorOAMGroup $cmpt_lib_path/$lib
            if [ $? -ne 0 ];then
                OS_echo "[$CMPT_NAME] chown link $lib($dst_ver) failed."
                return 1
            fi
        fi
        OS_echo "[$CMPT_NAME] create link $lib($dst_ver) success."
    done
    return 0
}
function RepairOmCollectorLogScript()
{
    cmdResult=`cat /OSM/conf/om_config.ini |grep "AlmOneFingerScriptPath=/OSM/script/om_backup_info_ext.sh"`
    if [ $? -eq 0 ];then
        sed -i 's/AlmOneFingerScriptPath=\/OSM\/script\/om_backup_info_ext.sh/AlmOneFingerScriptPath=os_backup_info.sh/g' /OSM/conf/om_config.ini
        OS_echo "[$CMPT_NAME] repair script from om_backup_info_ext.sh to os_backup_info.sh $?"
    fi
    return 0
}
# install all RPMs in repo directory
function Install()
{
	OS_echo "[$CMPT_NAME] Install start."
	# intall rpms
	mkdir -p /var/lib/omm_infra_rpm
	for file in `ls $REPO_DIR/*.rpm`
	do
		rpm -ivh --nodeps --force --dbpath=/var/lib/omm_infra_rpm $file
		if [ $? -ne 0 ]; then
			OS_echo "[$CMPT_NAME] Install rpm($file) fail."
			return 1
		fi
	done
	RepairOmCollectorLogScript
	LinkOpensslLib
	if [ $? -ne 0 ];then
		return 1
	fi

	# 由于initrd中默认的/etc/sudoers和欧拉原始sudo包中的不一样，安装时会生成sudoers.rpmnew
	# Install里需要将其覆盖到 /etc/sudoers，而upgrade则不需要
	systemctl stop secAgent
	mv /etc/sudoers.rpmnew /etc/sudoers
	systemctl start secAgent
	# 滚动升级后，需要将盘上的也修改一下
	if [ "$NODE_TYPE" != "DATA_NODE"  ] && [ -f /startup_disk/conf/conf_local/sudoers ];then
		grep -qE "^#includedir /etc/sudoers.d$" /startup_disk/conf/conf_local/sudoers || ( OS_echo "[$CMPT_NAME] append #includedir /etc/sudoers.d to /startup_disk/conf/conf_local/sudoers." ; echo "#includedir /etc/sudoers.d" >> /startup_disk/conf/conf_local/sudoers )
		grep -qE "^Defaults secure_path" /startup_disk/conf/conf_local/sudoers || ( OS_echo "[$CMPT_NAME] append secure_path to /startup_disk/conf/conf_local/sudoers." ; echo $SECURE_PATH >> /startup_disk/conf/conf_local/sudoers )
		fsync /startup_disk/conf/conf_local/sudoers
	fi
	# prepare whitelist for euler export log
	PrepareWhiteListForExportLog
	# clean redundent files
	DeleteRedundentFiles
	CombineFiles
	# customize
	OS_echo "[$CMPT_NAME] Begin to customize pam."
	if [ ! -L /etc/pam.d/password-auth ];then
		rm /etc/pam.d/password-auth && ln -s /etc/pam.d/password-auth-local /etc/pam.d/password-auth
		if [ $? -ne 0 ]; then
			OS_echo "[$CMPT_NAME] Customize password-auth fail."
			return 1
		fi
	fi

	if [ ! -L /etc/pam.d/system-auth ];then
		rm /etc/pam.d/system-auth && ln -s /etc/pam.d/system-auth-local /etc/pam.d/system-auth
		if [ $? -ne 0 ]; then
			OS_echo "[$CMPT_NAME] Customize system-auth fail."
			return 1
		fi
	fi

	OS_echo "[$CMPT_NAME] customize om major file on startup_disk."
	for file in ${OM_MAJOR_FILE}
	do
		if [ -d /startup_disk/conf/conf_local/${file} ]; then
			OS_echo "[$CMPT_NAME] /startup_disk/conf/conf_local/${file} must be a file, but is a dir, need rm."
			rm -rf /startup_disk/conf/conf_local/${file}
		fi
	done

	OS_echo "[$CMPT_NAME] Begin to customize user."
	dos2unix /OSM/script/os_check_user_add.sh && dos2unix /etc/*Add && sh /OSM/script/om_configauth.sh && sh /OSM/script/om_coffer_config.sh -r
	if [ $? -ne 0 ]; then
		OS_echo "[$CMPT_NAME] Customize user fail."
		return 1
	fi

	isNonRoot
	if [ $? -eq 1 ];then
		OS_echo "[$CMPT_NAME] Begin do non root process."
		usermod -a -G exportdbgroup,exportcommgroup,exporteventloggroup,restoregroup,mgrgroup,UTOPUSERS,OceanStorCommonGroup,OceanStorPangeaGroup,OceanStorInfraGroup OceanStorOAMUser #加入 commit, sys, uptopuser组
		usermod -a -G OceanStorInfraGroup,OceanStorCommonGroup admin
		usermod -a -G OceanStorCommonGroup _super_admin
		usermod -a -G OceanStorInfraGroup,OceanStorCommonGroup OceanStorMgrUser

		chmod 400 /OSM/conf/om_config.ini
		chown -h root:$OAM_USER_GID /OSM/conf/om_config.ini
		ACL="m::r,u:ibc_os_hs:r,u:OceanStorOAMUser:r,u:OceanStorApp_dataUser:r"
		setfacl -m "${ACL}" /OSM/conf/om_config.ini

		OS_echo "[$CMPT_NAME] End do non root process."
	fi

	OS_echo "[$CMPT_NAME] Begin to cp manifest.yml."
	cp $PKG_DIR/manifest.yml $CMPT_DIR/
	chmod 640 $CMPT_DIR/manifest.yml
	OS_echo "[$CMPT_NAME] Install end."
	return 0
}

# uninstall all RPMs in repo directory
function Uninstall()
{
	OS_echo "[$CMPT_NAME] Uninstall start."
	for file in `ls $REPO_DIR/*.rpm`
	do
		RPM_PKG=${file##*/}
		rpm -e --nodeps --dbpath=/var/lib/omm_infra_rpm ${RPM_PKG%.*}
		if [ $? -ne 0 ]; then
			OS_echo "[$CMPT_NAME] Uninstall rpm($file) fail."
			return 1
		fi
	done
	OS_echo "[$CMPT_NAME] Uninstall end."
	return 0
}

# start component
function Start()
{
	OS_echo "[$CMPT_NAME] Start start."
  ln -s /OSM/component/omm/lib/libjsoncpp.so /OSM/component/omm/lib/libjsoncpp.so.25
	# choose product.ini
	OS_echo "[$CMPT_NAME] Begin to choose product.ini."
    if [ -d "/OSM/coffer_data/asan" ];then
    	if [[ "$(uname -r)" =~ "aarch64" ]];then
        	export LD_PRELOAD=/usr/local/lib64/asan/libasan.so:/usr/local/lib64/asan/libubsan.so
        	export ASAN_OPTIONS=halt_on_error=0:verbosity=0:use_sigaltstack=0:detect_leaks=0:check_initialization_order=1:strict_init_order=1:log_path=/OSM/coffer_data/asan/omm_infra_gen_product_ini.log
        	export UBSAN_OPTIONS=print_stacktrace=1:report_error_type=1:print_summary=1:log_path=/OSM/coffer_data/asan/omm_infra_gen_product_ini.log
        else
        	export LD_PRELOAD=/usr/local/lib64/asan/libasan.so
        	export ASAN_OPTIONS=halt_on_error=0:verbosity=0:use_sigaltstack=0:detect_leaks=0:log_path=/OSM/coffer_data/asan/omm_infra_gen_product_ini.log
        fi
    fi

	LD_LIBRARY_PATH=/OSM/component/omm_infra/lib python /OSM/component/omm_infra/script/gen_product_ini.py /OSM/component/omm_infra/conf/product_ini/omm/rule.ini &&
	LD_LIBRARY_PATH=/OSM/component/omm_infra/lib python /OSM/component/omm_infra/script/gen_product_ini.py /OSM/component/omm_infra/conf/product_ini/spec/rule.ini
	if [ $? -ne 0 ]; then
		OS_echo "[$CMPT_NAME] Failed to choose product.ini."
		return 1
	fi

    # upgrade to openssl 3.0, just delete old files of simu
    if [ -f "/OSM/component/omm_infra/lib/libcrypto.so.1.1" ];then
        OS_echo "[$CMPT_NAME] Remove file libcrypto.so.1.1."
        rm -rf /OSM/component/omm_infra/lib/libcrypto.so.1.1
    fi

	# msg_server start
	OS_echo "[$CMPT_NAME] Begin to start $PROCESS."

	ONLINE_FLAG=`ps -ef | grep -w "$PROCESS" | grep -v grep | awk '{print $2}'`
	if [ -n "$ONLINE_FLAG" ]; then
		# nothing to do if it's already start
		OS_echo "[$CMPT_NAME] $PROCESS is already online."
	else
		# failed if process file is not exist or start fail
		test -f $PROCESS && sh snm.sh -s /OSM/component/omm_infra/script/omm_snm.py -f /OSM/component/omm_infra/conf/snm_config/${PROCESS##*/}_snm_config.xml
		if [ $? -ne 0 ]; then
			OS_echo "[$CMPT_NAME] Failed to start $PROCESS."
			return 1
		fi
	fi
	return 0
}

# stop component
function Stop()
{
	OS_echo "[$CMPT_NAME] Stop start."

	# msg_server stop
	OS_echo "[$CMPT_NAME] Begin to stop $PROCESS."
	# nothing to do if it's already offline
	ONLINE_FLAG=`ps -ef | grep -w "$PROCESS" | grep -v grep | awk '{print $2}'`
	if [ -z "$ONLINE_FLAG" ]; then
		OS_echo "[$CMPT_NAME] $PROCESS is already offline."
	else
		sh snm.sh -t /OSM/component/omm_infra/script/omm_snm.py -f /OSM/component/omm_infra/conf/snm_config/${PROCESS##*/}_snm_config.xml
		if [ $? -ne 0 ]; then
			OS_echo "[$CMPT_NAME] Failed to stop $PROCESS."
			return 1
		fi
	fi

	OS_echo "[$CMPT_NAME] Check if processed offline."

	CheckOmmOffline
	if [ $? -ne 0 ]; then
		OS_echo "[$CMPT_NAME] check processed offline failed."
		return 1
	fi

	OS_echo "[$CMPT_NAME] Stop end."
	return 0
}

# check if the comonent is normal
function CheckStatus()
{
	OS_echo "[$CMPT_NAME] CheckStatus start."

	# check msg_server
	ONLINE_FLAG=`ps -ef | grep -w "$PROCESS" | grep -v grep | awk '{print $2}'`
	RETRY_TIMES=0
	while [ -z "$ONLINE_FLAG" -a $RETRY_TIMES -lt 30 ]
	do
		((RETRY_TIMES++))
		OS_echo "[$CMPT_NAME] check $PROCESS status failed, times($RETRY_TIMES)."
		sleep 1
		ONLINE_FLAG=`ps -ef | grep -w "$PROCESS" | grep -v grep | awk '{print $2}'`
	done

	if [ -z "$ONLINE_FLAG" ]; then
		OS_echo "[$CMPT_NAME] check $PROCESS status failed."
		return 1
	fi

	OS_echo "[$CMPT_NAME] check $PROCESS status success."

	OS_echo "[$CMPT_NAME] CheckStatus end."

	return 0
}

# component online, nothing to do
function Online()
{
	OS_echo "[$CMPT_NAME] Online start."
	OS_echo "[$CMPT_NAME] Online end."
	return 0
}

# component offline, nothing to do
function Offline()
{
	OS_echo "[$CMPT_NAME] Offline start."
	OS_echo "[$CMPT_NAME] Offline end."
	return 0
}

# component pre_upgrade, nothing to do
function PreUpgrade()
{
	OS_echo "[$CMPT_NAME] PreUpgrade start."
	grep -qE "^#includedir /etc/sudoers.d$" /etc/sudoers || ( OS_echo "[$CMPT_NAME] append #includedir /etc/sudoers.d to /etc/sudoers." ; echo "#includedir /etc/sudoers.d" >> /etc/sudoers )
	grep -qE "^Defaults secure_path" /etc/sudoers || ( OS_echo "[$CMPT_NAME] append secure_path to /etc/sudoers." ; echo $SECURE_PATH >> /etc/sudoers )
	OS_echo "[$CMPT_NAME] PreUpgrade end."
	return 0
}

function KillProcess()
{
	local proc_name=$1
	kill -9 `pidof $proc_name` >/dev/null
	return $?
}

function CheckOmmOffline()
{
	local IS_SOMEONE_ONLINE=1
	local RETRY_TIMES=0
	local MAX_RETRY_TIMES=30
	local FAIL_LIST

	OS_echo "[$CMPT_NAME] Begin to check $PROCESS offline."

	while [ $RETRY_TIMES -lt $MAX_RETRY_TIMES ]
	do
		IS_SOMEONE_ONLINE=0

		for process in $PROCESS
		do
			ONLINE_FLAG=`pidof $process`
			if [ -n "$ONLINE_FLAG" ]; then

				OS_echo "[$CMPT_NAME] RETRY_TIMES($RETRY_TIMES) check $process is online."
				IS_SOMEONE_ONLINE=1

				if [ $RETRY_TIMES -eq `expr $MAX_RETRY_TIMES - 1` ];then
				    FAIL_LIST="$FAIL_LIST $process"
				    continue
				fi

				break
			fi
		done

		if [ $IS_SOMEONE_ONLINE -eq 0 ]; then
			break;
		fi

		sleep 0.2
		((RETRY_TIMES++))
	done

	if [ $IS_SOMEONE_ONLINE -eq 1 ]; then
        for process in $FAIL_LIST
        do
            KillProcess $process
            if [ $? -ne 0 ]; then
                OS_echo "[$CMPT_NAME] Finish to check $PROCESS offline, some process is online."
                return 1
            fi
        done
	fi

	OS_echo "[$CMPT_NAME] Finish to check $PROCESS offline."
	return 0
}
# component upgrade
function Upgrade()
{
	OS_echo "[$CMPT_NAME] Upgrade start."

	OS_echo "[$CMPT_NAME] Begin to stop process."
	Stop
	if [ $? -ne 0 ]; then
		OS_echo "[$CMPT_NAME] Stop process fail."
		return 1
	fi

	grep -qE "^#includedir /etc/sudoers.d$" /etc/sudoers || ( OS_echo "[$CMPT_NAME] append #includedir /etc/sudoers.d to /etc/sudoers." ; echo "#includedir /etc/sudoers.d" >> /etc/sudoers )
	grep -qE "^Defaults secure_path" /etc/sudoers || ( OS_echo "[$CMPT_NAME] append secure_path to /etc/sudoers." ; echo $SECURE_PATH >> /etc/sudoers )
	if [ "$NODE_TYPE" != "DATA_NODE"  ] && [ -f /startup_disk/conf/conf_local/sudoers ];then
		grep -qE "^#includedir /etc/sudoers.d$" /startup_disk/conf/conf_local/sudoers || ( OS_echo "[$CMPT_NAME] append #includedir /etc/sudoers.d to /startup_disk/conf/conf_local/sudoers." ; echo "#includedir /etc/sudoers.d" >> /startup_disk/conf/conf_local/sudoers )
		grep -qE "^Defaults secure_path" /startup_disk/conf/conf_local/sudoers || ( OS_echo "[$CMPT_NAME] append secure_path to /startup_disk/conf/conf_local/sudoers." ; echo $SECURE_PATH >> /startup_disk/conf/conf_local/sudoers )
		fsync /startup_disk/conf/conf_local/sudoers
	fi

	# intall rpms
	mkdir -p /var/lib/omm_infra_rpm
	for file in `ls $REPO_DIR/*.rpm`
	do
		rpm -ivh --nodeps --force --dbpath=/var/lib/omm_infra_rpm $file &>/dev/null
		if [ $? -ne 0 ]; then
			OS_echo "[$CMPT_NAME] Install rpm($file) fail."
			return 1
		fi
	done
	RepairOmCollectorLogScript
	OS_echo "[$CMPT_NAME] Begin to cp manifest.yml."
	cp $PKG_DIR/manifest.yml $CMPT_DIR/
	chmod 640 $CMPT_DIR/manifest.yml

	LinkOpensslLib
	if [ $? -ne 0 ];then
		return 1
	fi

	# prepare whitelist for euler export log
	PrepareWhiteListForExportLog
	# clean redundent files
	DeleteRedundentFiles
	CombineFiles

	ln -s /OSM/component/omm_infra/lib/libjsoncpp.so /OSM/component/omm_infra/lib/libjsoncpp.so.25

	isNonRoot
	if [ $? -eq 1 ];then
		OS_echo "[$CMPT_NAME] Begin do non root process."
		chmod 400 /OSM/conf/om_config.ini
		chown -h root:$OAM_USER_GID /OSM/conf/om_config.ini
		ACL="m::r,u:ibc_os_hs:r,u:OceanStorOAMUser:r,u:OceanStorApp_dataUser:r"
		setfacl -m "${ACL}" /OSM/conf/om_config.ini
		OS_echo "[$CMPT_NAME] End do non root process."
	fi

	# start process
	Start
	if [ $? -ne 0 ]; then
		OS_echo "[$CMPT_NAME] Start process fail."
		return 1
	fi

	path_dm_script="/OSM/coffer_data/ISM/device-manager/script/before_start.py"
	if [ -f "${path_dm_script}" ]; then
		OS_echo "[$CMPT_NAME] device manager read product.ini."
    	python ${path_dm_script}
	fi

    # let app_data not clean nof shm
    touch /OSM/data/omm/app_data/nof_shm_init
    chmod 600 /OSM/data/omm/app_data/nof_shm_init &>/dev/null

    # In order to adapt to upgrade and downgrade, you need to retain the permission modification to the /tmp/om_tmp directory.
    chmod 750 /tmp/om_tmp &>/dev/null
    chmod 750 /OSM/data/omm/om_tmp &>/dev/null
	OS_echo "[$CMPT_NAME] Upgrade end."
	return 0
}

# check component upgrade type (0:not support;1:none upgrade;2:hot upgrade;3:cold upgrade, need reboot)
function CheckUpgrade()
{
	OS_echo "[$CMPT_NAME] CheckUpgrade start."

	OLD_VERSION=`cat $CMPT_DIR/manifest.yml | grep Version| awk '{print $2}'`
	NEW_VERSION=`cat $PKG_DIR/manifest.yml | grep Version| awk '{print $2}'`

	if [ "$OLD_VERSION" = "$NEW_VERSION" ]; then
		OS_echo "[$CMPT_NAME] CheckUpgrade---same version, no need to update."
		return 1
	fi

	OS_echo "[$CMPT_NAME] CheckUpgrade end."
	return 2
}

# nothing to do
function PreRollback()
{
	OS_echo "[$CMPT_NAME] PreRollback start."
	OS_echo "[$CMPT_NAME] PreRollback end."
	return 0
}

# same as upgrade
function RollBack()
{
	OS_echo "[$CMPT_NAME] RollBack start."
	Upgrade
	if [ $? -ne 0 ]; then
		OS_echo "[$CMPT_NAME] Failed to rollback."
		return 1
	fi
	OS_echo "[$CMPT_NAME] RollBack end."
	return 0
}

# 可能会中间操作被中断，中断后需要再次拉起secAgent
function signalCleanUp()
{
	systemctl start secAgent
}
# **********************************Private Function************************** #

# **********************************Main************************************** #

# Check Param
if [ $# -ne 1 ]; then
	ShowHelp
    exit -1
fi

trap "signalCleanUp" HUP INT QUIT TERM

# Route Opt
case "$1" in
	"showhelp")
		ShowHelp
		;;
	"install")
		Install
		;;
	"uninstall")
		Uninstall
		;;
	"start")
		Start
		;;
	"stop")
		Stop
		;;
	"check_status")
		CheckStatus
		;;
	"online")
		Online
		;;
	"offline")
		Offline
		;;
	"pre_upgrade")
		PreUpgrade
		;;
	"upgrade")
		Upgrade
		;;
	"check_upgrade")
		CheckUpgrade
		;;
	"pre_rollback")
		PreRollback
		;;
	"rollback")
		RollBack
		;;
	*)
		ShowHelp
		exit -1
		;;
esac

exit $?
