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 2014/11/04 19:18:38 UTC

svn commit: r1636674 - in /uima/sandbox/uima-ducc/trunk/uima-ducc-container/src: main/java/org/apache/uima/ducc/container/common/ main/java/org/apache/uima/ducc/container/jd/fsm/wi/ main/java/org/apache/uima/ducc/container/jd/mh/ main/java/org/apache/u...

Author: degenaro
Date: Tue Nov  4 18:18:38 2014
New Revision: 1636674

URL: http://svn.apache.org/r1636674
Log:
UIMA-4069 Redesign of JD toward the main goal of classpath separation for container (system) code.

WorkItem statistics: Finished min/max/avg; Running min/max

Added:
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Assertion.java   (with props)
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IRunningWorkItemStatistics.java   (with props)
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/RunningWorkItemStatistics.java   (with props)
Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionEnd.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionGet.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/mh/Dispatcher.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/mh/iface/IOperatingInfo.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/mh/impl/OperatingInfo.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IWorkItem.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IWorkItemStatistics.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/Tod.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/WorkItem.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/WorkItemStatistics.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestDispatcher.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java

Added: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Assertion.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Assertion.java?rev=1636674&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Assertion.java (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Assertion.java Tue Nov  4 18:18:38 2014
@@ -0,0 +1,34 @@
+/*
+ * 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.container.common;
+
+import org.apache.uima.ducc.container.jd.JobDriver;
+
+public class Assertion {
+
+	private static IContainerLogger logger = ContainerLogger.getLogger(JobDriver.class, IContainerLogger.Component.JD.name());
+	
+	public static void nonNegative(long value) {
+		String location = "nonNegative";
+		if(value < 0) {
+			logger.error(location, IEntityId.null_id, value);
+			throw new RuntimeException();
+		}
+	}
+}

Propchange: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Assertion.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java?rev=1636674&r1=1636673&r2=1636674&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java Tue Nov  4 18:18:38 2014
@@ -24,7 +24,11 @@ public class Standardize {
 		crFetches,
 		crTotal,
 		preemptions,
-		clockedMillisMax,
+		finishedMillisMax,
+		finishedMillisMin,
+		finishedMillisAvg,
+		runningMillisMax,
+		runningMillisMin,
 		state,
 		event,
 		curr,

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionEnd.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionEnd.java?rev=1636674&r1=1636673&r2=1636674&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionEnd.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionEnd.java Tue Nov  4 18:18:38 2014
@@ -60,6 +60,7 @@ public class ActionEnd implements IActio
 				mb.append(Standardize.Label.seqNo.get()+metaCas.getSystemKey());
 				mb.append(Standardize.Label.remote.get()+rwi.toString());
 				logger.info(location, IEntityId.null_id, mb.toString());
+				wi.resetTods();
 			}
 			else {MessageBuffer mb = new MessageBuffer();
 				mb.append("No CAS found for processing");

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionGet.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionGet.java?rev=1636674&r1=1636673&r2=1636674&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionGet.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionGet.java Tue Nov  4 18:18:38 2014
@@ -61,6 +61,7 @@ public class ActionGet implements IActio
 			IEvent event = null;
 			//
 			if(metaCas != null) {
+				wi.resetTods();
 				wi.setTodGet();
 				event = WiFsm.CAS_Available;
 				MessageBuffer mb = new MessageBuffer();

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/mh/Dispatcher.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/mh/Dispatcher.java?rev=1636674&r1=1636673&r2=1636674&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/mh/Dispatcher.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/mh/Dispatcher.java Tue Nov  4 18:18:38 2014
@@ -38,8 +38,10 @@ import org.apache.uima.ducc.container.jd
 import org.apache.uima.ducc.container.jd.mh.iface.IProcessInfo;
 import org.apache.uima.ducc.container.jd.mh.iface.remote.IRemoteWorkerIdentity;
 import org.apache.uima.ducc.container.jd.mh.impl.OperatingInfo;
+import org.apache.uima.ducc.container.jd.wi.IRunningWorkItemStatistics;
 import org.apache.uima.ducc.container.jd.wi.IWorkItem;
 import org.apache.uima.ducc.container.jd.wi.IWorkItemStatistics;
+import org.apache.uima.ducc.container.jd.wi.RunningWorkItemStatistics;
 import org.apache.uima.ducc.container.jd.wi.WorkItem;
 import org.apache.uima.ducc.container.net.iface.IMetaCas;
 import org.apache.uima.ducc.container.net.iface.IMetaCasTransaction;
@@ -61,15 +63,24 @@ public class Dispatcher {
 			CasManager cm = jdc.getCasManager();
 			CasManagerStats cms = cm.getCasManagerStats();
 			IWorkItemStatistics wis = jdc.getWorkItemStatistics();
+			IRunningWorkItemStatistics rwis = RunningWorkItemStatistics.getCurrent();
 			oi.setWorkItemCrTotal(cms.getCrTotal());
 			oi.setWorkItemCrFetches(cms.getCrGets());
 			oi.setWorkItemPreemptions(cms.getNumberOfPreemptions());
-			oi.setWorkItemClockedMillisMax(wis.getMillisMax());
+			oi.setWorkItemFinishedMillisMin(wis.getMillisMin());
+			oi.setWorkItemFinishedMillisMax(wis.getMillisMax());
+			oi.setWorkItemFinishedMillisAvg(wis.getMillisAvg());
+			oi.setWorkItemRunningMillisMin(rwis.getMillisMin());
+			oi.setWorkItemRunningMillisMax(rwis.getMillisMax());
 			MessageBuffer mb = new MessageBuffer();
 			mb.append(Standardize.Label.crTotal.get()+oi.getWorkItemCrTotal());
 			mb.append(Standardize.Label.crFetches.get()+oi.getWorkItemCrFetches());
 			mb.append(Standardize.Label.preemptions.get()+oi.getWorkItemPreemptions());
-			mb.append(Standardize.Label.clockedMillisMax.get()+oi.getWorkItemClockedMillisMax());
+			mb.append(Standardize.Label.finishedMillisMin.get()+oi.getWorkItemFinishedMillisMin());
+			mb.append(Standardize.Label.finishedMillisMax.get()+oi.getWorkItemFinishedMillisMax());
+			mb.append(Standardize.Label.finishedMillisAvg.get()+oi.getWorkItemFinishedMillisAvg());
+			mb.append(Standardize.Label.runningMillisMin.get()+oi.getWorkItemRunningMillisMin());
+			mb.append(Standardize.Label.runningMillisMax.get()+oi.getWorkItemRunningMillisMax());
 			logger.debug(location, IEntityId.null_id, mb.toString());
 			retVal = oi;
 		}

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/mh/iface/IOperatingInfo.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/mh/iface/IOperatingInfo.java?rev=1636674&r1=1636673&r2=1636674&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/mh/iface/IOperatingInfo.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/mh/iface/IOperatingInfo.java Tue Nov  4 18:18:38 2014
@@ -49,7 +49,20 @@ public interface IOperatingInfo {
 	
 	//
 	
-	public void setWorkItemClockedMillisMax(long value);
-	public long getWorkItemClockedMillisMax();
+	public void setWorkItemFinishedMillisMin(long value);
+	public long getWorkItemFinishedMillisMin();
 	
+	public void setWorkItemFinishedMillisMax(long value);
+	public long getWorkItemFinishedMillisMax();
+	
+	public void setWorkItemFinishedMillisAvg(long value);
+	public long getWorkItemFinishedMillisAvg();
+	
+	//
+	
+	public void setWorkItemRunningMillisMin(long value);
+	public long getWorkItemRunningMillisMin();
+	
+	public void setWorkItemRunningMillisMax(long value);
+	public long getWorkItemRunningMillisMax();
 }

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/mh/impl/OperatingInfo.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/mh/impl/OperatingInfo.java?rev=1636674&r1=1636673&r2=1636674&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/mh/impl/OperatingInfo.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/mh/impl/OperatingInfo.java Tue Nov  4 18:18:38 2014
@@ -32,7 +32,12 @@ public class OperatingInfo implements IO
 	private int jpUserProcessingTimeouts = 0;
 	private int jpUserProcessingErrorRetries = 0;
 	
-	private long clockedMillisMax = 0;
+	private long finishedMillisMin = 0;
+	private long finishedMillisMax = 0;
+	private long finishedMillisAvg = 0;
+	
+	private long runningMillisMin = 0;
+	private long runningMillisMax = 0;
 	
 	@Override
 	public void setWorkItemCrTotal(int value) {
@@ -125,13 +130,53 @@ public class OperatingInfo implements IO
 	}
 
 	@Override
-	public void setWorkItemClockedMillisMax(long value) {
-		clockedMillisMax = value;
+	public void setWorkItemFinishedMillisMin(long value) {
+		finishedMillisMin = value;
+	}
+
+	@Override
+	public long getWorkItemFinishedMillisMin() {
+		return finishedMillisMin;
+	}
+	
+	@Override
+	public void setWorkItemFinishedMillisMax(long value) {
+		finishedMillisMax = value;
+	}
+
+	@Override
+	public long getWorkItemFinishedMillisMax() {
+		return finishedMillisMax;
+	}
+
+	@Override
+	public void setWorkItemFinishedMillisAvg(long value) {
+		finishedMillisAvg = value;
+	}
+
+	@Override
+	public long getWorkItemFinishedMillisAvg() {
+		return finishedMillisAvg;
+	}
+
+	@Override
+	public void setWorkItemRunningMillisMin(long value) {
+		runningMillisMin = value;
+	}
+
+	@Override
+	public long getWorkItemRunningMillisMin() {
+		return runningMillisMin;
+	}
+
+	@Override
+	public void setWorkItemRunningMillisMax(long value) {
+		runningMillisMax = value;
 	}
 
 	@Override
-	public long getWorkItemClockedMillisMax() {
-		return clockedMillisMax;
+	public long getWorkItemRunningMillisMax() {
+		return runningMillisMax;
 	}
 
 }

Added: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IRunningWorkItemStatistics.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IRunningWorkItemStatistics.java?rev=1636674&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IRunningWorkItemStatistics.java (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IRunningWorkItemStatistics.java Tue Nov  4 18:18:38 2014
@@ -0,0 +1,28 @@
+/*
+ * 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.container.jd.wi;
+
+public interface IRunningWorkItemStatistics {
+	
+	public void setMillisMax(long value);
+	public long getMillisMax();
+	
+	public void setMillisMin(long value);
+	public long getMillisMin();
+}

Propchange: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IRunningWorkItemStatistics.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IWorkItem.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IWorkItem.java?rev=1636674&r1=1636673&r2=1636674&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IWorkItem.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IWorkItem.java Tue Nov  4 18:18:38 2014
@@ -29,13 +29,18 @@ public interface IWorkItem {
 	public void setFsm(IFsm value);
 	public IFsm getFsm();
 	
+	public void resetTods();
+	
 	public void setTodGet();
+	public void resetTodGet();
 	public long getTodGet();
 	
 	public void setTodAck();
+	public void resetTodAck();
 	public long getTodAck();
 	
 	public void setTodEnd();
+	public void resetTodEnd();
 	public long getTodEnd();
 	
 	public long getMillisOperating();

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IWorkItemStatistics.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IWorkItemStatistics.java?rev=1636674&r1=1636673&r2=1636674&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IWorkItemStatistics.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/IWorkItemStatistics.java Tue Nov  4 18:18:38 2014
@@ -22,4 +22,6 @@ public interface IWorkItemStatistics {
 	
 	public void ended(IWorkItem wi);
 	public long getMillisMax();
+	public long getMillisMin();
+	public long getMillisAvg();
 }

Added: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/RunningWorkItemStatistics.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/RunningWorkItemStatistics.java?rev=1636674&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/RunningWorkItemStatistics.java (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/RunningWorkItemStatistics.java Tue Nov  4 18:18:38 2014
@@ -0,0 +1,80 @@
+/*
+ * 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.container.jd.wi;
+
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.uima.ducc.container.jd.JobDriverCommon;
+import org.apache.uima.ducc.container.jd.mh.iface.remote.IRemoteWorkerIdentity;
+
+public class RunningWorkItemStatistics implements IRunningWorkItemStatistics {
+
+	private long millisMin = 0;
+	private long millisMax = 0;
+	
+	public static RunningWorkItemStatistics getCurrent() {
+		long min = Long.MAX_VALUE;
+		long max = 0;
+		ConcurrentHashMap<IRemoteWorkerIdentity, IWorkItem> map = JobDriverCommon.getInstance().getMap();
+		for(Entry<IRemoteWorkerIdentity, IWorkItem> entry : map.entrySet()) {
+			IWorkItem wi = entry.getValue();
+			long time = wi.getMillisOperating();
+			if(time > 0) {
+				if(time > max) {
+					max = time;
+				}
+				if(time < min) {
+					min = time;
+				}
+			}
+		}
+		if(min > max) {
+			min = max;
+		}
+		RunningWorkItemStatistics retVal = new RunningWorkItemStatistics(min,max);
+		return retVal;
+	}
+	
+	public RunningWorkItemStatistics(long min, long max) {
+		setMillisMin(min);
+		setMillisMax(max);
+	}
+	
+	@Override
+	public void setMillisMin(long value) {
+		millisMin = value;
+	}
+	
+	@Override
+	public long getMillisMin() {
+		return millisMin;
+	}
+	
+	@Override
+	public void setMillisMax(long value) {
+		millisMax = value;
+	}
+	
+	@Override
+	public long getMillisMax() {
+		return millisMax;
+	}
+	
+}

Propchange: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/RunningWorkItemStatistics.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/Tod.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/Tod.java?rev=1636674&r1=1636673&r2=1636674&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/Tod.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/Tod.java Tue Nov  4 18:18:38 2014
@@ -18,15 +18,21 @@
 */
 package org.apache.uima.ducc.container.jd.wi;
 
+import java.util.concurrent.atomic.AtomicLong;
+
 public class Tod {
 
-	private long tod = 0;
+	private AtomicLong tod = new AtomicLong(0);
 	
 	public void set() {
-		tod = System.currentTimeMillis();
+		tod.set(System.currentTimeMillis());
+	}
+	
+	public void reset() {
+		tod.set(0);
 	}
 	
 	public long get() {
-		return tod;
+		return tod.get();
 	}
 }

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/WorkItem.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/WorkItem.java?rev=1636674&r1=1636673&r2=1636674&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/WorkItem.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/WorkItem.java Tue Nov  4 18:18:38 2014
@@ -18,7 +18,10 @@
 */
 package org.apache.uima.ducc.container.jd.wi;
 
+import org.apache.uima.ducc.container.common.Assertion;
 import org.apache.uima.ducc.container.common.fsm.iface.IFsm;
+import org.apache.uima.ducc.container.common.fsm.iface.IState;
+import org.apache.uima.ducc.container.jd.fsm.wi.WiFsm;
 import org.apache.uima.ducc.container.net.iface.IMetaCas;
 
 public class WorkItem implements IWorkItem {
@@ -56,11 +59,23 @@ public class WorkItem implements IWorkIt
 	}
 
 	@Override
+	public void resetTods() {
+		todGet.reset();
+		todAck.reset();
+		todEnd.reset();
+	}
+	
+	@Override
 	public void setTodGet() {
 		todGet.set();
 	}
 
 	@Override
+	public void resetTodGet() {
+		todGet.reset();
+	}
+	
+	@Override
 	public long getTodGet() {
 		return todGet.get();
 	}
@@ -69,6 +84,11 @@ public class WorkItem implements IWorkIt
 	public void setTodAck() {
 		todAck.set();
 	}
+	
+	@Override
+	public void resetTodAck() {
+		todAck.reset();
+	}
 
 	@Override
 	public long getTodAck() {
@@ -81,6 +101,11 @@ public class WorkItem implements IWorkIt
 	}
 
 	@Override
+	public void resetTodEnd() {
+		todEnd.reset();
+	}
+
+	@Override
 	public long getTodEnd() {
 		return todEnd.get();
 	}
@@ -92,10 +117,17 @@ public class WorkItem implements IWorkIt
 		long end = getTodEnd();
 		if(start > 0) {
 			if(end == 0) {
-				end = System.currentTimeMillis();
+				IState state = fsm.getStateCurrent();
+				if(state.getName().equals(WiFsm.CAS_Active.getName())) {
+					end = System.currentTimeMillis();
+				}
+				else {
+					end = start;
+				}
 			}
 			retVal = end - start;
 		}
+		Assertion.nonNegative(retVal);
 		return retVal;
 	}
 }

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/WorkItemStatistics.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/WorkItemStatistics.java?rev=1636674&r1=1636673&r2=1636674&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/WorkItemStatistics.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/wi/WorkItemStatistics.java Tue Nov  4 18:18:38 2014
@@ -18,19 +18,46 @@
 */
 package org.apache.uima.ducc.container.jd.wi;
 
