You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by de...@apache.org on 2013/02/06 20:33:15 UTC

svn commit: r1443156 - in /uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws: ./ server/

Author: degenaro
Date: Wed Feb  6 19:33:14 2013
New Revision: 1443156

URL: http://svn.apache.org/viewvc?rev=1443156&view=rev
Log:
UIMA-2642 Support
1. proxy-job-status
2. proxy-job-monitor
3. WS auto-cancel after expiry
4. WaitTimeout and CancelPending... in Reason area of Jobs page
5. several utility functions

Added:
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/IListenerOrchestrator.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccFile.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/TrackingInfo.java
Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebServer.java

Added: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/IListenerOrchestrator.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/IListenerOrchestrator.java?rev=1443156&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/IListenerOrchestrator.java (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/IListenerOrchestrator.java Wed Feb  6 19:33:14 2013
@@ -0,0 +1,7 @@
+package org.apache.uima.ducc.ws;
+
+import org.apache.uima.ducc.transport.event.OrchestratorStateDuccEvent;
+
+public interface IListenerOrchestrator {
+	public void update(OrchestratorStateDuccEvent duccEvent);
+}

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java?rev=1443156&r1=1443155&r2=1443156&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java Wed Feb  6 19:33:14 2013
@@ -36,6 +36,7 @@ import org.apache.uima.ducc.transport.ev
 import org.apache.uima.ducc.transport.event.RmStateDuccEvent;
 import org.apache.uima.ducc.transport.event.SmStateDuccEvent;
 import org.apache.uima.ducc.transport.event.common.DuccWorkMap;
+import org.apache.uima.ducc.ws.server.DuccListeners;
 import org.apache.uima.ducc.ws.server.DuccWebServer;
 import org.apache.uima.ducc.ws.utils.DatedNodeMetricsUpdateDuccEvent;
 
@@ -127,6 +128,7 @@ implements IWebServer {
 			duccLogger.info(methodName, jobid, duccMsg.fetchLabel("jobs")+jobCount.get()+" "+duccMsg.fetchLabel("reservations")+reservationCount.get()+" "+duccMsg.fetchLabel("services")+serviceCount.get());
 		}
 		DuccData.getInstance().put(wm);
+		DuccListeners.getInstance().update(duccEvent);
 		duccLogger.trace(methodName, jobid, duccMsg.fetch("exit"));
 	}
 

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java?rev=1443156&r1=1443155&r2=1443156&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java Wed Feb  6 19:33:14 2013
@@ -63,6 +63,7 @@ public abstract class DuccAbstractHandle
 	public final String duccContextJsonFormat = duccContext+"/json-format";
 	public final String duccContextUser       = duccContext+"/user";
 	public final String duccContextLegacy     = duccContext+"/legacy";
+	public final String duccContextProxy      = duccContext+"/proxy";
 	
 	public final String duccjConsoleLink	  = duccContext+"/jconsole-link.jnlp";
 	
@@ -662,14 +663,6 @@ public abstract class DuccAbstractHandle
 		return disabled;
 	}
 
