#!/bin/sh

PATH=/sbin:/usr/sbin:/bin:/usr/bin:$PATH
export PATH

IMSS_HOME=_PKG_INSTALL_ROOT_
export IMSS_HOME
LD_LIBRARY_PATH=$IMSS_HOME/lib/curl:$IMSS_HOME/lib:$IMSS_HOME/lib/openssl1/lib
export LD_LIBRARY_PATH

if [ -f /etc/trend-release ]; then
    trap "" SIGINT
    trap "unlock" EXIT

    . $IMSS_HOME/script/imssfunctions

    lock
fi

ODBCINI=$IMSS_HOME/config/odbc.ini
export ODBCINI
ODBCSYSINI=$IMSS_HOME/config/
export ODBCSYSINI

BIN_PATH=$IMSS_HOME/bin/localservermgmt
PROCESS_SIG=bin/localservermgmt
PID_FILE=$IMSS_HOME/bin/localservermgmt.pid
PS_CMD="ps -ef --width 1000"

stop_localservermgmt()
{
    if [ -f $PID_FILE ]; then
        PID=`cat $PID_FILE`
        if [ $PID -gt 0 ]; then
            IS_RUNNING=`$PS_CMD | grep $PID | grep $PROCESS_SIG | grep -v grep`
        else
            IS_RUNNING=""
        fi
            
        if test "$IS_RUNNING"
        then
            echo "Shutting down localservermgmt service $PID ..."
            kill -TERM $PID

            COUNT=0
            while $PS_CMD | grep $PROCESS_SIG | grep -v grep > /dev/null 2>&1 ; do
                sleep 1
                COUNT=`expr $COUNT + 1`
                if test "$COUNT" = "90"
                then
                    for i in `$PS_CMD | grep $PROCESS_SIG | grep -v grep |  awk '{ print $2 }'`
                    do
                        echo "Force to kill $i ..."
                        kill -KILL $i
                    done
                break
                fi
            done  
        else
            echo "Service localservermgmt $PID is not running."
            for i in `$PS_CMD | grep $PROCESS_SIG | grep -v grep |awk '{print $2}'`
            do
                echo "Force to kill $i ..."
                kill -KILL $i
            done
        fi
        
        if [ -f $PID_FILE ]; then
            echo "Remove the remained PID file $PID_FILE ..."
            rm -f $PID_FILE
        fi
    else
        echo "$PID_FILE missing"
        for i in `$PS_CMD | grep $PROCESS_SIG | grep -v grep |awk '{print $2}'`
        do
            echo "Force to kill $i ..."
            kill -KILL $i
        done
    fi
}

reload_localservermgmt()
{
    if [ -f $PID_FILE ]; then
        PID=`cat $PID_FILE`
        if [ $PID -gt 0 ]; then
            IS_RUNNING=`$PS_CMD | grep $PID | grep $PROCESS_SIG | grep -v grep`
        else
            IS_RUNNING=""
        fi
        
        if test "$IS_RUNNING"
        then
            echo "Reloading localservermgmt settings $PID ..."
            kill -HUP $PID
        else
            echo "Service localservermgmt $PID is not running."
            for i in `$PS_CMD | grep $PROCESS_SIG | grep -v grep |awk '{print $2}'`
            do
                echo "Reloading localservermgmt settings $i ..."
                kill -HUP $i
            done
        fi
    else
        echo "$PID_FILE missing"
        for i in `$PS_CMD | grep $PROCESS_SIG | grep -v grep |awk '{print $2}'`
        do
            echo "Reloading localservermgmt settings $i ..."
            kill -HUP $i
        done
    fi
}

reset_localservermgmt_FRSInfo()
{
    if [ -f $PID_FILE ]; then
        PID=`cat $PID_FILE`
        if [ $PID -gt 0 ]; then
            IS_RUNNING=`$PS_CMD | grep $PID | grep $PROCESS_SIG | grep -v grep`
        else
            IS_RUNNING=""
        fi
        
        if test "$IS_RUNNING"
        then
            echo "Reset localservermgmt for FRS settings $PID ..."
            kill -USR1 $PID
        else
            echo "Service localservermgmt $PID is not running."
            for i in `$PS_CMD | grep $PROCESS_SIG | grep -v grep |awk '{print $2}'`
            do
                echo "Reset localservermgmt for FRS settings $i ..."
                kill -USR1 $i
            done
        fi
    else
        echo "$PID_FILE missing"
        for i in `$PS_CMD | grep $PROCESS_SIG | grep -v grep |awk '{print $2}'`
        do
            echo "Reset localservermgmt for FRS settings $i ..."
            kill -USR1 $i
        done
    fi
}

reset_localservermgmt_WRSInfo()
{
    if [ -f $PID_FILE ]; then
        PID=`cat $PID_FILE`
        if [ $PID -gt 0 ]; then
            IS_RUNNING=`$PS_CMD | grep $PID | grep $PROCESS_SIG | grep -v grep`
        else
            IS_RUNNING=""
        fi
        
        if test "$IS_RUNNING"
        then
            echo "Reset localservermgmt for WRS settings $PID ..."
            kill -USR2 $PID
        else
            echo "Service localservermgmt $PID is not running."
            for i in `$PS_CMD | grep $PROCESS_SIG | grep -v grep |awk '{print $2}'`
            do
                echo "Reset localservermgmt for WRS settings $i ..."
                kill -USR2 $i
            done
        fi
    else
        echo "$PID_FILE missing"
        for i in `$PS_CMD | grep $PROCESS_SIG | grep -v grep |awk '{print $2}'`
        do
            echo "Reset localservermgmt for WRS settings $i ..."
            kill -USR2 $i
        done
    fi
}

start_localservermgmt()
{
    for i in `$PS_CMD | grep $PROCESS_SIG | grep -v grep | grep -v defunct | awk '{ print $2 }'`
    do 
        if test "$i"
        then 
            echo "$BIN_PATH is running."
            exit 1
        fi
    done 
    if test -x $BIN_PATH ; then
        $IMSS_HOME/bin/close_handle_sh imss $BIN_PATH &
        # Sleep 5 seconds to make sure imssdps can be started.
        sleep 5
        for i in `$PS_CMD | grep $PROCESS_SIG | grep -v grep | awk '{ print $2 }'`
        do 
            if test "$i"
            then 
                echo "$BIN_PATH has started."
                exit 0
            fi
        done
        # if can't start, touch pid file to let imssmgr find crash and start it again.
        echo "0" > $PID_FILE
        chown imss:imss $PID_FILE		
        echo "$BIN_PATH cannot be started."
    else
        echo "$BIN_PATH is not executable."
        exit 1
    fi
}

case "$1" in
'start')
    start_localservermgmt
    ;;
'stop')
    stop_localservermgmt
    ;;
'restart')
    stop_localservermgmt
    start_localservermgmt
    ;;
'reload')
    reload_localservermgmt
    ;;
'resetFRSInfo')
    reset_localservermgmt_FRSInfo
    ;;
 'resetWRSInfo')
    reset_localservermgmt_WRSInfo
    ;; 
*)
    echo "usage: $0 start|stop|restart"
    exit 1
    ;;
esac
