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 2017/10/09 18:07:23 UTC
svn commit: r1811588 - in
/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server:
DuccAbstractHandler.java DuccHandler.java DuccHandlerJsonFormat.java
Helper.java JsonHelper.java
Author: degenaro
Date: Mon Oct 9 18:07:22 2017
New Revision: 1811588
URL: http://svn.apache.org/viewvc?rev=1811588&view=rev
Log:
UIMA-5604 DUCC Web Server (WS) Job Details page Processes tab in Json format
Added:
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/JsonHelper.java (with props)
Modified:
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java
Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java?rev=1811588&r1=1811587&r2=1811588&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccAbstractHandler.java Mon Oct 9 18:07:22 2017
@@ -75,7 +75,7 @@ public abstract class DuccAbstractHandle
public static DuccWebAdministrators duccWebAdministrators = DuccWebAdministrators.getInstance();
public static DuccWebSessionManager duccWebSessionManager = DuccWebSessionManager.getInstance();
- public final String notAvailable = "N/A";
+ public final String notAvailable = Helper.notAvailable;
public final String inc = "INC";
public final String duccUimaInitializationReport = "uima-initialization-report.html";
@@ -261,27 +261,6 @@ public abstract class DuccAbstractHandle
return retVal;
}
- public String getDuration(DuccId jobId, String millisV2, String millisV1, Precision precision) {
- String methodName = "getDuration";
- String retVal = "";
- try {
- long d2 = Long.parseLong(millisV2);
- long d1 = Long.parseLong(millisV1);
- long diff = d2 - d1;
- if(diff < 0) {
- diff = 0;
- }
- retVal = FormatHelper.duration(diff, precision);
- }
- catch(Exception e) {
- duccLogger.trace(methodName, null, "no worries", e);
- }
- catch(Throwable t) {
- duccLogger.trace(methodName, null, "no worries", t);
- }
- return retVal;
- }
-
public String getTimeStamp(HttpServletRequest request, DuccId jobId, String millis) {
return getTimeStamp(DuccCookies.getDateStyle(request),getTimeStamp(jobId, millis));
}
@@ -615,7 +594,7 @@ public abstract class DuccAbstractHandle
String v2 = dw.getStandardInfo().getDateOfCompletion();
String v1 = dw.getStandardInfo().getDateOfSubmission();
duccLogger.trace(methodName, null, "v2:"+v2+" v1:"+v1);
- retVal = getDuration(dw.getDuccId(),v2,v1,precision);
+ retVal = Helper.getDuration(dw.getDuccId(),v2,v1,precision);
}
catch(Exception e) {
duccLogger.trace(methodName, null, "no worries", e);
@@ -633,7 +612,7 @@ public abstract class DuccAbstractHandle
String v2 = ""+now;
String v1 = dw.getStandardInfo().getDateOfSubmission();
duccLogger.trace(methodName, null, "v2:"+v2+" v1:"+v1);
- retVal = getDuration(dw.getDuccId(),v2,v1,precision);
+ retVal = Helper.getDuration(dw.getDuccId(),v2,v1,precision);
}
catch(Exception e) {
duccLogger.trace(methodName, null, "no worries", e);
Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java?rev=1811588&r1=1811587&r2=1811588&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java Mon Oct 9 18:07:22 2017
@@ -28,7 +28,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -36,7 +35,6 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;
-import java.util.TimeZone;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentSkipListMap;
@@ -66,7 +64,6 @@ import org.apache.uima.ducc.common.utils
import org.apache.uima.ducc.common.utils.DuccPropertiesResolver;
import org.apache.uima.ducc.common.utils.DuccSchedulerClasses;
import org.apache.uima.ducc.common.utils.IDuccLoggerComponents;
-import org.apache.uima.ducc.common.utils.SynchronizedSimpleDateFormat;
import org.apache.uima.ducc.common.utils.TimeStamp;
import org.apache.uima.ducc.common.utils.Version;
import org.apache.uima.ducc.common.utils.id.DuccId;
@@ -79,7 +76,6 @@ import org.apache.uima.ducc.transport.ev
import org.apache.uima.ducc.transport.event.common.IDuccProcess;
import org.apache.uima.ducc.transport.event.common.IDuccProcess.ReasonForStoppingProcess;
import org.apache.uima.ducc.transport.event.common.IDuccProcessMap;
-import org.apache.uima.ducc.transport.event.common.IDuccProcessWorkItems;
import org.apache.uima.ducc.transport.event.common.IDuccSchedulingInfo;
import org.apache.uima.ducc.transport.event.common.IDuccStandardInfo;
import org.apache.uima.ducc.transport.event.common.IDuccState.JobState;
@@ -87,9 +83,6 @@ import org.apache.uima.ducc.transport.ev
import org.apache.uima.ducc.transport.event.common.IDuccWork;
import org.apache.uima.ducc.transport.event.common.IDuccWorkJob;
import org.apache.uima.ducc.transport.event.common.IDuccWorkMap;
-import org.apache.uima.ducc.transport.event.common.IProcessState.ProcessState;
-import org.apache.uima.ducc.transport.event.common.IResourceState.ProcessDeallocationType;
-import org.apache.uima.ducc.transport.event.common.TimeWindow;
import org.apache.uima.ducc.ws.DuccDaemonsData;
import org.apache.uima.ducc.ws.DuccData;
import org.apache.uima.ducc.ws.DuccDataHelper;
@@ -107,6 +100,7 @@ import org.apache.uima.ducc.ws.registry.
import org.apache.uima.ducc.ws.registry.ServicesRegistryMapPayload;
import org.apache.uima.ducc.ws.registry.sort.IServiceAdapter;
import org.apache.uima.ducc.ws.registry.sort.ServicesSortCache;
+import org.apache.uima.ducc.ws.server.Helper.AllocationType;
import org.apache.uima.ducc.ws.server.IWebMonitor.MonitorType;
import org.apache.uima.ducc.ws.sort.JobDetailsProcesses;
import org.apache.uima.ducc.ws.types.NodeId;
@@ -114,8 +108,6 @@ import org.apache.uima.ducc.ws.utils.For
import org.apache.uima.ducc.ws.utils.FormatHelper.Precision;
import org.apache.uima.ducc.ws.utils.HandlersHelper;
import org.apache.uima.ducc.ws.utils.HandlersHelper.ServiceAuthorization;
-import org.apache.uima.ducc.ws.utils.LinuxSignals;
-import org.apache.uima.ducc.ws.utils.LinuxSignals.Signal;
import org.apache.uima.ducc.ws.utils.UrlHelper;
import org.apache.uima.ducc.ws.utils.alien.AlienWorkItemStateReader;
import org.apache.uima.ducc.ws.utils.alien.EffectiveUser;
@@ -138,8 +130,7 @@ public class DuccHandler extends DuccAbs
private final Set<String> hideableKeys = new HashSet<String>(Arrays.asList(n));
private enum DetailsType { Job, Reservation, Service };
- private enum AllocationType { JD, MR, SPC, SPU, UIMA };
- private enum LogType { POP, UIMA };
+
private DuccAuthenticator duccAuthenticator = DuccAuthenticator.getInstance();
@@ -384,49 +375,10 @@ public class DuccHandler extends DuccAbs
*/
private String buildLogFileName(IDuccWorkJob job, IDuccProcess process, AllocationType type) {
- String retVal = "";
- if(process != null) {
- switch(type) {
- case UIMA:
- retVal = job.getDuccId().getFriendly()+"-"+LogType.UIMA.name()+"-"+process.getNodeIdentity().getName()+"-"+process.getPID()+".log";
- break;
- case MR:
- retVal = job.getDuccId().getFriendly()+"-"+LogType.POP.name()+"-"+process.getNodeIdentity().getName()+"-"+process.getPID()+".log";
- break;
- case SPU:
- retVal = job.getDuccId().getFriendly()+"-"+LogType.UIMA.name()+"-"+process.getNodeIdentity().getName()+"-"+process.getPID()+".log";
- break;
- case SPC:
- retVal = job.getDuccId().getFriendly()+"-"+LogType.POP.name()+"-"+process.getNodeIdentity().getName()+"-"+process.getPID()+".log";
- break;
- case JD:
- retVal = "jd.out.log";
- // <UIMA-3802>
- // {jobid}-JD-{node}-{PID}.log
- String node = process.getNodeIdentity().getName();
- String pid = process.getPID();
- retVal = job.getDuccId()+"-"+"JD"+"-"+node+"-"+pid+".log";
- // </UIMA-3802>
- break;
- }
- }
- return retVal;
- }
-
- private String chomp(String leading, String whole) {
- String retVal = whole;
- while((retVal.length() > leading.length()) && (retVal.startsWith(leading))) {
- retVal = retVal.replaceFirst(leading, "");
- }
- /*
- if(retVal.equals("00:00")) {
- retVal = "0";
- }
- */
- return retVal;
+ return Helper.getLogFileName(job, process, type);
}
- DecimalFormat sizeFormatter = new DecimalFormat("##0.00");
+ private DecimalFormat sizeFormatter = new DecimalFormat("##0.00");
private boolean fileExists(String fileName) {
String location = "fileExists";
@@ -442,17 +394,7 @@ public class DuccHandler extends DuccAbs
}
private String normalizeFileSize(long fileSize) {
- String location = "getFileSize";
- String retVal = "0";
- try {
- double size = fileSize;
- size = size / Constants.MB;
- retVal = sizeFormatter.format(size);
- }
- catch(Exception e) {
- duccLogger.warn(location,jobid,e);
- }
- return retVal;
+ return Helper.normalize(fileSize);
}
private String getId(IDuccWorkJob job, IDuccProcess process) {
@@ -480,89 +422,19 @@ public class DuccHandler extends DuccAbs
}
private String getPid(IDuccWorkJob job, IDuccProcess process) {
- StringBuffer sb = new StringBuffer();
- if(process != null) {
- String pid = process.getPID();
- if(pid != null) {
- sb.append(pid);
- }
- }
- return sb.toString();
+ return Helper.getPid(job, process);
}
private String getStateScheduler(IDuccWorkJob job, IDuccProcess process) {
- StringBuffer sb = new StringBuffer();
- if(process != null) {
- sb.append(process.getResourceState());
- }
- return sb.toString();
- }
-
- private String getRmReason(IDuccWorkJob job) {
- StringBuffer sb = new StringBuffer();
- String rmReason = job.getRmReason();
- if(rmReason != null) {
- sb.append("<span>");
- sb.append(rmReason);
- sb.append("</span>");
- }
- return sb.toString();
+ return Helper.getSchedulerState(job, process);
}
- private String getProcessReason(IDuccProcess process) {
- StringBuffer sb = new StringBuffer();
- if(process != null) {
- switch(process.getProcessState()) {
- case Starting:
- case Started:
- case Initializing:
- case Running:
- break;
- default:
- ProcessDeallocationType deallocationType = process.getProcessDeallocationType();
- switch(deallocationType) {
- case Undefined:
- break;
- default:
- sb.append(process.getProcessDeallocationType());
- break;
- }
- break;
- }
- }
- return sb.toString();
- }
private String getReasonScheduler(IDuccWorkJob job, IDuccProcess process) {
- StringBuffer sb = new StringBuffer();
- if(job.isOperational()) {
- switch(job.getJobState()) {
- case WaitingForResources:
- sb.append(getRmReason(job));
- break;
- default:
- sb.append(getProcessReason(process));
- break;
- }
- }
- else {
- sb.append(getProcessReason(process));
- }
- return sb.toString();
+ return Helper.getSchedulerReason(job, process);
}
private String getStateAgent(IDuccWorkJob job, IDuccProcess process) {
- StringBuffer sb = new StringBuffer();
- if(process != null) {
- ProcessState ps = process.getProcessState();
- switch(ps) {
- case Undefined:
- break;
- default:
- sb.append(ps);
- break;
- }
- }
- return sb.toString();
+ return Helper.getAgentState(job, process);
}
private String getReasonAgent(IDuccWorkJob job, IDuccProcess process) {
@@ -586,298 +458,59 @@ public class DuccHandler extends DuccAbs
}
private String getExit(IDuccWorkJob job, IDuccProcess process) {
- StringBuffer sb = new StringBuffer();
- if(process != null) {
- boolean suppressExitCode = false;
- if(!suppressExitCode) {
- switch(process.getProcessState()) {
- case LaunchFailed:
- case Stopped:
- case Failed:
- case FailedInitialization:
- case InitializationTimeout:
- case Killed:
- int code = process.getProcessExitCode();
- if(LinuxSignals.isSignal(code)) {
- Signal signal = LinuxSignals.lookup(code);
- if(signal != null) {
- sb.append(signal.name()+"("+signal.number()+")");
- }
- else {
- sb.append("UnknownSignal"+"("+LinuxSignals.getValue(code)+")");
- }
- }
- else {
- sb.append("ExitCode"+"="+code);
- }
- break;
- default:
- break;
- }
- }
- }
- return sb.toString();
+ return Helper.getExit(job, process);
}
- private String getTimeInit(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
- String location = "getTimeInit";
- StringBuffer sb = new StringBuffer();
- if(process != null) {
- switch(sType) {
- case MR:
- break;
- default:
- StringBuffer loadme = new StringBuffer();
- String initTime = "00";
- String isp0 = "<span>";
- String isp1 = "</span>";
- try {
- TimeWindow t = (TimeWindow) process.getTimeWindowInit();
- if(t != null) {
- long now = System.currentTimeMillis();
- String tS = t.getStart(""+now);
- String tE = t.getEnd(""+now);
- initTime = getDuration(jobid,tE,tS,Precision.Whole);
- if(t.isEstimated()) {
- isp0 = "<span class=\"health_green\">";
- }
- else {
- isp0 = "<span class=\"health_black\">";
- }
- }
- boolean cluetips_disabled = true;
- if(cluetips_disabled) {
- if(!initTime.equals("00")) {
- String p_idJob = pname_idJob+"="+job.getDuccId().getFriendly();
- String p_idPro = pname_idPro+"="+process.getDuccId().getFriendly();
- initTime = "<a href=\""+duccUimaInitializationReport+"?"+p_idJob+"&"+p_idPro+"\" onclick=\"var newWin = window.open(this.href,'child','height=600,width=475,scrollbars'); newWin.focus(); return false;\">"+initTime+"</a>";
- loadme.append("");
- }
- }
- else {
- List<IUimaPipelineAEComponent> upcList = process.getUimaPipelineComponents();
- if(upcList != null) {
- if(!upcList.isEmpty()) {
- String id = ""+process.getDuccId().getFriendly();
- initTime = "<a class=\"classLoad\" title=\""+id+"\" href=\"#loadme"+id+"\" rel=\"#loadme"+id+"\">"+initTime+"</a>";
- loadme.append("<div id=\"loadme"+id+"\">");
- loadme.append("<table>");
- loadme.append("<tr>");
- String ch1 = "Name";
- String ch2 = "State";
- String ch3 = "Time";
- loadme.append("<td>"+"<b>"+ch1+"</b>");
- loadme.append("<td>"+"<b>"+ch2+"</b>");
- loadme.append("<td>"+"<b>"+ch3+"</b>");
- Iterator<IUimaPipelineAEComponent> upcIterator = upcList.iterator();
- while(upcIterator.hasNext()) {
- IUimaPipelineAEComponent upc = upcIterator.next();
- String iName = upc.getAeName();
- String iState = upc.getAeState().toString();
- String iTime = FormatHelper.duration(upc.getInitializationTime(),Precision.Whole);
- loadme.append("<tr>");
- loadme.append("<td>"+iName);
- loadme.append("<td>"+iState);
- loadme.append("<td>"+iTime);
- }
- loadme.append("</table>");
- loadme.append("</div>");
- }
- }
- }
- }
- catch(Exception e) {
- duccLogger.trace(location, jobid, "no worries", e);
- }
- catch(Throwable t) {
- duccLogger.trace(location, jobid, "no worries", t);
- }
- sb.append(isp0);
- sb.append(loadme);
- sb.append(initTime);
- sb.append(isp1);
- break;
- }
- }
- return sb.toString();
+ private String getTimeInit(IDuccWorkJob job, IDuccProcess process, AllocationType type) {
+ return Helper.getTimeInit(job, process, type);
}
- private String getTimeRun(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
- String location = "getTimeRun";
- StringBuffer sb = new StringBuffer();
- if(process != null) {
- String runTime = "00";
- String rsp0 = "<span>";
- String rsp1 = "</span>";
- // <UIMA-3351>
- boolean useTimeRun = true;
- switch(sType) {
- case SPC:
- break;
- case SPU:
- break;
- case MR:
- break;
- case JD:
- break;
- case UIMA:
- if(!process.isAssignedWork()) {
- useTimeRun = false;
- }
- break;
- default:
- break;
- }
- // </UIMA-3351>
- if(useTimeRun) {
- try {
- TimeWindow t = (TimeWindow) process.getTimeWindowRun();
- if(t != null) {
- long now = System.currentTimeMillis();
- String tS = t.getStart(""+now);
- String tE = t.getEnd(""+now);
- runTime = getDuration(jobid,tE,tS,Precision.Whole);
- if(t.isEstimated()) {
- rsp0 = "<span class=\"health_green\">";
- }
- else {
- rsp0 = "<span class=\"health_black\">";
- }
- }
- }
- catch(Exception e) {
- duccLogger.trace(location, jobid, "no worries", e);
- }
- catch(Throwable t) {
- duccLogger.trace(location, jobid, "no worries", t);
- }
- }
- sb.append(rsp0);
- sb.append(runTime);
- sb.append(rsp1);
- }
- return sb.toString();
+ private boolean isTimeInitEstimated(IDuccWorkJob job, IDuccProcess process, AllocationType type) {
+ return Helper.isTimeInitEstimated(job, process, type);
+ }
+
+ private String getTimeRun(IDuccWorkJob job, IDuccProcess process, AllocationType type) {
+ return Helper.getTimeRun(job, process, type);
}
- private SynchronizedSimpleDateFormat dateFormat = new SynchronizedSimpleDateFormat("HH:mm:ss");
-
- private String getTimeGC(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
- StringBuffer sb = new StringBuffer();
- if(process != null) {
- switch(sType) {
- case MR:
- break;
- default:
- long timeGC = 0;
- try {
- timeGC = process.getGarbageCollectionStats().getCollectionTime();
- }
- catch(Exception e) {
- }
- dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
- String displayGC = dateFormat.format(new Date(timeGC));
- displayGC = chomp("00:", displayGC);
- sb.append(displayGC);
- break;
- }
- }
- return sb.toString();
+ private boolean isTimeRunEstimated(IDuccWorkJob job, IDuccProcess process, AllocationType type) {
+ return Helper.isTimeRunEstimated(job, process, type);
+ }
+
+ private String getTimeGC(IDuccWorkJob job, IDuccProcess process, AllocationType type) {
+ return Helper.getTimeGC(job, process, type);
}
private String getPgIn(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
- StringBuffer sb = new StringBuffer();
- if(process != null) {
- switch(sType) {
- case MR:
- default:
- long faults = 0;
- try {
- faults = process.getMajorFaults();
- }
- catch(Exception e) {
- }
- if(faults < 0) {
- sb.append("<span class=\"health_black\""+">");
- sb.append(notAvailable);
- sb.append("</span>");
- }
- else {
- double swap = process.getSwapUsageMax();
- if((swap * faults) > 0) {
- sb.append("<span class=\"health_red\""+">");
- }
- else {
- sb.append("<span class=\"health_black\""+">");
- }
- sb.append(faults);
- sb.append("</span>");
- }
- break;
- }
- }
- return sb.toString();
+ return Helper.getPgIn(job, process, sType);
}
private DecimalFormat formatter = new DecimalFormat("##0.0");
private String getSwap(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
StringBuffer sb = new StringBuffer();
- if(process != null) {
- switch(sType) {
- case MR:
- default:
- if(!process.isActive()) {
- double swap = process.getSwapUsageMax();
- if(swap < 0) {
- sb.append("<span class=\"health_black\""+">");
- sb.append(notAvailable);
- sb.append("</span>");
- }
- else {
- swap = swap/Constants.GB;
- String displaySwap = formatter.format(swap);
- if(swap > 0) {
- sb.append("<span class=\"health_red\""+">");
- }
- else {
- sb.append("<span class=\"health_black\""+">");
- }
- sb.append(displaySwap);
- sb.append("</span>");
- }
- }
- else {
- double swap = process.getSwapUsage();
- if(swap < 0) {
- sb.append("<span class=\"health_black\""+">");
- sb.append(notAvailable);
- sb.append("</span>");
- }
- else {
- swap = swap/Constants.GB;
- String displaySwap = formatter.format(swap);
- double swapMax = process.getSwapUsageMax();
- swapMax = swapMax/Constants.GB;
- String displaySwapMax = formatter.format(swapMax);
- sb.append("<span title=\"max="+displaySwapMax+"\" align=\"right\" "+">");
- if(swap > 0) {
- sb.append("<span class=\"health_red\""+">");
- }
- else {
- sb.append("<span class=\"health_black\""+">");
- }
- sb.append(displaySwap);
- sb.append("</span>");
- }
- }
- break;
- }
+ boolean swapping = Helper.isSwapping(job, process, sType);
+ String swap = Helper.getSwap(job, process, sType);
+ String swapMax = Helper.getSwapMax(job, process, sType);
+ if(swapMax != null) {
+ sb.append("<span title=\"max="+swapMax+"\" align=\"right\" "+">");
+ }
+ if(swapping) {
+ sb.append("<span class=\"health_red\""+">");
+ }
+ else {
+ sb.append("<span class=\"health_black\""+">");
+ }
+ sb.append(swap);
+ sb.append("</span>");
+ if(swapMax != null) {
+ sb.append("</span>");
}
return sb.toString();
}
-
+
// legacy
- private String getPctCpuV0(IDuccWorkJob job, IDuccProcess process) {
+ private String getPctCpuV0(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
String retVal = "";
boolean rt = false;
double pctCPU_overall = 0;
@@ -932,22 +565,9 @@ public class DuccHandler extends DuccAbs
return retVal;
}
- private String formatPctCpu(double pctCpu) {
- String retVal = "";
- if(pctCpu < 0) {
- retVal = "N/A";
- }
- else {
- retVal = formatter.format(pctCpu);
- }
- return retVal;
- }
-
- private String getPctCpuV1(IDuccWorkJob job, IDuccProcess process) {
- double pctCPU_overall = process.getCpuTime();
- double pctCPU_current = process.getCurrentCPU();
- String fmtCPU_overall = formatPctCpu(pctCPU_overall);
- String fmtCPU_current = formatPctCpu(pctCPU_current);
+ private String getPctCpuV1(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ String fmtCPU_overall = Helper.getPctCpuOverall(job, process, sType);
+ String fmtCPU_current = Helper.getPctCpuCurrent(job, process,sType);
StringBuffer sb = new StringBuffer();
switch(process.getProcessState()) {
case Running:
@@ -966,16 +586,16 @@ public class DuccHandler extends DuccAbs
return retVal;
}
- private String getPctCpu(IDuccWorkJob job, IDuccProcess process) {
+ private String getPctCpu(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
String location = "getPctCpu";
String retVal = "";
if(process != null) {
try {
if(process.getDataVersion() < 1) {
- retVal = getPctCpuV0(job, process);
+ retVal = getPctCpuV0(job, process, sType);
}
else {
- retVal = getPctCpuV1(job, process);
+ retVal = getPctCpuV1(job, process, sType);
}
}
catch(Exception e) {
@@ -985,41 +605,17 @@ public class DuccHandler extends DuccAbs
return retVal;
}
- private String getRSS(IDuccWorkJob job, IDuccProcess process) {
+ private String getRSS(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
StringBuffer sb = new StringBuffer();
- if(process != null) {
- if(process.isComplete()) {
- double rss = process.getResidentMemoryMax();
- if(rss < 0) {
- sb.append("<span class=\"health_black\""+">");
- sb.append(notAvailable);
- sb.append("</span>");
- }
- else {
- rss = rss/Constants.GB;
- String displayRss = formatter.format(rss);
- sb.append(displayRss);
- }
-
- }
- else {
- double rss = process.getResidentMemory();
- if(rss < 0) {
- sb.append("<span class=\"health_black\""+">");
- sb.append(notAvailable);
- sb.append("</span>");
- }
- else {
- rss = rss/Constants.GB;
- String displayRss = formatter.format(rss);
- double rssMax = process.getResidentMemoryMax();
- rssMax = rssMax/Constants.GB;
- String displayRssMax = formatter.format(rssMax);
- sb.append("<span title=\"max="+displayRssMax+"\" align=\"right\" "+">");
- sb.append(displayRss);
- sb.append("</span>");
- }
- }
+ String rss = Helper.getRss(job, process, sType);
+ String rssMax = Helper.getRssMax(job, process, sType);
+ if(rssMax != null) {
+ sb.append("<span title=\"max="+rssMax+"\" align=\"right\" "+">");
+ sb.append(rss);
+ sb.append("</span>");
+ }
+ else {
+ sb.append(rss);
}
return sb.toString();
}
@@ -1059,17 +655,8 @@ public class DuccHandler extends DuccAbs
String pname_idJob = "idJob";
String pname_idPro = "idPro";
- private long getLogFileSize(String key, Map<String, FileInfo> fileInfoMap) {
- long retVal = 0;
- if(key != null) {
- if(fileInfoMap != null) {
- FileInfo fileInfo = fileInfoMap.get(key);
- if(fileInfo != null) {
- retVal = fileInfo.length;
- }
- }
- }
- return retVal;
+ private long getLogFileSize(String filename, Map<String, FileInfo> fileInfoMap) {
+ return Helper.getFileSize(filename, fileInfoMap);
}
private void buildJobProcessListEntry(EffectiveUser eu, StringBuffer pb, DuccWorkJob job, IDuccProcess process, DetailsType dType, AllocationType sType, int counter, Map<String, FileInfo> fileInfoMap) {
@@ -1158,17 +745,14 @@ public class DuccHandler extends DuccAbs
// Log Size (in MB)
index++; // jp.02
cbList[index].append("<td align=\"right\">");
- String fileSize = normalizeFileSize(getLogFileSize(file_name, fileInfoMap));
+ String fileSize = Helper.getLogFileSize(job, process, log, fileInfoMap);
cbList[index].append(fileSize);
logAppend(index,"fileSize",fileSize);
cbList[index].append("</td>");
// Hostname
index++; // jp.03
cbList[index].append("<td>");
- String hostname = "";
- if(process != null) {
- hostname = process.getNodeIdentity().getName();
- }
+ String hostname = Helper.getHostname(job, process);
cbList[index].append(hostname);
logAppend(index,"hostname",hostname);
cbList[index].append("</td>");
@@ -1246,7 +830,13 @@ public class DuccHandler extends DuccAbs
default:
index++; // jp.11
cbList[index].append("<td align=\"right\">");
- String timeInit = getTimeInit(job,process,sType);
+ String timeInitPrefix = "<span class=\"health_black\">";
+ if(isTimeInitEstimated(job, process, sType)) {
+ timeInitPrefix = "<span class=\"health_green\">";
+ }
+ String timeInitBody = getTimeInit(job,process,sType);
+ String timeInitSuffix = "</span>";
+ String timeInit = timeInitPrefix+timeInitBody+timeInitSuffix;
cbList[index].append(timeInit);
logAppend(index,"timeInit",timeInit);
cbList[index].append("</td>");
@@ -1255,7 +845,13 @@ public class DuccHandler extends DuccAbs
// Time:run
index++; // jp.12
cbList[index].append("<td align=\"right\">");
- String timeRun = getTimeRun(job,process,sType);
+ String timeRunPrefix = "<span class=\"health_black\">";
+ if(isTimeRunEstimated(job, process, sType)) {
+ timeRunPrefix = "<span class=\"health_green\">";
+ }
+ String timeRunBody = getTimeRun(job,process,sType);
+ String timeRunSuffix = "</span>";
+ String timeRun = timeRunPrefix+timeRunBody+timeRunSuffix;
cbList[index].append(timeRun);
logAppend(index,"timeRun",timeRun);
cbList[index].append("</td>");
@@ -1299,14 +895,14 @@ public class DuccHandler extends DuccAbs
// %cpu
index++; // jp.16
cbList[index].append("<td align=\"right\">");
- String pctCPU = getPctCpu(job,process);
+ String pctCPU = getPctCpu(job,process,sType);
cbList[index].append(pctCPU);
logAppend(index,"%cpu",pctCPU);
cbList[index].append("</td>");
// rss
index++; // jp.17
cbList[index].append("<td align=\"right\">");
- String rss = getRSS(job,process);
+ String rss = getRSS(job,process,sType);
cbList[index].append(rss);
logAppend(index,"rss",rss);
cbList[index].append("</td>");
@@ -1322,60 +918,36 @@ public class DuccHandler extends DuccAbs
// Time:avg
index++; // jp.18
String timeAvg = "";
- IDuccProcessWorkItems pwi = process.getProcessWorkItems();
cbList[index].append("<td align=\"right\">");
- switch(sType) {
- case JD:
- if(pwi != null) {
- timeAvg = ""+(job.getWiMillisAvg()/1000);
- }
- break;
- default:
- if(pwi != null) {
- timeAvg = ""+pwi.getSecsAvg();
- }
- break;
- }
+ timeAvg = Helper.getWiTimeAvg(job, process, sType);
cbList[index].append(timeAvg);
logAppend(index,"timeAvg",timeAvg);
cbList[index].append("</td>");
// Time:max
index++; // jp.19
cbList[index].append("<td align=\"right\">");
- String timeMax = "";
- if(pwi != null) {
- timeMax = ""+pwi.getSecsMax();
- }
+ String timeMax = Helper.getWiTimeMax(job, process, sType);
cbList[index].append(timeMax);
logAppend(index,"timeMax",timeMax);
cbList[index].append("</td>");
// Time:min
index++; // jp.20
cbList[index].append("<td align=\"right\">");
- String timeMin = "";
- if(pwi != null) {
- timeMin = ""+pwi.getSecsMin();
- }
+ String timeMin = Helper.getWiTimeMax(job, process, sType);
cbList[index].append(timeMin);
logAppend(index,"timeMin",timeMin);
cbList[index].append("</td>");
// Done
index++; // jp.21
cbList[index].append("<td align=\"right\">");
- String done = "";
- if(pwi != null) {
- done = ""+pwi.getCountDone();
- }
+ String done = Helper.getWiDone(job, process, sType);
cbList[index].append(done);
logAppend(index,"done",done);
cbList[index].append("</td>");
// Error
index++; // jp.22
cbList[index].append("<td align=\"right\">");
- String error = "";
- if(pwi != null) {
- error = ""+pwi.getCountError();
- }
+ String error = Helper.getWiError(job, process, sType);
cbList[index].append(error);
logAppend(index,"error",error);
cbList[index].append("</td>");
@@ -1384,15 +956,7 @@ public class DuccHandler extends DuccAbs
case Job:
index++; // jp.23
cbList[index].append("<td align=\"right\">");
- String dispatch = "";
- if(pwi != null) {
- if(job.isCompleted()) {
- dispatch = "0";
- }
- else {
- dispatch = ""+pwi.getCountDispatch();
- }
- }
+ String dispatch = Helper.getWiDispatch(job, process, sType);
cbList[index].append(dispatch);
logAppend(index,"dispatch",dispatch);
cbList[index].append("</td>");
@@ -1403,20 +967,14 @@ public class DuccHandler extends DuccAbs
// Retry
index++; // jp.24
cbList[index].append("<td align=\"right\">");
- String retry = "";
- if(pwi != null) {
- retry = ""+pwi.getCountRetry();
- }
+ String retry = Helper.getWiRetry(job, process, sType);
cbList[index].append(retry);
logAppend(index,"retry",retry);
cbList[index].append("</td>");
// Preempt
index++; // jp.25
cbList[index].append("<td align=\"right\">");
- String preempt = "";
- if(pwi != null) {
- preempt = ""+pwi.getCountPreempt();
- }
+ String preempt = Helper.getWiPreempt(job, process, sType);
cbList[index].append(preempt);
logAppend(index,"exit",exit);
cbList[index].append("</td>");
@@ -1648,15 +1206,7 @@ public class DuccHandler extends DuccAbs
}
private Map<String, FileInfo> getFileInfoMap(EffectiveUser eu, String directory) {
- String location = "";
- Map<String, FileInfo> map = new TreeMap<String, FileInfo>();
- try {
- map = OsProxy.getFilesInDirectory(eu, directory);
- }
- catch(Throwable t) {
- duccLogger.error(location, jobid, t);
- }
- return map;
+ return Helper.getFileInfoMap(eu, directory);
}
private void handleDuccServletJobProcessesData(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response)
Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java?rev=1811588&r1=1811587&r2=1811588&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java Mon Oct 9 18:07:22 2017
@@ -63,6 +63,7 @@ import org.apache.uima.ducc.transport.ev
import org.apache.uima.ducc.transport.event.common.IDuccState.ReservationState;
import org.apache.uima.ducc.transport.event.common.IDuccWork;
import org.apache.uima.ducc.transport.event.common.IDuccWorkJob;
+import org.apache.uima.ducc.transport.event.common.IDuccWorkMap;
import org.apache.uima.ducc.transport.event.common.IRationale;
import org.apache.uima.ducc.transport.event.common.JdReservationBean;
import org.apache.uima.ducc.ws.Distiller;
@@ -88,10 +89,14 @@ import org.apache.uima.ducc.ws.registry.
import org.apache.uima.ducc.ws.registry.sort.ServicesHelper;
import org.apache.uima.ducc.ws.registry.sort.ServicesSortCache;
import org.apache.uima.ducc.ws.server.DuccCookies.DisplayStyle;
+import org.apache.uima.ducc.ws.server.Helper.AllocationType;
import org.apache.uima.ducc.ws.server.IWebMonitor.MonitorType;
+import org.apache.uima.ducc.ws.server.JsonHelper.JobProcessList;
import org.apache.uima.ducc.ws.types.NodeId;
import org.apache.uima.ducc.ws.types.UserId;
import org.apache.uima.ducc.ws.utils.FormatHelper.Precision;
+import org.apache.uima.ducc.ws.utils.alien.EffectiveUser;
+import org.apache.uima.ducc.ws.utils.alien.FileInfo;
import org.eclipse.jetty.server.Request;
import com.google.gson.Gson;
@@ -108,6 +113,8 @@ public class DuccHandlerJsonFormat exten
private static BrokerHelper brokerHelper = BrokerHelper.getInstance();
private static DatabaseHelper databaseHelper = DatabaseHelper.getInstance();
+ private static JsonHelper jh = new JsonHelper();
+
//private static PagingObserver pagingObserver = PagingObserver.getInstance();
private final String jsonFormatJobsAaData = duccContextJsonFormat+"-aaData-jobs";
@@ -119,6 +126,8 @@ public class DuccHandlerJsonFormat exten
private final String jsonFormatDaemonsAaData = duccContextJsonFormat+"-aaData-daemons";
private final String jsonFormatDaemonsAaDataAll = duccContextJsonFormat+"-aaData-daemons-all";
+ private final String jsonFormatJobProcessesData = duccContextJsonFormat+"-job-processes";
+
private final String jsonFormatMachines = duccContextJsonFormat+"-machines";
private final String jsonFormatReservations = duccContextJsonFormat+"-reservations";
@@ -617,6 +626,99 @@ public class DuccHandlerJsonFormat exten
duccLogger.trace(methodName, jobid, messages.fetch("exit"));
}
+ private JsonHelper.JobProcess create(DuccWorkJob job, IDuccProcess process, AllocationType type, Map<String, FileInfo> fileInfoMap) {
+ JsonHelper.JobProcess jsonProcess = jh.new JobProcess();
+ jsonProcess.process_number = ""+process.getDuccId().getFriendly();
+ jsonProcess.log_file = Helper.getLogFileName(job, process, type);
+ jsonProcess.log_size = Helper.getLogFileSize(job, process, jsonProcess.log_file, fileInfoMap);
+ jsonProcess.host_name = Helper.getHostname(job, process);
+ jsonProcess.pid = Helper.getPid(job, process);
+ jsonProcess.scheduler_state = Helper.getSchedulerState(job, process);
+ jsonProcess.scheduler_state_reason = Helper.getSchedulerReason(job, process);
+ jsonProcess.agent_state = Helper.getAgentState(job, process);
+ jsonProcess.agent_state_reason = Helper.getAgentReason(job, process);
+ jsonProcess.exit = Helper.getExit(job, process);
+ jsonProcess.time_init = Helper.getTimeInit(job, process, type);
+ jsonProcess.time_run = Helper.getTimeRun(job, process, type);
+ jsonProcess.time_gc = Helper.getTimeGC(job, process, type);
+ jsonProcess.swap = Helper.getSwap(job, process, type);
+ jsonProcess.swap_max = Helper.getSwapMax(job, process, type);
+ jsonProcess.pct_cpu_overall = Helper.getPctCpuOverall(job, process, type);
+ jsonProcess.pct_cpu_current = Helper.getPctCpuCurrent(job, process, type);
+ jsonProcess.rss = Helper.getRss(job, process, type);
+ jsonProcess.rss_max = Helper.getRssMax(job, process, type);
+ jsonProcess.wi_time_avg = Helper.getWiTimeAvg(job, process, type);
+ jsonProcess.wi_time_max = Helper.getWiTimeMax(job, process, type);
+ jsonProcess.wi_time_min = Helper.getWiTimeMin(job, process, type);
+ jsonProcess.wi_done = Helper.getWiDone(job, process, type);
+ jsonProcess.wi_error = Helper.getWiError(job, process, type);
+ jsonProcess.wi_dispatch = Helper.getWiDispatch(job, process, type);
+ jsonProcess.wi_retry = Helper.getWiRetry(job, process, type);
+ jsonProcess.wi_preempt = Helper.getWiPreempt(job, process, type);
+ jsonProcess.jconsole_url = Helper.getJConsoleUrl(job, process, type);
+ return jsonProcess;
+ }
+
+ private void handleServletJsonFormatJobProcessesData(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ String methodName = "handleServletJsonFormatJobProcessesData";
+ duccLogger.trace(methodName, jobid, messages.fetch("enter"));
+
+ EffectiveUser eu = EffectiveUser.create(request);
+ DuccWorkJob job = null;
+ String jobno = request.getParameter("id");
+ if(jobno != null) {
+ IDuccWorkMap duccWorkMap = DuccData.getInstance().get();
+ if(duccWorkMap.getJobKeySet().size()> 0) {
+ Iterator<DuccId> iterator = null;
+ iterator = duccWorkMap.getJobKeySet().iterator();
+ while(iterator.hasNext()) {
+ DuccId jobId = iterator.next();
+ String fid = ""+jobId.getFriendly();
+ if(jobno.equals(fid)) {
+ job = (DuccWorkJob) duccWorkMap.findDuccWork(jobId);
+ break;
+ }
+ }
+ }
+ }
+ else {
+ jobno = "id=?";
+ }
+
+ JobProcessList jpl = jh.new JobProcessList();
+ jpl.log_directory = Helper.getLogFileDirectory(job);
+ jpl.set_job_number(jobno);
+
+ if(job != null) {
+ String directory = job.getLogDirectory()+File.separator+job.getId();
+ Map<String, FileInfo> fileInfoMap = Helper.getFileInfoMap(eu, directory);
+ Iterator<DuccId> iterator = null;
+ iterator = job.getDriver().getProcessMap().keySet().iterator();
+ while(iterator.hasNext()) {
+ DuccId processId = iterator.next();
+ IDuccProcess duccProcess = job.getDriver().getProcessMap().get(processId);
+ JsonHelper.JobProcess jsonJobProcess = create(job,duccProcess,AllocationType.JD,fileInfoMap);
+ jpl.addJobProcess(jsonJobProcess);
+ }
+ iterator = job.getProcessMap().keySet().iterator();
+ while(iterator.hasNext()) {
+ DuccId processId = iterator.next();
+ IDuccProcess duccProcess = job.getProcessMap().get(processId);
+ JsonHelper.JobProcess jsonJobProcess = create(job,duccProcess,AllocationType.UIMA,fileInfoMap);
+ jpl.addJobProcess(jsonJobProcess);
+ }
+ }
+
+ String json = jpl.toJson();
+
+ duccLogger.debug(methodName, jobid, json);
+ response.getWriter().println(json);
+ response.setContentType("application/json");
+
+ duccLogger.trace(methodName, jobid, messages.fetch("exit"));
+ }
private JsonArray buildReservationRow(HttpServletRequest request, IDuccWork duccwork, DuccData duccData, long now) {
JsonArray row = new JsonArray();
@@ -2394,6 +2496,9 @@ public class DuccHandlerJsonFormat exten
else if(reqURI.startsWith(jsonFormatReservations)) {
handleServletJsonFormatReservations(target, baseRequest, request, response);
}
+ if(reqURI.startsWith(jsonFormatJobProcessesData)) {
+ handleServletJsonFormatJobProcessesData(target, baseRequest, request, response);
+ }
else {
handleServletUnknown(target, baseRequest, request, response);
}
Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java?rev=1811588&r1=1811587&r2=1811588&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/Helper.java Mon Oct 9 18:07:22 2017
@@ -18,25 +18,71 @@
*/
package org.apache.uima.ducc.ws.server;
+import java.text.DecimalFormat;
+import java.util.Date;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.TimeZone;
+import java.util.TreeMap;
import org.apache.uima.ducc.common.ConvertSafely;
+import org.apache.uima.ducc.common.NodeIdentity;
import org.apache.uima.ducc.common.SizeBytes;
import org.apache.uima.ducc.common.SizeBytes.Type;
import org.apache.uima.ducc.common.utils.DuccLogger;
import org.apache.uima.ducc.common.utils.DuccLoggerComponents;
+import org.apache.uima.ducc.common.utils.SynchronizedSimpleDateFormat;
import org.apache.uima.ducc.common.utils.id.DuccId;
+import org.apache.uima.ducc.transport.Constants;
+import org.apache.uima.ducc.transport.event.common.IDuccProcess;
+import org.apache.uima.ducc.transport.event.common.IDuccProcessWorkItems;
+import org.apache.uima.ducc.transport.event.common.IDuccWorkJob;
+import org.apache.uima.ducc.transport.event.common.IProcessState.ProcessState;
+import org.apache.uima.ducc.transport.event.common.IResourceState.ProcessDeallocationType;
+import org.apache.uima.ducc.transport.event.common.TimeWindow;
import org.apache.uima.ducc.ws.DuccMachinesData;
import org.apache.uima.ducc.ws.DuccMachinesDataHelper;
import org.apache.uima.ducc.ws.MachineInfo;
import org.apache.uima.ducc.ws.types.NodeId;
+import org.apache.uima.ducc.ws.utils.FormatHelper;
+import org.apache.uima.ducc.ws.utils.FormatHelper.Precision;
+import org.apache.uima.ducc.ws.utils.LinuxSignals;
+import org.apache.uima.ducc.ws.utils.LinuxSignals.Signal;
+import org.apache.uima.ducc.ws.utils.alien.EffectiveUser;
+import org.apache.uima.ducc.ws.utils.alien.FileInfo;
+import org.apache.uima.ducc.ws.utils.alien.OsProxy;
public class Helper {
private static DuccLogger duccLogger = DuccLoggerComponents.getWsLogger(Helper.class.getName());
private static DuccId jobid = null;
+ public static enum AllocationType { JD, MR, SPC, SPU, UIMA };
+ public static enum LogType { POP, UIMA };
+
+ public static String notAvailable = "N/A";
+
+ public static String getDuration(DuccId jobId, String millisV2, String millisV1, Precision precision) {
+ String methodName = "getDuration";
+ String retVal = "";
+ try {
+ long d2 = Long.parseLong(millisV2);
+ long d1 = Long.parseLong(millisV1);
+ long diff = d2 - d1;
+ if(diff < 0) {
+ diff = 0;
+ }
+ retVal = FormatHelper.duration(diff, precision);
+ }
+ catch(Exception e) {
+ duccLogger.trace(methodName, null, "no worries", e);
+ }
+ catch(Throwable t) {
+ duccLogger.trace(methodName, null, "no worries", t);
+ }
+ return retVal;
+ }
+
public static SizeBytes getSummaryReserve() {
String methodName = "getSummaryReserve";
long sumReserve = 0;
@@ -59,4 +105,831 @@ public class Helper {
SizeBytes retVal = new SizeBytes(Type.GBytes, sumReserve);
return retVal;
}
+
+ public static Map<String, FileInfo> getFileInfoMap(EffectiveUser eu, String directory) {
+ String location = "";
+ Map<String, FileInfo> map = new TreeMap<String, FileInfo>();
+ try {
+ map = OsProxy.getFilesInDirectory(eu, directory);
+ }
+ catch(Throwable t) {
+ duccLogger.error(location, jobid, t);
+ }
+ return map;
+ }
+
+ public static String getLogFileDirectory(IDuccWorkJob job) {
+ String retVal = "";
+ if(job != null) {
+ retVal = job.getLogDirectory();
+ }
+ return retVal;
+ }
+
+ public static String getLogFileName(IDuccWorkJob job, IDuccProcess process, AllocationType type) {
+ String retVal = "";
+ if(process != null) {
+ switch(type) {
+ case UIMA:
+ retVal = job.getDuccId().getFriendly()+"-"+LogType.UIMA.name()+"-"+process.getNodeIdentity().getName()+"-"+process.getPID()+".log";
+ break;
+ case MR:
+ retVal = job.getDuccId().getFriendly()+"-"+LogType.POP.name()+"-"+process.getNodeIdentity().getName()+"-"+process.getPID()+".log";
+ break;
+ case SPU:
+ retVal = job.getDuccId().getFriendly()+"-"+LogType.UIMA.name()+"-"+process.getNodeIdentity().getName()+"-"+process.getPID()+".log";
+ break;
+ case SPC:
+ retVal = job.getDuccId().getFriendly()+"-"+LogType.POP.name()+"-"+process.getNodeIdentity().getName()+"-"+process.getPID()+".log";
+ break;
+ case JD:
+ retVal = "jd.out.log";
+ // <UIMA-3802>
+ // {jobid}-JD-{node}-{PID}.log
+ String node = process.getNodeIdentity().getName();
+ String pid = process.getPID();
+ retVal = job.getDuccId()+"-"+"JD"+"-"+node+"-"+pid+".log";
+ // </UIMA-3802>
+ break;
+ }
+ }
+ return retVal;
+ }
+
+ public static String getLogFileSize(IDuccWorkJob job, IDuccProcess process, String log_file, Map<String, FileInfo> fileInfoMap) {
+ String location = "getLogFileSize";
+ String retVal = "0";
+ try {
+ String dir_name = job.getUserLogDir();
+ String file_name = dir_name+log_file;
+ long size = getFileSize(file_name, fileInfoMap);
+ retVal = normalize(size);
+ }
+ catch(Exception e) {
+ duccLogger.warn(location,jobid,e);
+ }
+ return retVal;
+ }
+
+ private static DecimalFormat sizeFormatter = new DecimalFormat("##0.00");
+
+ public static String normalize(long fileSize) {
+ String location = "normalize";
+ String retVal = "0";
+ try {
+ double size = fileSize;
+ size = size / Constants.MB;
+ retVal = sizeFormatter.format(size);
+ }
+ catch(Exception e) {
+ duccLogger.warn(location,jobid,e);
+ }
+ return retVal;
+ }
+
+ public static long getFileSize(String filename, Map<String, FileInfo> fileInfoMap) {
+ long retVal = 0;
+ if(filename != null) {
+ if(fileInfoMap != null) {
+ FileInfo fileInfo = fileInfoMap.get(filename);
+ if(fileInfo != null) {
+ retVal = fileInfo.length;
+ }
+ }
+ }
+ return retVal;
+ }
+
+ public static String getHostname(IDuccWorkJob job, IDuccProcess process) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ NodeIdentity ni = process.getNodeIdentity();
+ if(ni != null) {
+ String name = ni.getName();
+ if(name != null) {
+ sb.append(name);
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getPid(IDuccWorkJob job, IDuccProcess process) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ String pid = process.getPID();
+ if(pid != null) {
+ sb.append(pid);
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getSchedulerState(IDuccWorkJob job, IDuccProcess process) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ sb.append(process.getResourceState());
+ }
+ return sb.toString();
+ }
+
+ private static String getRmReason(IDuccWorkJob job) {
+ StringBuffer sb = new StringBuffer();
+ String rmReason = job.getRmReason();
+ if(rmReason != null) {
+ sb.append("<span>");
+ sb.append(rmReason);
+ sb.append("</span>");
+ }
+ return sb.toString();
+ }
+
+ private static String getProcessReason(IDuccProcess process) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ switch(process.getProcessState()) {
+ case Starting:
+ case Started:
+ case Initializing:
+ case Running:
+ break;
+ default:
+ ProcessDeallocationType deallocationType = process.getProcessDeallocationType();
+ switch(deallocationType) {
+ case Undefined:
+ break;
+ default:
+ sb.append(process.getProcessDeallocationType());
+ break;
+ }
+ break;
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getSchedulerReason(IDuccWorkJob job, IDuccProcess process) {
+ StringBuffer sb = new StringBuffer();
+ if(job.isOperational()) {
+ switch(job.getJobState()) {
+ case WaitingForResources:
+ sb.append(getRmReason(job));
+ break;
+ default:
+ sb.append(getProcessReason(process));
+ break;
+ }
+ }
+ else {
+ sb.append(getProcessReason(process));
+ }
+ return sb.toString();
+ }
+
+ public static String getAgentState(IDuccWorkJob job, IDuccProcess process) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ ProcessState ps = process.getProcessState();
+ switch(ps) {
+ case Undefined:
+ break;
+ default:
+ sb.append(ps);
+ break;
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getAgentReason(IDuccWorkJob job, IDuccProcess process) {
+ String retVal = null;
+ if(process != null) {
+ retVal = process.getReasonForStoppingProcess();
+ }
+ return retVal;
+ }
+
+ public static String getAgentReasonExtended(IDuccWorkJob job, IDuccProcess process) {
+ String retVal = null;
+ if(process != null) {
+ retVal = process.getExtendedReasonForStoppingProcess();
+ }
+ return retVal;
+ }
+
+ public static String getExit(IDuccWorkJob job, IDuccProcess process) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ boolean suppressExitCode = false;
+ if(!suppressExitCode) {
+ switch(process.getProcessState()) {
+ case LaunchFailed:
+ case Stopped:
+ case Failed:
+ case FailedInitialization:
+ case InitializationTimeout:
+ case Killed:
+ int code = process.getProcessExitCode();
+ if(LinuxSignals.isSignal(code)) {
+ Signal signal = LinuxSignals.lookup(code);
+ if(signal != null) {
+ sb.append(signal.name()+"("+signal.number()+")");
+ }
+ else {
+ sb.append("UnknownSignal"+"("+LinuxSignals.getValue(code)+")");
+ }
+ }
+ else {
+ sb.append("ExitCode"+"="+code);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getTimeInit(IDuccWorkJob job, IDuccProcess process, AllocationType type) {
+ String location = "getTimeInit";
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ switch(type) {
+ case MR:
+ break;
+ default:
+ String initTime = "00";
+ try {
+ TimeWindow t = (TimeWindow) process.getTimeWindowInit();
+ if(t != null) {
+ long now = System.currentTimeMillis();
+ String tS = t.getStart(""+now);
+ String tE = t.getEnd(""+now);
+ initTime = getDuration(jobid,tE,tS,Precision.Whole);
+ }
+ }
+ catch(Exception e) {
+ duccLogger.trace(location, jobid, "no worries", e);
+ }
+ catch(Throwable t) {
+ duccLogger.trace(location, jobid, "no worries", t);
+ }
+ sb.append(initTime);
+ break;
+ }
+ }
+ return sb.toString();
+ }
+
+ public static boolean isTimeInitEstimated(IDuccWorkJob job, IDuccProcess process, AllocationType type) {
+ String location = "isTimeInitEstimated";
+ boolean retVal = false;
+ if(process != null) {
+ switch(type) {
+ case MR:
+ break;
+ default:
+ try {
+ TimeWindow t = (TimeWindow) process.getTimeWindowInit();
+ if(t != null) {
+ if(t.isEstimated()) {
+ retVal = true;
+ }
+ }
+ }
+ catch(Exception e) {
+ duccLogger.trace(location, jobid, "no worries", e);
+ }
+ catch(Throwable t) {
+ duccLogger.trace(location, jobid, "no worries", t);
+ }
+ break;
+ }
+ }
+ return retVal;
+ }
+
+ public static String getTimeRun(IDuccWorkJob job, IDuccProcess process, AllocationType type) {
+ String location = "getTimeRun";
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ String runTime = "00";
+ // <UIMA-3351>
+ boolean useTimeRun = true;
+ switch(type) {
+ case SPC:
+ break;
+ case SPU:
+ break;
+ case MR:
+ break;
+ case JD:
+ break;
+ case UIMA:
+ if(!process.isAssignedWork()) {
+ useTimeRun = false;
+ }
+ break;
+ default:
+ break;
+ }
+ // </UIMA-3351>
+ if(useTimeRun) {
+ try {
+ TimeWindow t = (TimeWindow) process.getTimeWindowRun();
+ if(t != null) {
+ long now = System.currentTimeMillis();
+ String tS = t.getStart(""+now);
+ String tE = t.getEnd(""+now);
+ runTime = Helper.getDuration(jobid,tE,tS,Precision.Whole);
+ }
+ }
+ catch(Exception e) {
+ duccLogger.trace(location, jobid, "no worries", e);
+ }
+ catch(Throwable t) {
+ duccLogger.trace(location, jobid, "no worries", t);
+ }
+ }
+ sb.append(runTime);
+ }
+ return sb.toString();
+ }
+
+ public static boolean isTimeRunEstimated(IDuccWorkJob job, IDuccProcess process, AllocationType type) {
+ String location = "isTimeRunEstimated";
+ boolean retVal = false;
+ if(process != null) {
+ // <UIMA-3351>
+ boolean useTimeRun = true;
+ switch(type) {
+ case SPC:
+ break;
+ case SPU:
+ break;
+ case MR:
+ break;
+ case JD:
+ break;
+ case UIMA:
+ if(!process.isAssignedWork()) {
+ useTimeRun = false;
+ }
+ break;
+ default:
+ break;
+ }
+ // </UIMA-3351>
+ if(useTimeRun) {
+ try {
+ TimeWindow t = (TimeWindow) process.getTimeWindowRun();
+ if(t != null) {
+ if(t.isEstimated()) {
+ retVal = true;
+ }
+ }
+ }
+ catch(Exception e) {
+ duccLogger.trace(location, jobid, "no worries", e);
+ }
+ catch(Throwable t) {
+ duccLogger.trace(location, jobid, "no worries", t);
+ }
+ }
+ }
+ return retVal;
+ }
+
+ private static String chomp(String leading, String whole) {
+ String retVal = whole;
+ while((retVal.length() > leading.length()) && (retVal.startsWith(leading))) {
+ retVal = retVal.replaceFirst(leading, "");
+ }
+ /*
+ if(retVal.equals("00:00")) {
+ retVal = "0";
+ }
+ */
+ return retVal;
+ }
+
+ private static SynchronizedSimpleDateFormat dateFormat = new SynchronizedSimpleDateFormat("HH:mm:ss");
+
+ public static String getTimeGC(IDuccWorkJob job, IDuccProcess process, AllocationType type) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ switch(type) {
+ case MR:
+ break;
+ default:
+ long timeGC = 0;
+ try {
+ timeGC = process.getGarbageCollectionStats().getCollectionTime();
+ }
+ catch(Exception e) {
+ }
+ dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+ String displayGC = dateFormat.format(new Date(timeGC));
+ displayGC = chomp("00:", displayGC);
+ sb.append(displayGC);
+ break;
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getPgIn(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ switch(sType) {
+ default:
+ long faults = 0;
+ try {
+ faults = process.getMajorFaults();
+ }
+ catch(Exception e) {
+ }
+ if(faults < 0) {
+ sb.append("<span class=\"health_black\""+">");
+ sb.append(notAvailable);
+ sb.append("</span>");
+ }
+ else {
+ double swap = process.getSwapUsageMax();
+ if((swap * faults) > 0) {
+ sb.append("<span class=\"health_red\""+">");
+ }
+ else {
+ sb.append("<span class=\"health_black\""+">");
+ }
+ sb.append(faults);
+ sb.append("</span>");
+ }
+ break;
+ }
+ }
+ return sb.toString();
+ }
+
+ public static boolean isSwapping(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ boolean retVal = false;
+ if(process != null) {
+ switch(sType) {
+ default:
+ if(!process.isActive()) {
+ double swap = process.getSwapUsageMax();
+ if(swap > 0) {
+ retVal = true;
+ }
+ }
+ else {
+ double swap = process.getSwapUsage();
+ if(swap > 0) {
+ retVal = true;
+ }
+ }
+ break;
+ }
+ }
+ return retVal;
+ }
+
+ private static DecimalFormat formatter = new DecimalFormat("##0.0");
+
+ public static String getSwap(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ switch(sType) {
+ default:
+ if(!process.isActive()) {
+ double swap = process.getSwapUsageMax();
+ if(swap < 0) {
+ sb.append(notAvailable);
+ }
+ else {
+ swap = swap/Constants.GB;
+ String displaySwap = formatter.format(swap);
+ sb.append(displaySwap);
+ }
+ }
+ else {
+ double swap = process.getSwapUsage();
+ if(swap < 0) {
+ sb.append(notAvailable);
+ }
+ else {
+ swap = swap/Constants.GB;
+ String displaySwap = formatter.format(swap);
+ sb.append(displaySwap);
+ }
+ }
+ break;
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getSwapMax(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ String retVal = null;
+ if(process != null) {
+ switch(sType) {
+ default:
+ if(!process.isActive()) {
+ }
+ else {
+ double swap = process.getSwapUsage();
+ if(swap < 0) {
+ }
+ else {
+ double swapMax = process.getSwapUsageMax();
+ swapMax = swapMax/Constants.GB;
+ String displaySwapMax = formatter.format(swapMax);
+ retVal = displaySwapMax;
+ }
+ }
+ break;
+ }
+ }
+ return retVal;
+ }
+
+ private static String formatPctCpu(double pctCpu) {
+ String retVal = "";
+ if(pctCpu < 0) {
+ retVal = "N/A";
+ }
+ else {
+ retVal = formatter.format(pctCpu);
+ }
+ return retVal;
+ }
+
+ public static String getPctCpuOverall(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ if(process.getDataVersion() < 1) {
+ // Not supported
+ }
+ else {
+ switch(sType) {
+ default:
+ double pctCPU_overall = process.getCpuTime();
+ String fmtCPU_overall = formatPctCpu(pctCPU_overall);
+ sb.append(fmtCPU_overall);
+ break;
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getPctCpuCurrent(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ if(process.getDataVersion() < 1) {
+ // Not supported
+ }
+ else {
+ switch(sType) {
+ default:
+ double pctCPU_current = process.getCurrentCPU();
+ String fmtCPU_current = formatPctCpu(pctCPU_current);
+ sb.append(fmtCPU_current);
+ break;
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getRss(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ switch(sType) {
+ default:
+ if(process.isComplete()) {
+ double rss = process.getResidentMemoryMax();
+ if(rss < 0) {
+ sb.append(notAvailable);
+ }
+ else {
+ rss = rss/Constants.GB;
+ String displayRss = formatter.format(rss);
+ sb.append(displayRss);
+ }
+ }
+ else {
+ double rss = process.getResidentMemory();
+ if(rss < 0) {
+ sb.append(notAvailable);
+ }
+ else {
+ rss = rss/Constants.GB;
+ String displayRss = formatter.format(rss);
+ sb.append(displayRss);
+ }
+ }
+ break;
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getRssMax(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ String retVal = null;
+ if(process != null) {
+ switch(sType) {
+ default:
+ if(process.isComplete()) {
+ //
+ }
+ else {
+ double rss = process.getResidentMemory();
+ if(rss < 0) {
+ //
+ }
+ else {
+ double rssMax = process.getResidentMemoryMax();
+ rssMax = rssMax/Constants.GB;
+ String displayRssMax = formatter.format(rssMax);
+ retVal = displayRssMax;
+ }
+ }
+ break;
+ }
+ }
+ return retVal;
+ }
+
+ public static String getWiTimeAvg(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ IDuccProcessWorkItems pwi = process.getProcessWorkItems();
+ if(sType != null) {
+ switch(sType) {
+ case JD:
+ if(pwi != null) {
+ String value = ""+(job.getWiMillisAvg()/1000);
+ sb.append(value);
+ }
+ break;
+ default:
+ if(pwi != null) {
+ String value = ""+pwi.getSecsAvg();
+ sb.append(value);
+ }
+ break;
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getWiTimeMax(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ IDuccProcessWorkItems pwi = process.getProcessWorkItems();
+ if(sType != null) {
+ switch(sType) {
+ default:
+ if(pwi != null) {
+ String value = ""+pwi.getSecsMax();
+ sb.append(value);
+ }
+ break;
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getWiTimeMin(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ IDuccProcessWorkItems pwi = process.getProcessWorkItems();
+ if(sType != null) {
+ switch(sType) {
+ default:
+ if(pwi != null) {
+ String value = ""+pwi.getSecsMin();
+ sb.append(value);
+ }
+ break;
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getWiDone(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ IDuccProcessWorkItems pwi = process.getProcessWorkItems();
+ if(sType != null) {
+ switch(sType) {
+ default:
+ if(pwi != null) {
+ String value = ""+pwi.getCountDone();
+ sb.append(value);
+ }
+ break;
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getWiError(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ IDuccProcessWorkItems pwi = process.getProcessWorkItems();
+ if(sType != null) {
+ switch(sType) {
+ default:
+ if(pwi != null) {
+ String value = ""+pwi.getCountError();
+ sb.append(value);
+ }
+ break;
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getWiDispatch(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ IDuccProcessWorkItems pwi = process.getProcessWorkItems();
+ if(sType != null) {
+ switch(sType) {
+ default:
+ if(pwi != null) {
+ String value = ""+pwi.getCountDispatch();
+ if(job.isCompleted()) {
+ value = "0";
+ }
+ sb.append(value);
+ }
+ break;
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getWiRetry(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ IDuccProcessWorkItems pwi = process.getProcessWorkItems();
+ if(sType != null) {
+ switch(sType) {
+ default:
+ if(pwi != null) {
+ String value = ""+pwi.getCountRetry();
+ sb.append(value);
+ }
+ break;
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getWiPreempt(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ IDuccProcessWorkItems pwi = process.getProcessWorkItems();
+ if(sType != null) {
+ switch(sType) {
+ default:
+ if(pwi != null) {
+ String value = ""+pwi.getCountPreempt();
+ sb.append(value);
+ }
+ break;
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ public static String getJConsoleUrl(IDuccWorkJob job, IDuccProcess process, AllocationType sType) {
+ StringBuffer sb = new StringBuffer();
+ if(process != null) {
+ switch(process.getProcessState()) {
+ case Initializing:
+ case Running:
+ String jmxUrl = process.getProcessJmxUrl();
+ if(jmxUrl != null) {
+ sb.append(jmxUrl);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ return sb.toString();
+ }
}
Added: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/JsonHelper.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/JsonHelper.java?rev=1811588&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/JsonHelper.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/JsonHelper.java Mon Oct 9 18:07:22 2017
@@ -0,0 +1,86 @@
+/*
+ * 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.util.ArrayList;
+import java.util.List;
+
+import com.google.gson.Gson;
+
+public class JsonHelper {
+
+ private static Gson gson = new Gson();
+
+ /**
+ * This class is used to generate Json data via Gson representing
+ * one JobProcess in a DUCC Job
+ */
+ public class JobProcess {
+ String process_number;
+ String log_file;
+ String log_size;
+ String host_name;
+ String pid;
+ String scheduler_state;
+ String scheduler_state_reason;
+ String agent_state;
+ String agent_state_reason;
+ String exit;
+ String time_init;
+ String time_run;
+ String time_gc;
+ String pgin;
+ String swap;
+ String swap_max;
+ String pct_cpu_overall;
+ String pct_cpu_current;
+ String rss;
+ String rss_max;
+ String wi_time_avg;
+ String wi_time_max;
+ String wi_time_min;
+ String wi_done;
+ String wi_error;
+ String wi_dispatch;
+ String wi_retry;
+ String wi_preempt;
+ String jconsole_url;
+ }
+
+ /**
+ *
+ * This class is used to generate Json data via Gson representing
+ * one Job's collection of JobProcesses.
+ */
+ public class JobProcessList {
+ String job_number;
+ String log_directory;
+ List<JobProcess> processes = new ArrayList<JobProcess>();
+ void set_job_number(String job_number) {
+ this.job_number = job_number;
+ }
+ void addJobProcess(JobProcess p) {
+ processes.add(p);
+ }
+ String toJson() {
+ return gson.toJson(this);
+ }
+ }
+
+}
Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/JsonHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/JsonHelper.java
------------------------------------------------------------------------------
svn:mime-type = text/plain