From 9e742b7c49e14bddf0432c04f7a3d181627ea820 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Tue, 29 Apr 2008 14:30:44 +0000 Subject: [PATCH] LMS-401 build script and startup script SVN: 5864 --- dataset_download/build/build.xml | 50 +++++- dataset_download/dist/download-service.sh | 169 ++++++++++++++++++ .../DatasetDownloadService.java | 7 +- 3 files changed, 224 insertions(+), 2 deletions(-) create mode 100755 dataset_download/dist/download-service.sh diff --git a/dataset_download/build/build.xml b/dataset_download/build/build.xml index a805b0fce85..4d9b4629cea 100644 --- a/dataset_download/build/build.xml +++ b/dataset_download/build/build.xml @@ -2,5 +2,53 @@ <import file="../../build_resources/ant/build-common.xml" /> <project-classpath name="ecp" classes="${classes}" /> - <target name="ci" depends="build-common.ci, check-dependencies"/> + <property name="original.dist" value="dist" /> + <property name="mainfolder" value="download-service" /> + <property name="dist.download-service" value="${dist}/${mainfolder}" /> + <property name="dist.download-service.lib" value="${dist.download-service}/lib" /> + <property name="jar.file" value="${dist.download-service.lib}/download-service.jar" /> + <property name="dist.file.prefix" value="${dist}/download-service" /> + <property name="lib" value="../libraries" /> + + <target name="clean"> + <delete dir="${dist}" /> + </target> + + <target name="compile" depends="build-common.compile, clean" /> + + <target name="jar" depends="compile"> + <mkdir dir="${dist.download-service.lib}" /> + <build-info revision="revision.number" version="version.number" clean="clean.flag" /> + <echo file="${build.info.file}">${version.number}:${revision.number}:${clean.flag}</echo> + <recursive-jar destfile="${jar.file}"> + <fileset dir="${classes}"> + <include name="**/*.class" /> + <include name="${build.info.filename}" /> + </fileset> + <manifest> + <attribute name="Main-Class" value="ch.systemsx.cisd.datasetdownload.DatasetDownloadService" /> + <attribute name="Class-Path" + value="jetty.jar jetty-util.jar servlet-api-2.5.jar log4j.jar commons-lang.jar commons-io.jar" /> + <attribute name="Version" value="${version.number}" /> + <attribute name="Build-Number" value="${version.number} (r${revision.number},${clean.flag})" /> + </manifest> + </recursive-jar> + </target> + + <target name="dist" depends="jar"> + <copy file="${lib}/log4j/log4j.jar" todir="${dist.download-service.lib}" /> + <copy file="${lib}/jetty/jetty.jar" todir="${dist.download-service.lib}" /> + <copy file="${lib}/jetty/jetty-util.jar" todir="${dist.download-service.lib}" /> + <copy file="${lib}/jetty/servlet-api-2.5.jar" todir="${dist.download-service.lib}" /> + <copy file="${lib}/commons-lang/commons-lang.jar" todir="${dist.download-service.lib}" /> + <copy file="${lib}/commons-io/commons-io.jar" todir="${dist.download-service.lib}" /> + <property name="dist.file" value="${dist.file.prefix}-${version.number}-r${revision.number}.zip" /> + <zip basedir="${dist}" destfile="${dist.file}"> + <zipfileset dir="${original.dist}" excludes="**.download-service.sh" prefix="${mainfolder}" /> + <zipfileset file="${original.dist}.download-service.sh" filemode="755" prefix="${mainfolder}" /> + </zip> + <delete dir="${dist.download-service.lib}" /> + </target> + + <target name="ci" depends="run-tests, check-dependencies"/> </project> \ No newline at end of file diff --git a/dataset_download/dist/download-service.sh b/dataset_download/dist/download-service.sh new file mode 100755 index 00000000000..676b6e11088 --- /dev/null +++ b/dataset_download/dist/download-service.sh @@ -0,0 +1,169 @@ +#!/bin/bash +# +# Control script for CISD Data Set Download Server on UNIX / Linux systems +# ------------------------------------------------------------------------- +#!/bin/bash +# +# Control script for CISD ETL Server on UNIX / Linux systems +# ------------------------------------------------------------------------- + +awkBin() +{ + # We need a awk that accepts variable assignments with '-v' + case `uname -s` in + "SunOS") + echo "nawk" + return + ;; + esac + # default + echo "awk" +} + +isPIDRunning() +{ + if [ "$1" = "" ]; then + return 0 + fi + # This will have a return value of 0 on BSDish systems + isBSD="`ps aux > /dev/null 2>&1; echo $?`" + AWK=`awkBin` + if [ "$isBSD" = "0" ]; then + if [ "`ps aux | $AWK -v PID=$1 '{if ($2==PID) {print "FOUND"}}'`" = "FOUND" ]; then + return 0 + else + return 1 + fi + else + if [ "`ps -ef | $AWK -v PID=$1 '{if ($2==PID) {print "FOUND"}}'`" = "FOUND" ]; then + return 0 + else + return 1 + fi + fi +} + +# +# definitions +# + +PIDFILE=${DOWNLOAD_SERVICE_PID:-DOWNLOAD_SERVICE.pid} +CONFFILE=etc/download-service.conf +LOGFILE=log/download-service_log.txt +STARTUPLOG=log/startup_log.txt +SUCCESS_MSG="Data set download service ready" +MAX_LOOPS=10 + +# +# change to installation directory +# +bin=$0 +if [ -L $bin ]; then + bin=`dirname $bin`/`readlink $bin` +fi +WD=`dirname $bin` +cd $WD +SCRIPT=./`basename $0` + +# +# source configuration script, if any +# +test -f $CONFFILE && source $CONFFILE +if [ "$JAVA_HOME" != "" ]; then + JAVA_BIN="$JAVA_HOME/bin/java" +else + JAVA_BIN="java" +fi + +command=$1 +# ensure that we ignore a possible prefix "--" for any command +command="${command#--*}" +case "$command" in + start) + echo -n "Starting Data Set Download Service " + rm -f $LOGFILE.old + if [ -f $LOGFILE ]; then + mv $LOGFILE $LOGFILE.old + fi + + shift 1 + ${JAVA_BIN} ${JAVA_OPTS} -jar lib/download-service.jar "$@" > $STARTUPLOG 2>&1 & echo $! > $PIDFILE + if [ $? -eq 0 ]; then + # wait for initial self-test to finish + n=0 + while [ $n -lt $MAX_LOOPS ]; do + sleep 1 + grep "$SUCCESS_MSG" $LOGFILE > /dev/null 2>&1 + if [ $? -eq 0 ]; then + break + fi + n=$(($n+1)) + done + PID=`cat $PIDFILE` + isPIDRunning $PID + if [ $? -eq 0 ]; then + grep "$SUCCESS_MSG" $LOGFILE > /dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "(pid $PID - WARNING: log message for successful startup not yet found)" + else + echo "(pid $PID)" + fi + else + rm $PIDFILE + echo "FAILED" + echo "startup log says:" + cat $STARTUPLOG + fi + else + echo "FAILED" + fi + ;; + stop) + echo -n "Stopping Data Set Download Service " + if [ -f $PIDFILE ]; then + PID=`cat $PIDFILE` + isPIDRunning $PID + if [ $? -eq 0 ]; then + kill $PID + if [ $? -eq 0 ]; then + echo "(pid $PID)" + rm $PIDFILE + else + echo "FAILED" + fi + else + rm $PIDFILE + echo "(was dead - cleaned up pid file)" + fi + else + echo "(not running - nothing to do)" + fi + ;; + status) + if [ -f $PIDFILE ]; then + PID=`cat $PIDFILE` + isPIDRunning $PID + if [ $? -eq 0 ]; then + echo "Data Set Download Service is running (pid $PID)" + else + echo "Data Set Download Service is dead (stale pid $PID)" + fi + else + echo "Data Set Download Service is not running" + fi + ;; + restart) + $SCRIPT stop + $SCRIPT start + ;; + help) + ${JAVA_BIN} ${JAVA_OPTS} -jar lib/download-service.jar --help + ;; + version) + ${JAVA_BIN} ${JAVA_OPTS} -jar lib/download-service.jar --version + ;; + *) + echo $"Usage: $0 {start|stop|restart|status|help|version}" + exit 1 +esac +exit 0 diff --git a/dataset_download/source/java/ch/systemsx/cisd/openbis/datasetdownload/DatasetDownloadService.java b/dataset_download/source/java/ch/systemsx/cisd/openbis/datasetdownload/DatasetDownloadService.java index 132d961e5d1..230fb339c1b 100644 --- a/dataset_download/source/java/ch/systemsx/cisd/openbis/datasetdownload/DatasetDownloadService.java +++ b/dataset_download/source/java/ch/systemsx/cisd/openbis/datasetdownload/DatasetDownloadService.java @@ -57,13 +57,18 @@ public class DatasetDownloadService ServiceRegistry.setLIMSServiceFactory(RMIBasedLIMSServiceFactory.INSTANCE); ApplicationContext applicationContext = createApplicationContext(); - Server server = new Server(applicationContext.getConfigParameters().getPort()); + int port = applicationContext.getConfigParameters().getPort(); + Server server = new Server(port); Context context = new Context(server, "/", Context.SESSIONS); context.setAttribute(APPLICATION_CONTEXT_KEY, applicationContext); context.addServlet(DatasetDownloadServlet.class, "/dataset-download/*"); server.start(); selfTest(applicationContext); + if (operationLog.isInfoEnabled()) + { + operationLog.info("Data set download service ready on port " + port); + } } private static void selfTest(ApplicationContext applicationContext) -- GitLab