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

#Copyright (c) KylinSoft Co., Ltd. [2021-2025]. All rights reserved.
#File name: MongoDB
#Author: ZouZhimin
#Version: 1
#Description: Manages Mongodb  as Linux-HA resource 
#Date: 2022.10.27
#Others: For Mongodb version: 5.1 && 6.0
#Function List: 
#1.Mongodb_status(): report whether the database is running
#2.Mongodb_monitor():report whether the database seems to be working
#3.Mongodb_start():start the database
#4.Mongodb_stop():stop the database

#History: 
#1. Date: 2022.10.27 Author: ZouZhimin Modification:add MongoDB 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 Mongodb 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_Mongodb_default="/usr/bin/mongod"
OCF_RESKEY_configfile_path_default="/etc/mongod.conf"
OCF_RESKEY_dbpath_default="/var/lib/mongo"

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

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

<parameters>

<parameter name="Mongodb" unique="0" required="1">
<longdesc lang="en">
Mongod binary path
</longdesc>
<shortdesc lang="en">Mongodb installdir</shortdesc>
<content type="string" default="${OCF_RESKEY_Mongodb_default}" />
</parameter>

<parameter name="configfile_path" unique="0" required="1">
<longdesc lang="en">
Mongodb configfile path
</longdesc>
<shortdesc lang="en">Mongodb conf path</shortdesc>
<content type="string" default="${OCF_RESKEY_configfile_path_default}" />
</parameter>

<parameter name="dbpath" unique="0" required="1">
<longdesc lang="en">
dbpath should be consistent with the configuration file
</longdesc>
<shortdesc lang="en">Mongodb db path</shortdesc>
<content type="string" default="${OCF_RESKEY_dbpath_default}" />
</parameter>

</parameters>

<actions>
<action name="start" timeout="30" />
<action name="stop" timeout="300" />
<action name="status" timeout="60" />
<action name="monitor" depth="0" timeout="30" interval="20" />
<action name="validate-all" timeout="5" />
<action name="meta-data" timeout="5" />
</actions>
</resource-agent>
END
}

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

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

Mongodb_monitor() {
   ocf_log err "in monitor"
   Mongodb_status
   rc=$?
   if [ ! $rc -eq 0 ]; then
      ocf_log err "Mongodb server is not running in monitor"
      return $OCF_NOT_RUNNING
   else
      ocf_log info "Mongodb monitor succeeded"
      return $OCF_SUCCESS
   fi
}

Mongodb_start() {
   ocf_log err "in start"
   Mongodb_status
   if [ $? -eq 0 ]; then
	   ocf_log info "Mongodb server already running"
	   return $OCF_SUCCESS
   else
      $OCF_RESKEY_Mongodb -f $OCF_RESKEY_configfile_path
      ret=$?
      if [ $ret -eq 0 ]; then
         Mongodb_status
         if [ $? -eq 0 ]; then
            ocf_log debug "Mongodb server start ok"
            return $OCF_SUCCESS
         else
            ocf_log err "Mongodb server start failed"
            return $OCF_ERR_GENERIC
         fi
      else
         ocf_log debug "Mongodb server start failed"
         return  $OCF_ERR_GENERIC
      fi
   fi	
}

Mongodb_stop() {
   Mongodb_status
   if [ $? -eq 7 ];then
        ocf_log debug "Mongodb server already stopped"
        return $OCF_SUCCESS
   else
      $OCF_RESKEY_Mongodb --dbpath $OCF_RESKEY_dbpath --shutdown
   fi
   Mongodb_status
   if [ $? -eq 7 ]; then
        ocf_log debug "Mongodb server stop ok"
        return $OCF_SUCCESS
   else
        ocf_log debug "Mongodb server stop failed"
        return $OCF_ERR_GENERIC
   fi
}

case "$1" in
  start)        Mongodb_validate; 
		Mongodb_start;;
  stop)		Mongodb_stop;;
  status)	Mongodb_status;;
  monitor)	Mongodb_monitor;;

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

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