#!/usr/bin/env bash
#run.sh runs the agent client.

cd `dirname "$0"`

SYSTEMJARS="commons-collections.jar commons-dbcp.jar commons-logging.jar commons-logging-api.jar commons-pool.jar commons-httpclient.jar ws-commons-util.jar jnetpcap.jar tomcat6-servlet-2.5-api.jar tomcat6-jsp-2.1-api-6.0.24.jar tomcat6-el-1.0-api.jar"
SCP=$(build-classpath $SYSTEMJARS) ; if [ $? != 0 ] ; then SCP="/usr/share/java/commons-collections.jar:/usr/share/java/commons-dbcp.jar:/usr/share/java/commons-logging.jar:/usr/share/java/commons-logging-api.jar:/usr/share/java/commons-pool.jar:/usr/share/java/commons-httpclient.jar:/usr/share/java/ws-commons-util.jar:/usr/share/java/jnetpcap.jar:/usr/share/java/tomcat6-servlet-2.5-api.jar:/usr/share/java/tomcat6-jsp-2.1-api-6.0.24.jar:/usr/share/java/tomcat6-el-1.0-api.jar" ; fi
DCP="/usr/share/java/jetty-util-6.1.26.jar:/usr/share/java/cloud-ws-commons-util-1.0.2.jar:/usr/share/java/cloud-xstream-1.3.1.jar:/usr/share/java/cloud-xmlrpc-client-3.1.3.jar:/usr/share/java/cloud-jsch-0.1.42.jar:/usr/share/java/cloud-trilead-ssh2-build213.jar:/usr/share/java/cloud-email.jar:/usr/share/java/cloud-manageontap.jar:/usr/share/java/cloud-backport-util-concurrent-3.0.jar:/usr/share/java/jetty-6.1.26.jar:/usr/share/java/cloud-commons-codec-1.5.jar:/usr/share/java/cloud-commons-collections-3.2.1.jar:/usr/share/java/cloud-jnetpcap.jar:/usr/share/java/cloud-wsdl4j.jar:/usr/share/java/cloud-bcprov-jdk16-1.45.jar:/usr/share/java/cloud-xenserver-5.6.100-1.jar:/usr/share/java/cloud-jasypt-1.8.jar:/usr/share/java/cloud-jstl-1.2.jar:/usr/share/java/cloud-netscaler-sdx.jar:/usr/share/java/cloud-ehcache.jar:/usr/share/java/cloud-axis.jar:/usr/share/java/cloud-mysql-connector-java-5.1.7-bin.jar:/usr/share/java/cloud-commons-httpclient-3.1.jar:/usr/share/java/cloud-httpcore-4.0.jar:/usr/share/java/cloud-commons-configuration-1.8.jar:/usr/share/java/cloud-log4j.jar:/usr/share/java/cloud-log4j-extras.jar:/usr/share/java/cloud-netscaler.jar:/usr/share/java/cloud-commons-logging-1.1.1.jar:/usr/share/java/cloud-commons-dbcp-1.4.jar:/usr/share/java/vmware-apputils.jar:/usr/share/java/cloud-libvirt-0.4.5.jar:/usr/share/java/vmware-lib-jaxrpc.jar:/usr/share/java/cloud-commons-lang-2.6.jar:/usr/share/java/cloud-xmlrpc-common-3.1.3.jar:/usr/share/java/cloud-servlet-api.jar:/usr/share/java/vmware-vim25.jar:/usr/share/java/cloud-commons-discovery.jar:/usr/share/java/cloud-cglib.jar:/usr/share/java/cloud-junit.jar:/usr/share/java/cloud-commons-pool-1.5.6.jar:/usr/share/java/vmware-vim.jar:/usr/share/java/cloud-iControl.jar:/usr/share/java/cloud-google-gson-1.7.1.jar"
ACP="/usr/share/java/cloud-utils.jar:/usr/share/java/cloud-api.jar:/usr/share/java/cloud-core.jar:/usr/share/java/cloud-server.jar:/usr/share/java/cloud-server-extras.jar:/usr/share/java/cloud-agent.jar:/usr/share/java/cloud-console-common.jar:/usr/share/java/cloud-console-proxy.jar:/usr/share/java/cloud-core-extras.jar:/usr/share/java/cloud-agent-extras.jar:/usr/share/java/jna.jar"
export CLASSPATH=$SCP:$DCP:$ACP:/etc/cloud/agent
for jarfile in "/usr/share/java/cloud-premium"/* ; do
	if [ ! -e "$jarfile" ] ; then continue ; fi
	CLASSPATH=$jarfile:$CLASSPATH
done
for plugin in "/usr/share/java/cloud-plugins"/* ; do
	if [ ! -e "$plugin" ] ; then continue ; fi
	CLASSPATH=$plugin:$CLASSPATH
done
export CLASSPATH

set -e
cd "/usr/lib/cloud/agent"
echo Current directory is "$PWD"
echo CLASSPATH to run the agent: "$CLASSPATH"

export PATH=/sbin:/usr/sbin:"$PATH"
SERVICEARGS=
for x in private public ; do
	configuration=`grep "^$x.network.device" "/etc/cloud/agent"/agent.properties||true`
	if [ -n "$configuration" ] ; then
		echo "Using manually-configured network device $CONFIGURATION"
	else
		defaultroute=`ip route | grep ^default | cut -d ' ' -f 5`
		test -n "$defaultroute"
		echo "Using auto-discovered network device $defaultroute which is the default route"
		SERVICEARGS="$SERVICEARGS $x.network.device="$defaultroute
	fi
done

function termagent() {
    if [ "$agentpid" != "" ] ; then
	echo Killing VMOps Agent "(PID $agentpid)" with SIGTERM >&2
	kill -TERM $agentpid
	echo Waiting for agent to exit >&2
	wait $agentpid
	ex=$?
	echo Agent exited with return code $ex >&2	
    else
	echo Agent PID is unknown >&2
    fi
}

trap termagent TERM
while true ; do
	java -Xms128M -Xmx384M -cp "$CLASSPATH" "$@" com.cloud.agent.AgentShell $SERVICEARGS &
	agentpid=$!
	echo "Agent started.  PID: $!" >&2
	wait $agentpid
	ex=$?
	if [ $ex -gt 128 ]; then
		echo "wait on agent process interrupted by SIGTERM" >&2
		exit $ex
	fi
	echo "Agent exited with return code $ex" >&2
	if [ $ex -eq 0 ] || [ $ex -eq 1 ] || [ $ex -eq 66 ] || [ $ex -gt 128 ]; then
		echo "Exiting..." > /dev/stderr
		exit $ex
	fi
	echo "Restarting agent..." > /dev/stderr
	sleep 1
done