-	public String getUserLogsDir(IDuccWorkJob job) {
-		String retVal = job.getLogDirectory();
-		if(!retVal.endsWith(File.separator)) {
-			retVal += File.separator;
-		}
-		return retVal;
-	}
-
 	public String buildjConsoleLink(String service) {
 		String location = "buildjConsoleLink";
 		String href = "<a href=\""+duccjConsoleLink+"?"+"service="+service+"\" onclick=\"var newWin = window.open(this.href,'child','height=800,width=1200,scrollbars');  newWin.focus(); return false;\">"+service+"</a>";
@@ -688,7 +681,7 @@ public abstract class DuccAbstractHandle
 			if(name == null) {
 				name = errorCount;
 			}
-			String logsjobdir = getUserLogsDir(job)+job.getDuccId().getFriendly()+File.separator;
+			String logsjobdir = job.getUserLogsDir()+job.getDuccId().getFriendly()+File.separator;
 			String logfile = "jd.err.log";
 			String href = "<a href=\""+duccLogData+"?"+"fname="+logsjobdir+logfile+"\" onclick=\"var newWin = window.open(this.href,'child','height=800,width=1200,scrollbars');  newWin.focus(); return false;\">"+name+"</a>";
 			retVal = href;

Added: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccFile.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccFile.java?rev=1443156&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccFile.java (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccFile.java Wed Feb  6 19:33:14 2013
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ducc.ws.server;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+import org.apache.uima.ducc.common.IDuccEnv;
+import org.apache.uima.ducc.transport.event.common.IDuccWorkJob;
+
+public class DuccFile {
+	
+	public static Properties getProperties(IDuccWorkJob job) throws IOException {
+		String directory = job.getUserLogsDir()+job.getDuccId().getFriendly()+File.separator;
+		String name = "job-specification.properties";
+		Properties properties = DuccFile.getProperties(directory, name);
+		return properties;
+	}
+	
+	public static Properties getProperties(String directory, String name) throws IOException {
+		return getProperties(directory+name);
+	}
+	
+	public static Properties getProperties(String path) throws IOException {
+		FileInputStream fis = null;
+		try {
+			File file = new File(path);
+			fis = new FileInputStream(file);
+			Properties properties = new Properties();
+			properties.load(fis);
+			fis.close();
+			return properties;
+		}
+		catch(IOException e) {
+			if(fis != null) {
+				fis.close();
+			}
+			throw e;
+		}
+	}
+}

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java?rev=1443156&r1=1443155&r2=1443156&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java Wed Feb  6 19:33:14 2013
@@ -302,7 +302,7 @@ public class DuccHandler extends DuccAbs
 	}
 	
 	private void buildJobProcessListEntry(StringBuffer sb, DuccWorkJob job, IDuccProcess process, String type, int counter) {
-		String logsjobdir = getUserLogsDir(job)+job.getDuccId().getFriendly()+File.separator;
+		String logsjobdir = job.getUserLogsDir()+job.getDuccId().getFriendly()+File.separator;
 		String logfile = buildLogFileName(job, process, type);
 		String errfile = "jd.err.log";
 		String href = "<a href=\""+duccLogData+"?"+"fname="+logsjobdir+logfile+"\" onclick=\"var newWin = window.open(this.href,'child','height=800,width=1200,scrollbars');  newWin.focus(); return false;\">"+logfile+"</a>";
@@ -1126,13 +1126,7 @@ public class DuccHandler extends DuccAbs
 		DuccWorkJob job = getJob(jobNo);
 		if(job != null) {
 			try {
-				String logsjobdir = getUserLogsDir(job)+job.getDuccId().getFriendly()+File.separator;
-				String specfile = "job-specification.properties";
-				File file = new File(logsjobdir+specfile);
-				FileInputStream fis = new FileInputStream(file);
-				Properties properties = new Properties();
-				properties.load(fis);
-				fis.close();
+				Properties properties = DuccFile.getProperties(job);
 				TreeMap<String,String> map = new TreeMap<String,String>();
 				Enumeration<?> enumeration = properties.keys();
 				while(enumeration.hasMoreElements()) {
@@ -1200,7 +1194,7 @@ public class DuccHandler extends DuccAbs
 						data.append("<td>");
 						DuccId processId = processIterator.next();
 						IDuccProcess process = processMap.get(processId);
-						String logsjobdir = getUserLogsDir(job)+job.getDuccId().getFriendly()+File.separator;
+						String logsjobdir = job.getUserLogsDir()+job.getDuccId().getFriendly()+File.separator;
 						String logfile = buildLogFileName(job, process, "UIMA");
 						String link = logfile;
 						String reason = process.getReasonForStoppingProcess();
@@ -1248,7 +1242,7 @@ public class DuccHandler extends DuccAbs
 						data.append("<td>");
 						DuccId processId = processIterator.next();
 						IDuccProcess process = processMap.get(processId);
-						String logsjobdir = getUserLogsDir(job)+job.getDuccId().getFriendly()+File.separator;
+						String logsjobdir = job.getUserLogsDir()+job.getDuccId().getFriendly()+File.separator;
 						String logfile = buildLogFileName(job, process, "UIMA");
 						String link = logfile;
 						String reason = process.getReasonForStoppingProcess();
@@ -1273,7 +1267,7 @@ public class DuccHandler extends DuccAbs
 	}
 
 	private void buildServiceProcessListEntry(StringBuffer sb, DuccWorkJob job, IDuccProcess process, String type, int counter) {
-		String logsjobdir = getUserLogsDir(job)+job.getDuccId().getFriendly()+File.separator;
+		String logsjobdir = job.getUserLogsDir()+job.getDuccId().getFriendly()+File.separator;
 		String logfile = buildLogFileName(job, process, type);
 		String href = "<a href=\""+duccLogData+"?"+"fname="+logsjobdir+logfile+"\" onclick=\"var newWin = window.open(this.href,'child','height=800,width=1200,scrollbars');  newWin.focus(); return false;\">"+logfile+"</a>";
 		sb.append(trGet(counter));
@@ -1417,7 +1411,7 @@ public class DuccHandler extends DuccAbs
 		DuccWorkJob service = getService(jobNo);
 		if(service != null) {
 			try {
-				String logsjobdir = getUserLogsDir(service)+service.getDuccId().getFriendly()+File.separator;
+				String logsjobdir = service.getUserLogsDir()+service.getDuccId().getFriendly()+File.separator;
 				String specfile = "service-specification.properties";
 				File file = new File(logsjobdir+specfile);
 				FileInputStream fis = new FileInputStream(file);

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java?rev=1443156&r1=1443155&r2=1443156&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java Wed Feb  6 19:33:14 2013
@@ -146,6 +146,7 @@ public class DuccHandlerJsonFormat exten
 		// Reason
 		sb = new StringBuffer();
 		if(job.isOperational()) {
+			boolean multi = false;
 			sb.append("<span>");
 			ArrayList<String> swappingMachines = getSwappingMachines(job);
 			if(!swappingMachines.isEmpty()) {
@@ -155,11 +156,60 @@ public class DuccHandlerJsonFormat exten
 					mb.append(" ");
 				}
 				String ml = mb.toString().trim();
+				if(multi) {
+					sb.append(" ");
+				}
+				multi = true;
 				sb.append("<span class=\"health_red\" title=\""+ml+"\">");
 				sb.append("Swapping");
 				sb.append("</span>");
 			}
 			sb.append("</span>");
+			DuccWebMonitor duccWebMonitor = DuccWebMonitor.getInstance();
+			Long expiry = duccWebMonitor.getExpiry(duccId);
+			if(expiry != null) {
+				if(multi) {
+					sb.append(" ");
+				}
+				multi = true;
+				String t2 = " left until auto-cancel, unless renewed";
+				String t1;
+				if(expiry == 0) {
+					t1 = "less than 1 minute";
+				}
+				else {
+					t1 = expiry+"+ minutes";
+				}
+				String text = t1+t2;
+				long expiryWarnTime = 3;
+				Properties properties = DuccWebProperties.get();
+				String key = "ducc.ws.job.automatic.cancel.minutes";
+				if(properties.containsKey(key)) {
+					String value = properties.getProperty(key);
+					try {
+						long time = Long.parseLong(value)/2;
+						if(time > 0) {
+							expiryWarnTime = time;
+						}
+					}
+					catch(Exception e) {
+						
+					}
+				}
+				if(expiry > expiryWarnTime) {
+					sb.append("<span class=\"health_green\" title=\""+text+"\">");
+				}
+				else {
+					sb.append("<span class=\"health_red\" title=\""+text+"\">");
+				}
+				sb.append("WaitTimeout");
+				sb.append("</span>");
+			}
+			else if(duccWebMonitor.isCancelPending(duccId)) {
+				sb.append("<span class=\"health_red\" >");
+				sb.append("CancelPending...");
+				sb.append("</span>");
+			}
 		}
 		else if(job.isCompleted()) {
 			JobCompletionType jobCompletionType = job.getCompletionType();

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java?rev=1443156&r1=1443155&r2=1443156&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java Wed Feb  6 19:33:14 2013
@@ -155,6 +155,7 @@ public class DuccHandlerLegacy extends D
 		sb.append("</td>");
 		// Reason
 		if(job.isOperational()) {
+			boolean multi = false;
 			sb.append("<td valign=\"bottom\">");
 			ArrayList<String> swappingMachines = getSwappingMachines(job);
 			if(!swappingMachines.isEmpty()) {
@@ -164,10 +165,59 @@ public class DuccHandlerLegacy extends D
 					mb.append(" ");
 				}
 				String ml = mb.toString().trim();
+				if(multi) {
+					sb.append(" ");
+				}
+				multi = true;
 				sb.append("<span class=\"health_red\" title=\""+ml+"\">");
 				sb.append("Swapping");
 				sb.append("</span>");
 			}
+			DuccWebMonitor duccWebMonitor = DuccWebMonitor.getInstance();
+			Long expiry = duccWebMonitor.getExpiry(duccId);
+			if(expiry != null) {
+				if(multi) {
+					sb.append(" ");
+				}
+				multi = true;
+				String t2 = " left until auto-cancel, unless renewed";
+				String t1;
+				if(expiry == 0) {
+					t1 = "less than 1 minute";
+				}
+				else {
+					t1 = expiry+"+ minutes";
+				}
+				String text = t1+t2;
+				long expiryWarnTime = 3;
+				Properties properties = DuccWebProperties.get();
+				String key = "ducc.ws.job.automatic.cancel.minutes";
+				if(properties.containsKey(key)) {
+					String value = properties.getProperty(key);
+					try {
+						long time = Long.parseLong(value)/2;
+						if(time > 0) {
+							expiryWarnTime = time;
+						}
+					}
+					catch(Exception e) {
+						
+					}
+				}
+				if(expiry > expiryWarnTime) {
+					sb.append("<span class=\"health_green\" title=\""+text+"\">");
+				}
+				else {
+					sb.append("<span class=\"health_red\" title=\""+text+"\">");
+				}
+				sb.append("WaitTimeout");
+				sb.append("</span>");
+			}
+			else if(duccWebMonitor.isCancelPending(duccId)) {
+				sb.append("<span class=\"health_red\" >");
+				sb.append("CancelPending...");
+				sb.append("</span>");
+			}
 			sb.append("</td>");
 		}
 		else if(job.isCompleted()) {

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebServer.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebServer.java?rev=1443156&r1=1443155&r2=1443156&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebServer.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccWebServer.java Wed Feb  6 19:33:14 2013
@@ -183,9 +183,10 @@ public class DuccWebServer {
 		DuccHandler duccHandler = new DuccHandler(this);
 		DuccHandlerLegacy duccHandlerLegacy = new DuccHandlerLegacy(this);
 		DuccHandlerJsonFormat duccHandlerJson = new DuccHandlerJsonFormat();
+		DuccHandlerProxy duccHandlerProxy = new DuccHandlerProxy();
 		DuccHandlerUserAuthentication duccHandlerUserAuthentication = new DuccHandlerUserAuthentication();
 		SessionHandler sessionHandler = new SessionHandler();
-		handlers.setHandlers(new Handler[] { sessionHandler, duccHandlerUserAuthentication, duccHandlerJson, duccHandlerLegacy, duccHandler, jspHandler, resourceHandler, new DefaultHandler() });
+		handlers.setHandlers(new Handler[] { sessionHandler, duccHandlerUserAuthentication, duccHandlerJson, duccHandlerProxy, duccHandlerLegacy, duccHandler, jspHandler, resourceHandler, new DefaultHandler() });
 		server.setHandler(handlers);
 		logger.trace(methodName, null, messages.fetch("exit"));
 	}

Added: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/TrackingInfo.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/TrackingInfo.java?rev=1443156&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/TrackingInfo.java (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/TrackingInfo.java Wed Feb  6 19:33:14 2013
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+
+package org.apache.uima.ducc.ws.server;
+
+public class TrackingInfo {
+	public long time;
+	public String user;
+}