#!/bin/sh
#
# viewagent	Start up the VMware Horizon Agent
#
# chkconfig:   2345 11 89
# description: This service starts up the VMware Horizon Agent.
#

### BEGIN INIT INFO
# Provides: vmwareagent
# Required-Start: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start up the VMware Horizon Agent
### END INIT INFO

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

# Default Java binary
exec="/usr/lib/vmware/viewagent/jre/bin/java"

prog=viewagent
config="/etc/vmware/viewagent-config.txt"
viewagent_path=/usr/lib/vmware/viewagent

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

lockfile=/var/lock/subsys/$prog
pidfile=/var/run/$prog.pid
uid=`id | cut -d\( -f1 | cut -d= -f2`

start() {
    [ -x $exec ] || exit 5
    [ -f $config ] || exit 6
    [ $uid -ne 0 ] && exit 4
    echo -n $"Starting $prog: "
    sh /usr/lib/vmware/viewagent/bin/CleanupTempFiles.sh
    sh /usr/lib/vmware/viewagent/bin/XorgConfigure.sh
    /bin/bash /usr/lib/vmware/viewagent/bin/ngvc-agent.sh

    # destroy the old blastServer
    blastServerPid="$(pidof BlastServer)"
    [ -n "$blastServerPid" ] && kill -TERM $blastServerPid

    # destroy the old desktopDaemon
    desktopDaemonPid="$(pidof desktopDaemon)"
    [ -n "$desktopDaemonPid" ] && kill -TERM $desktopDaemonPid

    cd /usr/lib/vmware/viewagent
    [ -f "/usr/lib/vmware/viewagent/java.security.txt" ] && \
       parameters="-Djava.security.properties=/usr/lib/vmware/viewagent/java.security.txt"

    nohup $exec -Dfile.encoding=UTF-8 -Djuds.folder.preferred=${viewagent_path} -showversion -Xmx512m -XX:+UseConcMarkSweepGC ${BLAST_START_ATTEMPTS+-Dagent.blast.start.attempts=$BLAST_START_ATTEMPTS} ${parameters} -cp "*:" com.vmware.vdi.agent.standalone.StandaloneAgent -c "$config" >/dev/null 2>&1 &
    retval=$?
    echo $! > $pidfile
    [ $retval -eq 0 ] && touch $lockfile
    [ $retval -eq 0 ] && success
    echo "agent service starting.." >> /var/log/vmware/viewagent-debug.log
    echo "network information" >> /var/log/vmware/viewagent-debug.log

    which ifconfig >/dev/null 2>&1
    if [ "$?" = "0" ]; then
       echo "$(ifconfig)" >> /var/log/vmware/viewagent-debug.log
    else
       which ip >/dev/null 2>&1 && echo "$(ip address)" >> /var/log/vmware/viewagent-debug.log
    fi

    echo
    return $retval
}

stop() {
    [ $uid -ne 0 ] && exit 4
    echo -n $"Stopping $prog: "
    blastpid=`pidof VMwareBlastServer`
    [ "$?" -eq "0" ] && hasBlast=1
    killproc -p "$pidfile" $exec
    retval=$?
    [ $retval -eq 0 ] && rm -f $lockfile

    echo "agent service stopping.." >> /var/log/vmware/viewagent-debug.log
    echo
    return $retval
}

restart() {
    echo "agent service restart" >> /var/log/vmware/viewagent-debug.log
    stop
    echo "agent service stopped" >> /var/log/vmware/viewagent-debug.log
    echo "network information" >> /var/log/vmware/viewagent-debug.log

    which ifconfig >/dev/null 2>&1
    if [ "$?" = "0" ]; then
       echo "$(ifconfig)" >> /var/log/vmware/viewagent-debug.log
    else
       which ip >/dev/null 2>&1 && echo "$(ip address)" >> /var/log/vmware/viewagent-debug.log
    fi

    start
    echo "agent service started" >> /var/log/vmware/viewagent-debug.log
}

reload() {
    echo "agent service reload" >> /var/log/vmware/viewagent-debug.log
    restart
}

force_reload() {
    echo "agent service force-reload" >> /var/log/vmware/viewagent-debug.log
    restart
}

rh_status() {
    status -p "$pidfile" -l "$prog" $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}


case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?
