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

#Copyright (c) KylinSoft Co., Ltd. [2021-2025]. All rights reserved.
#File name: Apusic9
#Author: XuXiaojuan
#Version: 1
#Description: Manages Apusic middleware as Linux-HA resource 
#Date: 2020.8.31
#Others: For Apusic version 9
#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: 2020.8.31 Author: XuXiaojuan Modification:add Apusic9 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="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
}

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 cax -o pid,command | egrep -w "startapusic" | grep -c startapusic`
        pid_apusic=`ps -o pid  -C startapusic|grep -v PID`
        if [ ! -z $pid_apusic ];then
            pid_num_java=`ps --ppid $pid_apusic|grep -c java`
	    if [ $pid_num_apusic -ge 1 -a $pid_num_java -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 "Apusic server is running"
		   return $OCF_SUCCESS
                else 
                   ocf_log debug "Apusic server is error"
                   return $OCF_ERR_GENERIC
                fi
	    else	
		ocf_log debug "Apusic server is not running"
		return $OCF_NOT_RUNNING
	    fi
        else
	    ocf_log debug "Apusic server is not running"
            return $OCF_NOT_RUNNING
        fi
}

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

Apusic_start() {
    Apusic_status
    if [ $? -eq 0 ]; then
	ocf_log info "Apusic server already running"
	return $OCF_SUCCESS
    else
        $OCF_RESKEY_APUSIC_HOME/$OCF_RESKEY_APUSIC_domain_path/bin/startapusic 1>/var/log/apusic_log 2>/var/log/apusic_errlog  &
        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 debug "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
   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
}

# 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 $?
