Files
sailing-analytics/java/target/start
T

159 lines
7.9 KiB
Bash
Executable File

#!/bin/bash
# source variables
if [ "$TMP" = "" ]; then
TMP=/tmp
fi
PWD=`pwd`
. "$PWD/env.sh"
PARAM=$@
# make some checks
JAVA_BINARY=$JAVA_HOME/bin/java
if [[ ! -d "$JAVA_HOME" ]]; then
echo "Could not find $JAVA_BINARY set in env.sh. Trying to find the correct one..."
JAVA_VERSION=$(java -version 2>&1 | sed 's/^\(java version "\(.*\)\.\(.*\)\..*"\)\|\(openjdk version "\(.*\)\.\(.*\)\.\(.*\)" .*\)$/\3\5/; 1q')
if [ "$JAVA_VERSION" -lt 7 -o "$JAVA_VERSION" -gt 8 ]; then
echo "The current Java version ($JAVA_VERSION) does not match the requirements (>= Java 7, <= Java 8)."
exit
fi
JAVA_BINARY=`which java`
echo "Using Java from $JAVA_BINARY"
fi
# disable AWT requiring X11 and the correct DISPLAY variable setting; failing to do so
# can result in trouble generating QR codes in the back-end
ADDITIONAL_JAVA_ARGS="$ADDITIONAL_JAVA_ARGS -Djava.awt.headless=true -Xms$MEMORY -Dosgi.debug=$PWD/configuration/debug.properties"
PLATFORM=`uname`
SED_ARGS="-i"
if [[ $PLATFORM == "Darwin" ]]; then
SED_ARGS="-i \"\""
fi
if [[ $PLATFORM != "Darwin" ]]; then
TELNET_ACTIVE=`netstat -tlnp 2>/dev/null | grep ":$SERVER_PORT"`
else
TELNET_ACTIVE=`netstat -an 2>/dev/null | grep ".$SERVER_PORT"`
fi
if [[ $TELNET_ACTIVE != "" ]]; then
echo "There is something already running on port $SERVER_PORT. Perhaps your server that has not been stopped?"
exit
fi
scriptdir=`dirname "$0"`
LIB_DIR="$PWD/native-libraries"
if [[ ! -d "$PWD/logs" ]]; then
mkdir logs
fi
if [[ ! -d "$PWD/tmp" ]]; then
mkdir tmp
fi
echo "Script directory is $scriptdir and LIB_DIR is $LIB_DIR"
# Make really sure that parameters from config.ini are not used
sed $SED_ARGS "/mongo.host/d" ./configuration/config.ini
sed $SED_ARGS "/mongo.port/d" ./configuration/config.ini
sed $SED_ARGS "/expedition.udp.port/d" ./configuration/config.ini
sed $SED_ARGS "/replication.exchangeName/d" ./configuration/config.ini
sed $SED_ARGS "/replication.exchangeHost/d" ./configuration/config.ini
# Ensure that Jetty Port is set correctly
sed $SED_ARGS "s/^.*jetty.http.port.*$/<Set name=\"port\"><Property name=\"jetty.http.port\" deprecated=\"jetty.port\" default=\"$SERVER_PORT\"\/><\/Set>/g" ./configuration/jetty/etc/jetty-http.xml
# Update monitoring with the right ports
sed $SED_ARGS "s/127.0.0.1:[0-9][0-9][0-9][0-9]\//127.0.0.1:$SERVER_PORT\//g" ./configuration/monitoring.properties
# Inject information for system
HEAD_DATE=$(date "+%Y%m%d%H%M")
if [ "${MONGODB_URI}" != "" ]; then
MONGODB_URI_FOR_SED=$( echo "$MONGODB_URI" | sed -e 's/^mongodb:\/\///' -e 's/^[^:]*:[^@]*@//' -e 's/\//\\\//g' -e 's/&/\\&/g' )
else
MONGODB_URI_FOR_SED="$MONGODB_HOST:$MONGODB_PORT\/$MONGODB_NAME"
fi
sed $SED_ARGS "s/System:.*$/System: $MONGODB_URI_FOR_SED-$EXPEDITION_PORT-$REPLICATION_HOST:$REPLICATION_PORT\/$REPLICATION_CHANNEL Started: $HEAD_DATE/g" ./configuration/jetty/version.txt
VERSION_JSON_CONTENTS=$( cat ./configuration/jetty/version.json )
echo "${VERSION_JSON_CONTENTS}" | jq --argjson start_time_millis $( date +%s )000 '. + {start_time_millis: $start_time_millis} + {port: '${SERVER_PORT}'}' >./configuration/jetty/version.json
# Apply app parameters from env.sh
if [ "$MONGODB_URI" = "" ]; then
APP_PARAMETERS="-Dmongo.host=$MONGODB_HOST -Dmongo.port=$MONGODB_PORT -Dmongo.dbName=$MONGODB_NAME"
else
APP_PARAMETERS="-Dmongo.uri=$MONGODB_URI"
fi
APP_PARAMETERS="$APP_PARAMETERS -Dexpedition.udp.port=$EXPEDITION_PORT -Dreplication.exchangeHost=$REPLICATION_HOST -Dreplication.exchangePort=$REPLICATION_PORT -Dreplication.exchangeName=$REPLICATION_CHANNEL"
# Apply parameters for automatic replication start
REPLICATION_PARAMETERS="-Dreplicate.on.start=$REPLICATE_ON_START -Dreplicate.master.servlet.host=$REPLICATE_MASTER_SERVLET_HOST -Dreplicate.master.servlet.port=$REPLICATE_MASTER_SERVLET_PORT -Dreplicate.master.queue.host=$REPLICATE_MASTER_QUEUE_HOST -Dreplicate.master.queue.port=$REPLICATE_MASTER_QUEUE_PORT -Dreplicate.master.exchange.name=$REPLICATE_MASTER_EXCHANGE_NAME -Dreplicate.master.username=$REPLICATE_MASTER_USERNAME -Dreplicate.master.password=$REPLICATE_MASTER_PASSWORD -Dreplicate.master.bearer_token=$REPLICATE_MASTER_BEARER_TOKEN"
EQUINOX_LAUNCHER=$( find plugins -name 'org.eclipse.equinox.launcher_*.jar' )
COMMON_JAVA_ARGS="-D$SERVER_NAME $ADDITIONAL_JAVA_ARGS -Dcom.sap.sailing.server.name=$SERVER_NAME $APP_PARAMETERS $REPLICATION_PARAMETERS -Djava.io.tmpdir=$PWD/tmp -Dfile.encoding=cp1252 -Djetty.home=$scriptdir/configuration/jetty -Djava.util.logging.config.file=$scriptdir/configuration/logging.properties -Djava.library.path=$LIB_DIR -Dorg.eclipse.jetty.annotations.maxWait=120 -Djava.naming.factory.url.pkgs=org.eclipse.jetty.jndi -Djava.naming.factory.initial=org.eclipse.jetty.jndi.InitialContextFactory -Dgwt.rpc.version=9 -Xmx$MEMORY -jar ${EQUINOX_LAUNCHER} -configuration ./ -clean -console ${TELNET_PORT}"
if [[ $PARAM == "" ]] || [[ $PARAM == "no-update" ]]; then
nohup "$JAVA_BINARY" ${COMMON_JAVA_ARGS} 2>/dev/null >/dev/null &
JAVA_PID=$!
echo "Starting server... (PID: $JAVA_PID)"
echo "SERVER_NAME: $SERVER_NAME"
echo "SERVER_PORT: $SERVER_PORT"
echo "MEMORY: $MEMORY"
echo "TELNET_PORT: $TELNET_PORT"
echo "MONGODB_URI: $MONGODB_URI"
echo "MONGODB_HOST: $MONGODB_HOST"
echo "MONGODB_PORT: $MONGODB_PORT"
echo "MONGODB_NAME: $MONGODB_NAME"
echo "EXPEDITION_PORT: $EXPEDITION_PORT"
echo "REPLICATION_CHANNEL: $REPLICATION_CHANNEL"
echo $JAVA_PID > server.pid
if [[ ! -z "$ON_AMAZON" ]]; then
# give instances on amazon more time to start because
# they may be influenced by the server's boot process
echo "Be aware of the fact that starting amazon instances takes up to two minutes!"
sleep 15
echo "Your instance should now be ready - waiting some more minutes before checking state..."
sleep 120
else
sleep 10
fi
if [[ $PLATFORM != "Darwin" ]]; then
SERVER_ACTIVE=`netstat -tlnp 2>/dev/null | grep ":$SERVER_PORT"`
NETSTAT_INFO=`netstat -ntpl 2>/dev/null`
else
SERVER_ACTIVE=`netstat -an 2>/dev/null | grep ":$SERVER_PORT"`
NETSTAT_INFO=""
fi
PROCESS_INFO=`ps auxwww`
if [[ $PLATFORM != "Darwin" ]]; then
if [[ $SERVER_PORT == "" ]] || [[ $SERVER_ACTIVE == "" ]]; then
echo "Something went wrong with startup. Please check the logs..."
if [[ ${SERVER_STARTUP_NOTIFY} != "" ]]; then
echo "Startup of java server ${SERVER_NAME} on ${INSTANCE_ID} failed - check the logs ($SERVER_ACTIVE)\n\n$NETSTAT\n$PROCESS_INFO" | mail -s "Server $INSTANCE_ID startup failed!" ${SERVER_STARTUP_NOTIFY}
fi
exit
fi
fi
echo "Started $SERVER_NAME - use telnet localhost $TELNET_PORT to connect to the OSGi console. Logs should be found in logs/sailing0.log.0"
if [[ ${SERVER_STARTUP_NOTIFY} != "" ]]; then
if [[ ! -z "$ON_AMAZON" ]]; then
echo "Go to http://$INSTANCE_DNS:$SERVER_PORT to reach your instance!" | mail -s "Server $SERVER_NAME on $INSTANCE_ID started up!" $MAIL_ATTACH_OPTION env.sh $SERVER_STARTUP_NOTIFY
else
echo "OK" | mail -s "Server $SERVER_NAME on $INSTANCE_ID started up!" $MAIL_ATTACH_OPTION env.sh ${SERVER_STARTUP_NOTIFY}
fi
fi
elif [[ $PARAM == "debug" ]]; then
echo "Starting remote debugging session on port 8000 - make sure this port is open and reachable from the outside"
JFR_OPTIONS="-XX:+FlightRecorder -Dcom.sun.management.jmxremote.port=7091 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.rmi.port=7091 -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=localhost"
"$JAVA_BINARY" -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=*:8000,suspend=y $JFR_OPTIONS ${COMMON_JAVA_ARGS}
elif [[ $PARAM == "fg" ]]; then
exec "$JAVA_BINARY" ${COMMON_JAVA_ARGS}
elif [[ $PARAM == "docker" ]]; then
. generateMailProperties.sh
exec "$JAVA_BINARY" ${COMMON_JAVA_ARGS}
fi