#!/bin/bash

# Promise WebPAM Pro Software Management Daemon (SWMGT)
# Copyright (C) 2008 ~ 2009 Promise Technology, Inc.

# For RedHat and cousins:
# chkconfig: 2344 40 40
# description: Self Monitoring and Reporting Technology (SMART) Daemon
# processname: smartd

# For SuSE and cousins
### BEGIN INIT INFO
# Provides:                   swmgtd
# Required-Start:             $syslog $remote_fs
# Should-Start:               sendmail
# Required-Stop:              $syslog $remote_fs
# Should-Stop:                sendmail
# Default-Start:              2 3 4 5
# Default-Stop:
# Short-Description:          SWMGT
# Description:                Promise WebPAMPRO Agent
# X-UnitedLinux-Default-Enabled: yes
### END INIT INFO

WPP_INSTALL_PATH=/opt/Promise/WebPAMPRO
export LD_LIBRARY_PATH=$WPP_INSTALL_PATH/Agent/lib
export PATH=$WPP_INSTALL_PATH/Agent/bin:$PATH
export SW_CONF_PATH=$WPP_INSTALL_PATH/Agent/bin

SWMGTD_BIN=$SW_CONF_PATH/swmgtd

report_unsupported () {
    echo "Currently the Promise agent package has no init script for"
    echo "the $1 OS/distribution. If you can provide one or this"
    echo "one works after removing some ifdefs, please contact"
    echo "michael.lu@cn.promise.com"
    exit 1
}


# source function library
# Red Hat or Yellow Dog or Mandrake
if [ -f /etc/redhat-release -o -f /etc/yellowdog-release -o -f /etc/mandrake-release -o -f /etc/whitebox-release -o -f /etc/trustix-release -o -f /etc/tinysofa-release ] ; then

# source function library
    . /etc/init.d/functions


OPTIONS=""
RETVAL=0
prog="swmgtd"

start() {
        echo -n $"Starting $prog: "
        if [ $UID -ne 0 ]; then
                RETVAL=1
                failure
        else
                
                daemon $WPP_INSTALL_PATH/Agent/bin/swmgtd $OPTIONS
                RETVAL=$?
                [ $RETVAL -eq 0 ] && touch /var/lock/subsys/swmgtd
        fi;
        echo 
        return $RETVAL
}

stop() {
        echo -n $"Stopping $prog: "
        if [ $UID -ne 0 ]; then
                RETVAL=1
                failure
        else
                killproc $WPP_INSTALL_PATH/Agent/bin/swmgtd
                RETVAL=$?
                [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/swmgtd
                killall $WPP_INSTALL_PATH/Agent/bin/bgasched
                killall $WPP_INSTALL_PATH/Agent/bin/prevtlogd
        fi;
        echo
        return $RETVAL
}

restart(){
	stop
	start
}

condrestart(){
    [ -e /var/lock/subsys/snmpd ] && restart
    return 0
}

case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart)
	restart
    ;;
  status)
        status swmgtd
	RETVAL=$?
        ;;
  *)
	echo $"Usage: $0 {start|stop|status|restart}"
	RETVAL=1
esac

exit $RETVAL

