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