in uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java [1342:1526]
private void handleDuccServletJobWorkitemsData(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException
{
String methodName = "handleDuccServletJobWorkitemsData";
duccLogger.trace(methodName, null, messages.fetch("enter"));
StringBuffer sb = new StringBuffer();
String jobNo = request.getParameter("id");
DuccWorkJob job = getJob(jobNo);
if(job != null) {
try {
String directory = job.getLogDirectory()+jobNo;
EffectiveUser eu = EffectiveUser.create(request);
long wiVersion = job.getWiVersion();
AlienWorkItemStateReader workItemStateReader = new AlienWorkItemStateReader(eu, component, directory, wiVersion);
ConcurrentSkipListMap<Long,IWorkItemState> map = workItemStateReader.getMap();
if (map == null) {
sb.append(eu.isLoggedin() ? "(data missing or unreadable)" : "(not visible - try logging in)");
} else if (map.size() == 0) {
sb.append("(no work-items processed)");
}
else {
ConcurrentSkipListMap<IWorkItemState,IWorkItemState> sortedMap = new ConcurrentSkipListMap<IWorkItemState,IWorkItemState>();
for (Entry<Long, IWorkItemState> entry : map.entrySet()) {
sortedMap.put(entry.getValue(), entry.getValue());
}
DuccMachinesData machinesData = DuccMachinesData.getInstance();
DecimalFormat formatter = new DecimalFormat("##0.00");
double time;
String ptime;
String itime;
int counter = 0;
for (Entry<IWorkItemState, IWorkItemState> entry : sortedMap.entrySet()) {
StringBuffer row = new StringBuffer();
IWorkItemState wis = entry.getValue();
row.append(trGet(counter++));
if(counter > DuccConstants.workItemsDisplayMax) {
// SeqNo
row.append("<td align=\"right\">");
row.append("*****");
// Id
row.append("<td align=\"right\">");
row.append("*****");
// Status
row.append("<td align=\"right\">");
row.append("display");
// Start Time
row.append("<td align=\"right\">");
row.append("limit");
// Queuing Time (sec)
row.append("<td align=\"right\">");
row.append("reached");
// Processing Time (sec)
row.append("<td align=\"right\">");
row.append("*****");
// Investment Time (sec)
row.append("<td align=\"right\">");
row.append("*****");
// Node (IP)
row.append("<td align=\"right\">");
row.append("*****");
// Node (Name)
row.append("<td align=\"right\">");
row.append("*****");
// PID
row.append("<td align=\"right\">");
row.append("*****");
sb.append(row);
duccLogger.warn(methodName, job.getDuccId(), "work items display max:"+DuccConstants.workItemsDisplayMax);
break;
}
long refTime = DuccHandlerUtils.getReferenceTime(job,wis.getNode(),wis.getPid());
// SeqNo
row.append("<td align=\"right\">");
row.append(wis.getSeqNo());
// Id
row.append("<td align=\"right\">");
row.append(wis.getWiId());
// Status
row.append("<td align=\"right\">");
State state = wis.getState();
StringBuffer status = new StringBuffer();
switch(state) {
case lost:
//status = row.append("<span title=\"Work Item was queued but never dequeued. (This is most likely a DUCC framework issue.)\" >");
status.append("<span title=\"Work Item was queued but never dequeued.\" >");
status.append(state);
status.append("</span>");
break;
default:
status.append(state);
break;
}
row.append(status);
// Start Time
String fmt_startTime = "";
IDuccProcess jd = job.getDriverProcess();
if(jd != null) {
long jdStartTime = Helper.getTimeStart(jd);
if(jdStartTime >= 0) {
long wiStartTime = wis.getMillisAtStart();
if(wiStartTime > jdStartTime) {
double elapsedTime = wiStartTime - jdStartTime;
elapsedTime = elapsedTime/1000;
fmt_startTime = formatter.format(elapsedTime);
}
}
}
row.append("<td align=\"right\">");
row.append(fmt_startTime);
// Queuing Time (sec)
time = getAdjustedTime(wis.getMillisOverhead(refTime), job);
time = time/1000;
row.append("<td align=\"right\">");
row.append(formatter.format(time));
// Processing Time (sec)
time = getAdjustedTime(wis.getMillisProcessing(refTime), job);
time = time/1000;
ptime = formatter.format(time);
row.append("<td align=\"right\">");
switch(state) {
case start:
case queued:
case operating:
row.append("<span class=\"health_green\">");
break;
default:
row.append("<span class=\"health_black\">");
break;
}
row.append(ptime);
row.append("</span>");
// Investment Time (sec)
time = getAdjustedTime(wis.getMillisInvestment(refTime), job);
time = time/1000;
itime = formatter.format(time);
row.append("<td align=\"right\">");
String ispan = "<span class=\"health_black\">";
if(time > 0) {
if(!itime.equals(ptime)) {
ispan = "<span title=\"investment reset\" class=\"health_red\">";
}
}
row.append(ispan);
row.append(itime);
row.append("</span>");
// Node (IP)
row.append("<td>");
String node = wis.getNode();
if(node != null) {
row.append(node);
}
// Node (Name)
row.append("<td>");
if(node != null) {
String hostName = machinesData.getNameForIp(node);
if(hostName != null) {
row.append(hostName);
}
}
// PID
row.append("<td>");
String pid = wis.getPid();
if(pid != null) {
row.append(pid);
}
sb.append(row);
duccLogger.trace(methodName, null, "**"+counter+"**"+" "+row);
}
}
}
catch(Exception e) {
duccLogger.warn(methodName, null, e.getMessage());
duccLogger.debug(methodName, null, e);
//sb = new StringBuffer();
sb.append("no accessible data ("+e+")");
}
}
else {
sb.append("no accessible data (no job?)");
}
response.getWriter().println(sb);
duccLogger.trace(methodName, null, messages.fetch("exit"));
}