# SuSE
elif [ -f /etc/SuSE-release ] ; then

   # Shell functions sourced from /etc/rc.status:
   #      rc_check         check and set local and overall rc status
   #      rc_status        check and set local and overall rc status
   #      rc_status -v     be verbose in local rc status and clear it afterwards
   #      rc_status -v -r  ditto and clear both the local and overall rc status
   #      rc_status -s     display "skipped" and exit with status 3
   #      rc_status -u     display "unused" and exit with status 3
   #      rc_failed        set local and overall rc status to failed
   #      rc_failed <num>  set local and overall rc status to <num>
   #      rc_reset         clear both the local and overall rc status
   #      rc_exit          exit appropriate to overall rc status
   #      rc_active        checks whether a service is activated by symlinks
    . /etc/rc.status

   # Reset status of this service
    rc_reset

   # Return values acc. to LSB for all commands but status:
   # 0       - success
   # 1       - generic or unspecified error
   # 2       - invalid or excess argument(s)
   # 3       - unimplemented feature (e.g. "reload")
   # 4       - user had insufficient privileges
   # 5       - program is not installed
   # 6       - program is not configured
   # 7       - program is not running
   # 8--199  - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)
   #
   # Note that starting an already running service, stopping
   # or restarting a not-running service as well as the restart
   # with force-reload (in case signaling is not supported) are
   # considered a success.

    case "$1" in
        start)
            echo -n "Starting swmgtd "
            ## Start daemon with startproc(8). If this fails
            ## the return value is set appropriately by startproc.

            # We don't use startproc - we need to check for return code 17.
            if ! /sbin/checkproc $SWMGTD_BIN ; then
                $SWMGTD_BIN
                # Remember status and be verbose
                if test $? -ne 17 ; then
                    rc_status -v
                else
                    rc_status -u
                fi
            else
                rc_reset
                rc_status -v
            fi
            ;;
        stop)
            echo -n "Shutting down swmgtd "
            /sbin/killproc -TERM $SWMGTD_BIN
#            killall $WPP_INSTALL_PATH/Agent/bin/bgasched > /dev/null 2>&1
#            killall $WPP_INSTALL_PATH/Agent/bin/prevtlogd > /dev/null 2>&1
            # Remember status and be verbose
            rc_status -v
            ;;
    try-restart|condrestart)
            ## Do a restart only if the service was active before.
            ## Note: try-restart is now part of LSB (as of 1.9).
            ## RH has a similar command named condrestart.
            if test "$1" = "condrestart"; then
                    echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
            fi
            $0 status
            if test $? = 0; then
                    $0 restart
            else
                    rc_reset    # Not running is not a failure.
            fi
            # Remember status and be quiet
            rc_status
            ;;
    restart)
            $0 stop
            $0 start
            # Remember status and be quiet
            rc_status
            ;;
    force-reload|reload)
            echo -n "Reload service swmgtd "
            /sbin/killproc -HUP $SWMGTD_BIN
            rc_status -v
            ;;
    status)
            echo -n "Checking for service swmgtd "
            ## Check status with checkproc(8), if process is running
            ## checkproc will return with exit status 0.

            # Return value is slightly different for the status command:
            # 0 - service up and running
            # 1 - service dead, but /var/run/  pid  file exists
            # 2 - service dead, but /var/lock/ lock file exists
            # 3 - service not running (unused)
            # 4 - service status unknown :-(
            # 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)

            # NOTE: checkproc returns LSB compliant status values.
            /sbin/checkproc $SWMGTD_BIN
            rc_status -v
            ;;
    probe)
            ## Optional: Probe for the necessity of a reload, print out the
            ## argument to this init script which is required for a reload.
            ## Note: probe is not (yet) part of LSB (as of 1.2)
            ## Note: probe is not (yet) part of LSB (as of 1.9)

            test $SWMGTD_BIN -nt /var/run/swmgtd.pid && echo reload
            ;;
    *)
            echo "Usage: $0 {start|stop|status|restart}"
            exit 1
            ;;
    esac
    rc_exit


# Debian
elif [ -f /etc/debian_version ] ; then
    echo -n "Not support now"

# FreeBSD
elif uname -a | grep FreeBSD > /dev/null 2>&1 ; then
    echo -n "Not support now"

# Solaris
elif uname -a | grep SunOS > /dev/null 2>&1 ; then
    echo -n "Not support now"

# Slackware
elif [ -f /etc/slackware-version ] ; then
    echo -n "Not support now"

# Cygwin
elif uname | grep -i CYGWIN > /dev/null 2>&1 ; then
    echo -n "Not support now"

else
    report_unsupported "Unknown"
fi
