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

#Copyright (c) KylinSoft Co., Ltd. [2021-2025]. All rights reserved.
#File name: Apusic10
#Author: XuXiaojuan
#Version: 1
#Description: Manages Apusic middleware as Linux-HA resource 
#Date: 2021.8.24
#Others: For Apusic version 10
#Function List: 
#1.Apusic_status(): report whether the middleware queue manager is running
#2.Apusic_monitor():report whether middleware queue manager seems to be working
#3.Apusic_start():start the middleware
#4.Apusic_stop():stop the middleware

#History: 
#1. Date: 2021.8.24 Author: XuXiaojuan Modification:add Apusic10 ocf script

#*************************************************
 
#######################################################################
# 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)

	$0 manages a DM Database as an HA resource.

	The 'start' operation starts the database.
	The 'stop' operation stops the database.
	The 'status' operation reports whether the database is running
	The 'monitor' operation reports whether the database seems to be working
	The 'validate-all' operation reports whether the parameters are valid

UEND
}

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

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

<parameters>

<parameter name="APUSIC_HOME" unique="0" required="1">
<longdesc lang="en">
Directory containing apusic
</longdesc>
<shortdesc lang="en">Apusic installdir</shortdesc>
<content type="string" default="" />
</parameter>

<parameter name="APUSIC_domain_path" unique="0" required="1">
<longdesc lang="en">
Directory containing apusic domain path
</longdesc>
<shortdesc lang="en">Apusic domain path</shortdesc>
<content type="string" default="domains/mydomain" />
</parameter>

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

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

</parameters>

<actions>
<action name="start" timeout="300" />
<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
}

Apusic_validate() {
# checking the parameters
    if [ ! -d $OCF_RESKEY_APUSIC_HOME ]; then
	ocf_log err "$OCF_RESKEY_APUSIC_HOME dosen't exist";
	exit $OCF_ERR_ARGS;
    fi
}

Apusic_status() {
	pid_num_apusic=`ps ax | egrep -w $OCF_RESKEY_APUSIC_HOME | grep -v grep | grep -c $OCF_RESKEY_APUSIC_HOME`
	if [ $pid_num_apusic -ge 1 ]; then
	    return $OCF_SUCCESS
        else
	    ocf_log debug "Apusic server is not running in status"
            return $OCF_NOT_RUNNING
        fi
}

Apusic_monitor() {
    ocf_log err "in monitor"
    Apusic_status
    rc=$?
    if [ ! $rc -eq 0 ]; then
        pid=`ps -ef|grep -v grep|grep aas |awk '{print $2}'`
        for pid_kill in "$pid"
          do
             kill -9 $pid_kill
          done
        ocf_log err "Apusic server is not running in monitor"
        return $OCF_NOT_RUNNING
     elif [ -f $OCF_RESKEY_APUSIC_HOME/$OCF_RESKEY_APUSIC_domain_path/bin/startserv ]; then
        ocf_log info "Apusic monitor succeeded"
        return $OCF_SUCCESS
     else
        ocf_log err "Apusic monitor failed"
        return $OCF_ERR_GENERIC
     fi
}

Apusic_start() {
    ocf_log err "in start"
    Apusic_status
    if [ $? -eq 0 ]; then
	ocf_log info "Apusic server already running"
	return $OCF_SUCCESS
    else
        sh -x $OCF_RESKEY_APUSIC_HOME/$OCF_RESKEY_APUSIC_domain_path/bin/startserv &
        ret=$?
        sleep $OCF_RESKEY_sleeptime
    if [ $ret -eq 0 ]; then
        Apusic_status
       if [ $? -eq 0 ]; then
          ocf_log debug "Apusic server start ok"
          return $OCF_SUCCESS
       else
          ocf_log err "Apusic server start failed"
          return $OCF_ERR_GENERIC
       fi
    else
      ocf_log debug "Apusic server start failed"
      return  $OCF_ERR_GENERIC
    fi
 
    fi	
}

Apusic_stop() {
   Apusic_status
   if [ $? -eq 7 ];then
        ocf_log debug "Apusic server already stopped"
        return $OCF_SUCCESS
   else
        pid=`ps -ef|grep -v grep|grep apusic|awk '{print $2}'`
        for pid_kill in "$pid"
          do
             kill -9 $pid_kill
          done
	  sleep 3
   fi
   Apusic_status
   if [ $? -eq 7 ]; then
        ocf_log debug "Apusic server stop ok"
        return $OCF_SUCCESS
   else
        ocf_log debug "Apusic server stop failed"
        return $OCF_ERR_GENERIC
   fi
}


#export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-7.ky10.x86_64/jre"
# What kind of method was invoked?
case "$1" in
  start)        Apusic_validate; 
		Apusic_start;;
  stop)		Apusic_stop;;
  status)	Apusic_status;;
  monitor)	Apusic_monitor;;

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

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