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; +}