#!/bin/bash
# -----------------------------------------------------------------------------
# Starts ONOS Apache Karaf container
# -----------------------------------------------------------------------------

# uncomment the following line for performance testing
# export JAVA_OPTS="${JAVA_OPTS:--Xms16G -Xmx16G -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+PrintGCDetails -XX:+PrintGCTimeStamps}"

# uncomment the following line for Netty TLS encryption
# Do modify the keystore location/password and truststore location/password accordingly
#export JAVA_OPTS="${JAVA_OPTS:--DenableNettyTLS=true -Djavax.net.ssl.keyStore=/home/ubuntu/onos.jks -Djavax.net.ssl.keyStorePassword=222222 -Djavax.net.ssl.trustStore=/home/ubuntu/onos.jks -Djavax.net.ssl.trustStorePassword=222222}"

# If ONOS_HOME is set, respect its value.
# If ONOS_HOME is not set (e.g. in the init or service environment),
# set it based on this script's path.
ONOS_HOME=${ONOS_HOME:-$(cd $(dirname $0)/.. >/dev/null 2>&1 && pwd)}

JAVA_OPTS="${JAVA_OPTS:--XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Dkaraf.log.console=INFO -Dds.lock.timeout.milliseconds=10000}"
if [ ! -z "$ONOS_YOURKIT" ]; then
  JAVA_OPTS+=" -agentpath:$ONOS_HOME/libyjpagent.so=listen=all"
fi
export JAVA_OPTS=${JAVA_OPTS}

set -e  # exit on error
set -u  # exit on undefined variable

KARAF_ARGS=server
SYS_APPS=drivers
ONOS_APPS=${ONOS_APPS:-gui2}  # Activate GUI2 unless specific apps were named

cd $ONOS_HOME

# Parse out arguments destinted for karaf invocation v. arguments that
# will be processed in line
while [ $# -gt 0 ]; do
  case $1 in
    apps-clean)
      # Deactivate all applications
      find ${ONOS_HOME}/apps -name "active" -exec rm \{\} \;
      ;;
    *)
      KARAF_ARGS+=" $1"
      ;;
  esac
  shift
done

# Activate the system required applications (SYS_APPS) as well as any
# specified applications in the var ONOS_APPS
for app in ${SYS_APPS//,/ } ${ONOS_APPS//,/ }; do
    if  [ -d "${ONOS_HOME}/apps/org.onosproject.$app/" ]; then
        touch ${ONOS_HOME}/apps/org.onosproject.$app/active
    elif [ -d "${ONOS_HOME}/apps/$app" ]; then
        touch ${ONOS_HOME}/apps/$app/active
    else
        echo "[WARN] Don't know how to activate $app"
    fi
done

KARAF_ARGS+=" server"

exec ${ONOS_HOME}/apache-karaf-$KARAF_VERSION/bin/karaf $KARAF_ARGS
