#!/bin/sh
#
# repmgrd     Start repmgrd daemon
#
# chkconfig: - 64 36
# description: repmgrd is a replication manager, and failover management tool for PostgreSQL

## BEGIN INIT INFO
# Provides: repmgrd
# Required-Start: $local_fs $remote_fs $network $syslog $named
# Required-Stop: $local_fs $remote_fs $network $syslog $named
# Should-Start: postgresql-11
# Short-Description: Start repmgrd daemon
# Description: repmgrd is replication manager, and failover management tool
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

# Find the name of the script
NAME=`basename $0`
if [ ${NAME:0:1} = "S" -o ${NAME:0:1} = "K" ]
then
       	NAME=${NAME:3}
fi

prog=repmgr-11
REPMGRD_LOCKFILE=/var/lock/subsys/$prog
REPMGRD_ENABLED=no
REPMGRD_OPTS=
REPMGRD_CONF=/etc/repmgr/11/repmgr.conf
REPMGRD_LOG=/var/log/repmgr/repmgrd-11.log
REPMGRD_USER=postgres
REPMGRD_BIN=/usr/pgsql-11/bin/repmgrd
REPMGRD_PIDFILE=/var/run/repmgr/repmgrd-11.pid

# Get network config.
. /etc/sysconfig/network

# Read configuration variable file if it is present
[ -r /etc/sysconfig/repmgr/$prog ] && . /etc/sysconfig/repmgr/$prog

# For SELinux we need to use 'runuser' not 'su'
if [ -x /sbin/runuser ]
then
    SU=runuser
else
    SU=su
fi

test -x $REPMGRD_BIN || exit 0

case "$REPMGRD_ENABLED" in
    [Yy]*)
	break
	;;
    *)
	exit 0
	;;
esac

if [ -z "${REPMGRD_OPTS}" ]
then
    echo "Not starting ${prog}, REPMGRD_OPTS not set in /etc/sysconfig/repmgr/${prog}"
    exit 0
fi



# Check that networking is up.
[ "${NETWORKING}" = "no" ] && exit 6
start(){
	[ -x $REPMGRD_BIN ] || exit 5
	[ -f "${REPMGRD_CONF}" ] || exit 6
	echo -n "Starting $prog: "

	# Make sure startup-time log file is valid
	if [ ! -e "${REPMGRD_LOG}" -a ! -h "${REPMGRD_LOG}" ]
	then
		touch "${REPMGRD_LOG}" || exit 1
		chown $REPMGRD_USER: "${REPMGRD_LOG}"
		chmod go-rwx "${REPMGRD_LOG}"
		[ -x /usr/bin/chcon ] && /usr/bin/chcon -u system_u -r object_r -t postgresql_log_t "${REPMGRD_LOG}" 2>/dev/null
	fi

        mkdir -p $(dirname $REPMGRD_PIDFILE)
        chown $REPMGRD_USER: $(dirname $REPMGRD_PIDFILE)

	${SU} -l $REPMGRD_USER -c "${REPMGRD_BIN} -f ${REPMGR_CONF} ${REPMGRD_OPTS} -p ${REPMGRD_PIDFILE} >> ${REPMGRD_LOG} 2>&1" ${REPMGRD_USER} < /dev/null
	sleep 2
        retval=$?
	[ $retval -eq 0 ] && success
        echo
        [ $retval -eq 0 ] && touch $REPMGRD_LOCKFILE
        return $retval
}

stop(){
        echo -n "Stopping $prog: "
        killproc -p $REPMGRD_PIDFILE $prog -TERM
        retval=$?
        echo
        [ $retval -eq 0 ] && rm -f $REPMGRD_LOCKFILE
        return $retval
}

restart(){
        if rh_status_q; then
                stop
		start
        else
                start
        fi
}
reload(){
        echo -n "Reloading $prog: "
        kill -HUP $(cat $REPMGRD_PIDFILE)
        retval=$?
        echo
        return $retval
}

rh_status() {
   if [ -f $REPMGRD_PIDFILE ] && [  `ps hp $(cat $REPMGRD_PIDFILE)|wc -l` -eq 1 ]
   then
       pid=$(cat $REPMGRD_PIDFILE)
       echo "Process repmgrd exists (PID $pid)"
       return 0
   else
       return 1
   fi
}

rh_status_q() {
        rh_status >/dev/null 2>&1
}
case "$1" in
  start)
        rh_status_q && exit 0
        start
        ;;
  stop)
        rh_status_q || exit 0
        stop
        ;;
  restart)
        restart
        ;;
  reload|force-reload)
        rh_status_q || exit 7
        reload
        ;;
  condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
  status)
	status -p $REPMGRD_PIDFILE repmgr-11
	script_result=$?

        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload|force-reload|condrestart|try-restart|status}"
        exit 2
esac

exit $?