+import org.apache.uima.ducc.container.common.Assertion;
 import org.apache.uima.ducc.container.common.SynchronizedStats;
 
 public class WorkItemStatistics implements IWorkItemStatistics {
 
 	private SynchronizedStats stats = new SynchronizedStats();
 	
+	private long mintime = 0;
+	
+	@Override
 	public void ended(IWorkItem wi) {
 		long time = wi.getMillisOperating();
+		Assertion.nonNegative(time);
+		if(time < mintime) {
+			time = mintime;
+		}
 		stats.addValue(time);
 	}
 	
+	@Override
+	public long getMillisMin() {
+		double stat = stats.getMin();
+		if(stat == Double.MAX_VALUE) {
+			stat = 0;
+		};
+		long value = (long) stat;
+		return value;
+	}
+	
+	@Override
 	public long getMillisMax() {
-		long value = (long) stats.getMax();
+		double stat = stats.getMax();
+		long value = (long) stat;
+		return value;
+	}
+	
+	@Override
+	public long getMillisAvg() {
+		double stat = stats.getMean();
+		long value = (long) stat;
 		return value;
 	}
 }

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestDispatcher.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestDispatcher.java?rev=1636674&r1=1636673&r2=1636674&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestDispatcher.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestDispatcher.java Tue Nov  4 18:18:38 2014
@@ -263,6 +263,12 @@ public class TestDispatcher {
 				randomPreempt(dispatcher,ti);
 				transAck(dispatcher,ti.getNode(),ti.getPid(),ti.getTid(),casNo);
 				randomPreempt(dispatcher,ti);
+				try {
+					Thread.sleep(20);
+				}
+				catch(Exception e) {
+				}
+				dispatcher.handleGetOperatingInfo();
 				transEnd(dispatcher,ti.getNode(),ti.getPid(),ti.getTid(),casNo);
 				randomPreempt(dispatcher,ti);
 				casNo--;
@@ -279,6 +285,12 @@ public class TestDispatcher {
 			asExpected("CASes fetched count == 100");
 			assertTrue(oi.getWorkItemPreemptions() == expectedPremptionsTest03);
 			asExpected("CASes preempted count == "+expectedPremptionsTest03);
+			try {
+				Thread.sleep(50);
+			}
+			catch(Exception e) {
+			}
+			dispatcher.handleGetOperatingInfo();
 		}
 		catch(Exception e) {
 			e.printStackTrace();

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java?rev=1636674&r1=1636673&r2=1636674&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java Tue Nov  4 18:18:38 2014
@@ -462,6 +462,16 @@ public class TestSuite {
 		assertTrue(oi.getWorkItemUserProcessingErrorRetries() == 75);
 		oi.setWorkItemUserProcessingTimeouts(80);
 		assertTrue(oi.getWorkItemUserProcessingTimeouts() == 80);
+		oi.setWorkItemFinishedMillisMin(1000);
+		assertTrue(oi.getWorkItemFinishedMillisMin() == 1000);
+		oi.setWorkItemFinishedMillisMax(2000);
+		assertTrue(oi.getWorkItemFinishedMillisMax() == 2000);
+		oi.setWorkItemFinishedMillisAvg(1500);
+		assertTrue(oi.getWorkItemFinishedMillisAvg() == 1500);
+		oi.setWorkItemRunningMillisMin(1001);
+		assertTrue(oi.getWorkItemRunningMillisMin() == 1001);
+		oi.setWorkItemRunningMillisMax(2001);
+		assertTrue(oi.getWorkItemRunningMillisMax() == 2001);
 	}
 
 }