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

#Copyright (c) KylinSoft Co., Ltd. [2021-2025]. All rights reserved.
#File name: MogDB
#Author: ZouZhimin
#Version: 1
#Description: Manages MogDB  as Linux-HA resource 
#Date: 2024.4.10
#Others: For MogDB version: 3.0
#Function List: 
#1.MogDB_status(): report whether the database is running
#2.MogDB_monitor():report whether the database seems to be working
#3.MogDB_start():start the database
#4.MogDB_stop():stop the database

#History: 
#1. Date: 2024.4.10 Author: ZouZhimin Modification:add MogDB ocf script 

#*************************************************

#######################################################################
# Initialization:

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

# Initialization:
#OCF_ROOT=/usr/lib/ocf
: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
#######################################################################
#export PATH="/opt/MogDB4.5-see/bin:${PATH}"
#export LD_LIBRARY_PATH="/opt/MogDB4.5-see/bin:${LD_LIBRARY_PATH}"

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

	$0 manages a MogDB 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
}

OCF_RESKEY_MogDB_Home_default="/opt/mogdb/software/"
OCF_RESKEY_DB_Path_default="/opt/mogdb/data"
OCF_RESKEY_MogDB_User_name_default="omm"

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

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

<parameters>

<parameter name="MogDB_Home" unique="0" required="1">
<longdesc lang="en">
Directory containing mogdb binary path
</longdesc>
<shortdesc lang="en">MogDB installdir</shortdesc>
<content type="string" default="${OCF_RESKEY_MogDB_Home_default}" />
</parameter>

<parameter name="DB_Path" unique="0" required="1">
<longdesc lang="en">
MogDB database storage area
</longdesc>
<shortdesc lang="en">MogDB data path</shortdesc>
<content type="string" default="${OCF_RESKEY_DB_Path_default}" />
</parameter>

<parameter name="MogDB_User_name" unique="0" required="1">
<longdesc lang="en">
MogDB database user name
</longdesc>
<shortdesc lang="en">MogDB data path</shortdesc>
<content type="string" default="${OCF_RESKEY_MogDB_User_name_default}" />
</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
}

MogDB_validate() {
# checking the parameters
    if [ ! -d $OCF_RESKEY_MogDB_Home ]; then
	ocf_log err "Datadir $OCF_RESKEY_MogDB_Home dosen't exist";
	exit $OCF_ERR_GENERIC;
    fi
}

MogDB_status() {	
    pid_num_MogDB=`ps -ef | grep $OCF_RESKEY_MogDB_Home | grep -v grep | wc -l`
    if [ $pid_num_MogDB -ge 1 ]; then
        ocf_log info "MogDB server is running"
        return $OCF_SUCCESS
    else 
        ocf_log info "MogDB server is not runnning"
        return $OCF_NOT_RUNNING
    fi
}
MogDB_monitor() {
    MogDB_status
    rc=$?
    if [ ! $rc -eq 0 ]; then
        ocf_log info "MogDB server not running"
        return $OCF_NOT_RUNNING
    else
        return $OCF_SUCCESS
    fi
}

MogDB_start() {
    MogDB_status
    if [ $? -eq 0 ]; then
	ocf_log info "MogDB server already running"
	return $OCF_SUCCESS
    else
        su - $OCF_RESKEY_MogDB_User_name -c "$OCF_RESKEY_MogDB_Home/bin/gs_ctl start -D $OCF_RESKEY_DB_Path"
        ret=$?
        sleep 3
	pid_num_MogDB=`ps ax | egrep -w $OCF_RESKEY_MogDB_Home | grep -v grep | grep -c $OCF_RESKEY_MogDB_Home`
        
	MogDB_status
        if [ $ret -eq 0 -a $pid_num_MogDB -ge 1 ]; then
            ocf_log info "MogDB server start ok"
            return $OCF_SUCCESS
        else
            ocf_log err "MogDB server start failed"
            return $OCF_ERR_GENERIC
        fi
    fi
}

MogDB_stop() {
    MogDB_status
    if [ $? -eq 7 ];then
        ocf_log info "MogDB server already stopped"
        return $OCF_SUCCESS
    else
        su - $OCF_RESKEY_MogDB_User_name -c "$OCF_RESKEY_MogDB_Home/bin/gs_ctl stop -D $OCF_RESKEY_DB_Path"
        ret=$?
    fi
    MogDB_status
    if [ $? -eq 7 ]; then
        ocf_log info "MogDB server stop ok"
        return $OCF_SUCCESS
    else
        ocf_log err "MogDB server stop failed"
        return $OCF_ERR_GENERIC
    fi
}

# What kind of method was invoked?
case "$1" in
    start)     MogDB_start;;
    stop)     MogDB_stop;;
    status)    MogDB_status;;
    monitor)  MogDB_monitor;;

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

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