#!/bin/sh
#
#
#*************************************************

#Copyright (c) KylinSoft Co., Ltd. [2021-2025]. All rights reserved.
#File name: InforSuite
#Author: XuXiaojuan
#Version: 1
#Description: Manages InforSuite middleware as Linux-HA resource 
#Date: 2020.8.31
#Others: 
#Function List: 
#1.InforSuite_status(): report whether the middleware queue manager is running
#2.InforSuite_monitor():report whether middleware queue manager seems to be working
#3.InforSuite_start():start the middleware
#4.InforSuite_stop():stop the middleware

#History: 
#1. Date: 2020.8.31 Author: XuXiaojuan Modification:add InforSuite ocf script

#*************************************************
 
#######################################################################
# Initialization:

#. /opt/NeoShineHA/lib/ocf/resource.d/heartbeat/.ocf-shellfuncs
#. /usr/lib/ocf/resource.d/heartbeat/.ocf-shellfuncs
#. ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs

# Initialization:
#OCF_ROOT=/usr/lib/ocf
: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
#######################################################################

usage() {
  cat <<UEND
	usage: $0 (start|stop|validate-all|meta-data|monitor)
UEND
}

meta_data() {
	cat <<END
<?xml version="1.0"?>
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
<resource-agent name="InforSuite">
<version>1.0</version>

<longdesc lang="en">
Resource script for InforSuite. 
It manages InforSuite as an HA resource.
</longdesc>
<shortdesc lang="en">InforSuite resource agent</shortdesc>

<parameters>

<parameter name="InforSuite_HOME" unique="1" required="1">
<longdesc lang="en">
Directory containing InforSuite
</longdesc>
<shortdesc lang="en">InforSuite installdir</shortdesc>
<content type="string" default="/root/CVICSE/InforSuite" />
</parameter>

<parameter name="port" unique="1" required="1">
<longdesc lang="en">
The InforSuite Port.
</longdesc>
<shortdesc lang="en">The InforSuite Port</shortdesc>
<content type="string" default="8060" />
</parameter>

<parameter name="sleeptime" unique="1" required="1">
<longdesc lang="en">
The time star process need to sleep,maybe need change
</longdesc>
<shortdesc lang="en">The time star process need to sleep,maybe need change</shortdesc>
<content type="string" default="15" />
</parameter>
</parameters>

<actions>
<action name="start" timeout="120" />
<action name="stop" timeout="120" />
<action name="status" timeout="60" />
<action name="monitor" depth="0" timeout="30" interval="10" start-delay="10" />
<action name="validate-all" timeout="5" />
<action name="meta-data" timeout="5" />
</actions>
</resource-agent>
END
}
#OCF_RESKEY_InforSuite_HOME=/opt/CVICSE/InforSuite
#OCF_RESKEY_sleeptime=15
#OCF_RESKEY_port=8060
InforSuite_validate() {
# checking the parameters
    if [ ! -d $OCF_RESKEY_InforSuite_HOME ]; then
	ocf_log err "$OCF_RESKEY_InforSuite_HOME dosen't exist";
	exit $OCF_ERR_ARGS;
    fi
}

InforSuite_status() {
	pid_num_InforSuite=`ps -ef|grep java|grep -ic InforSuite`

	if [ $pid_num_InforSuite -ge 1 ]; then
                #host_name=`hostname`
                #wget -O- -q -L http://$host_name:$OCF_RESKEY_port | tr '\012' ' ' | grep -Ei "html" >/dev/null 2>&1
                #if [ $? -eq 0 ];then         
                   ocf_log debug "InforSuite is running"
		   return $OCF_SUCCESS
                #else 
                #   ocf_log debug "InforSuite is error"
                #   return $OCF_ERR_GENERIC
                #fi
	else	
            ocf_log debug "InforSuite server not running"
            return $OCF_NOT_RUNNING
	fi
}

InforSuite_monitor() {
    InforSuite_status
    rc=$?
    if [ ! $rc -eq 0 ]; then
        ocf_log err "InforSuite not running"
        return $OCF_NOT_RUNNING
    elif [ -f $OCF_RESKEY_InforSuite_HOME/as/bin/startserv -a -f $OCF_RESKEY_InforSuite_HOME/as/bin/stopserv ]; then
        ocf_log info "InforSuite monitor succeeded"
        return $OCF_SUCCESS
    else
        ocf_log err "InforSuite monitor failed"
        return $OCF_ERR_GENERIC
    fi
}

InforSuite_start() {
    InforSuite_status
    if [ $? -eq 0 ]; then
	ocf_log info "InforSuite already running"
	return $OCF_SUCCESS
    else
        sh $OCF_RESKEY_InforSuite_HOME/as/bin/startserv >/dev/null 2>&1  &
        ret=$?
        sleep $OCF_RESKEY_sleeptime
    if [ $ret -eq 0 ]; then
        InforSuite_status
       if [ $? -eq 0 ]; then
          ocf_log debug "InforSuite start ok"
          return $OCF_SUCCESS
       else
          ocf_log debug "InforSuite start failed"
          return $OCF_ERR_GENERIC
       fi
    else
      ocf_log debug "InforSuite start failed"
      return  $OCF_ERR_GENERIC
    fi
 
    fi	
}

InforSuite_stop() {
   InforSuite_status
   if [ $? -eq 7 ];then
        ocf_log debug "InforSuite already stopped"
        return $OCF_SUCCESS
   else
        pid=`ps -ef|grep java|grep -i InforSuite|awk '{print $2}'`
        for pid_kill in $pid
          do
             kill -9 $pid_kill
          done
   fi
   InforSuite_status
   if [ $? -eq 7 ]; then
        ocf_log debug "InforSuite stop ok"
        return $OCF_SUCCESS
   else
        ocf_log debug "InforSuite stop failed"
        return $OCF_ERR_GENERIC
   fi
}

# What kind of method was invoked?
case "$1" in
  start)        InforSuite_validate; 
		InforSuite_start;;
  stop)		InforSuite_stop;;
  status)	InforSuite_status;;
  monitor)	InforSuite_monitor;;

  meta-data)	meta_data; exit $OCF_SUCCESS;;
  validate-all)	InforSuite_validate; exit $OCF_SUCCESS;;

 *)		usage
		exit $OCF_ERR_UNIMPLEMENTED;;
esac
exit $?
