You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by de...@apache.org on 2013/02/22 21:21:46 UTC
svn commit: r1449197 - in
/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main:
java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java
java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java
webapp/root/reservations.jsp
Author: degenaro
Date: Fri Feb 22 20:21:46 2013
New Revision: 1449197
URL: http://svn.apache.org/r1449197
Log:
UIMA-2691 DUCC webserver (WS) support for "managed reservations"
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/reservations.jsp
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java?rev=1449197&r1=1449196&r2=1449197&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java Fri Feb 22 20:21:46 2013
@@ -59,8 +59,9 @@ import org.apache.uima.ducc.transport.ev
import org.apache.uima.ducc.transport.event.common.IDuccReservationMap;
import org.apache.uima.ducc.transport.event.common.IDuccState.ReservationState;
import org.apache.uima.ducc.transport.event.common.IDuccUnits.MemoryUnits;
+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.IDuccWorkReservation;
+import org.apache.uima.ducc.transport.event.common.IDuccWorkService.ServiceDeploymentType;
import org.apache.uima.ducc.transport.event.common.IRationale;
import org.apache.uima.ducc.ws.DuccDaemonsData;
import org.apache.uima.ducc.ws.DuccData;
@@ -503,19 +504,19 @@ public class DuccHandlerJsonFormat exten
}
- private JsonArray buildReservationRow(HttpServletRequest request, IDuccWorkReservation reservation, DuccData duccData) {
+ private JsonArray buildReservationRow(HttpServletRequest request, IDuccWork duccwork, DuccData duccData) {
String type="Reservation";
JsonArray row = new JsonArray();
StringBuffer sb;
- DuccId duccId = reservation.getDuccId();
+ DuccId duccId = duccwork.getDuccId();
// Terminate
sb = new StringBuffer();
String id = normalize(duccId);
sb.append("<span class=\"ducc-col-terminate\">");
if(terminateEnabled) {
- if(!reservation.isCompleted()) {
- String disabled = getDisabled(request,reservation);
- String user = reservation.getStandardInfo().getUser();
+ if(!duccwork.isCompleted()) {
+ String disabled = getDisabled(request,duccwork);
+ String user = duccwork.getStandardInfo().getUser();
if(user != null) {
if(user.equals(JdConstants.reserveUser)) {
disabled = "disabled=\"disabled\"";
@@ -533,39 +534,60 @@ public class DuccHandlerJsonFormat exten
sb.append("</span>");
row.add(new JsonPrimitive(sb.toString()));
// Start
- row.add(new JsonPrimitive(getTimeStamp(request,reservation.getDuccId(), reservation.getStandardInfo().getDateOfSubmission())));
+ row.add(new JsonPrimitive(getTimeStamp(request,duccwork.getDuccId(), duccwork.getStandardInfo().getDateOfSubmission())));
// End
sb = new StringBuffer();
sb.append("<span>");
- switch(reservation.getReservationState()) {
- case Completed:
- sb.append(getTimeStamp(request,reservation.getDuccId(),reservation.getStandardInfo().getDateOfCompletion()));
- break;
- default:
- break;
+ if(duccwork instanceof DuccWorkReservation) {
+ DuccWorkReservation reservation = (DuccWorkReservation) duccwork;
+ switch(reservation.getReservationState()) {
+ case Completed:
+ sb.append(getTimeStamp(request,duccwork.getDuccId(),duccwork.getStandardInfo().getDateOfCompletion()));
+ break;
+ default:
+ break;
+ }
+ }
+ else if(duccwork instanceof DuccWorkJob) {
+ DuccWorkJob job = (DuccWorkJob) duccwork;
+ switch(job.getJobState()) {
+ case Completed:
+ sb.append(getTimeStamp(request,duccwork.getDuccId(),duccwork.getStandardInfo().getDateOfCompletion()));
+ break;
+ default:
+ break;
+ }
}
sb.append("</span>");
row.add(new JsonPrimitive(sb.toString()));
// User
sb = new StringBuffer();
String title = "";
- String submitter = reservation.getStandardInfo().getSubmitter();
+ String submitter = duccwork.getStandardInfo().getSubmitter();
if(submitter != null) {
- title = " title=\"reservation submitter PID@host: "+submitter+"\"";
+ title = " title=\"submitter PID@host: "+submitter+"\"";
}
sb.append("<span"+title+">");
- UserId userId = new UserId(reservation.getStandardInfo().getUser());
+ UserId userId = new UserId(duccwork.getStandardInfo().getUser());
sb.append(userId.toString());
sb.append("</span>");
row.add(new JsonPrimitive(sb.toString()));
// Class
- row.add(new JsonPrimitive(stringNormalize(reservation.getSchedulingInfo().getSchedulingClass(),messages.fetch("default"))));
+ row.add(new JsonPrimitive(stringNormalize(duccwork.getSchedulingInfo().getSchedulingClass(),messages.fetch("default"))));
+ // Type
+ sb = new StringBuffer();
+ String reservationType = "Unmanaged";
+ if(duccwork instanceof DuccWorkJob) {
+ reservationType = "Managed";
+ }
+ sb.append(reservationType);
+ row.add(new JsonPrimitive(sb.toString()));
// State
sb = new StringBuffer();
- String state = reservation.getStateObject().toString();
+ String state = duccwork.getStateObject().toString();
sb.append("<span>");
if(duccData.isLive(duccId)) {
- if(reservation.isOperational()) {
+ if(duccwork.isOperational()) {
sb.append("<span class=\"active_state\">");
}
else {
@@ -583,121 +605,186 @@ public class DuccHandlerJsonFormat exten
row.add(new JsonPrimitive(sb.toString()));
// Reason
sb = new StringBuffer();
- switch(reservation.getCompletionType()) {
- case Undefined:
- break;
- case CanceledByUser:
- case CanceledByAdmin:
- try {
- String cancelUser = reservation.getStandardInfo().getCancelUser();
- if(cancelUser != null) {
- sb.append("<span title=\"canceled by "+cancelUser+"\">");
- sb.append(reservation.getCompletionTypeObject().toString());
- sb.append("</span>");
- }
- else {
+ if(duccwork instanceof DuccWorkReservation) {
+ DuccWorkReservation reservation = (DuccWorkReservation) duccwork;
+ switch(reservation.getCompletionType()) {
+ case Undefined:
+ break;
+ case CanceledByUser:
+ case CanceledByAdmin:
+ try {
+ String cancelUser = duccwork.getStandardInfo().getCancelUser();
+ if(cancelUser != null) {
+ sb.append("<span title=\"canceled by "+cancelUser+"\">");
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ sb.append("</span>");
+ }
+ else {
+ IRationale rationale = reservation.getCompletionRationale();
+ if(rationale != null) {
+ sb.append("<span title=\""+rationale+"\">");
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ sb.append("</span>");
+ }
+ else {
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ }
+
+ }
+ }
+ catch(Exception e) {
IRationale rationale = reservation.getCompletionRationale();
if(rationale != null) {
sb.append("<span title=\""+rationale+"\">");
- sb.append(reservation.getCompletionTypeObject().toString());
+ sb.append(duccwork.getCompletionTypeObject().toString());
sb.append("</span>");
}
else {
- sb.append(reservation.getCompletionTypeObject().toString());
+ sb.append(duccwork.getCompletionTypeObject().toString());
}
-
}
- }
- catch(Exception e) {
+ break;
+ default:
IRationale rationale = reservation.getCompletionRationale();
if(rationale != null) {
sb.append("<span title=\""+rationale+"\">");
- sb.append(reservation.getCompletionTypeObject().toString());
+ sb.append(duccwork.getCompletionTypeObject().toString());
sb.append("</span>");
}
else {
- sb.append(reservation.getCompletionTypeObject().toString());
+ sb.append(duccwork.getCompletionTypeObject().toString());
}
+ break;
}
- break;
- default:
- IRationale rationale = reservation.getCompletionRationale();
- if(rationale != null) {
- sb.append("<span title=\""+rationale+"\">");
- sb.append(reservation.getCompletionTypeObject().toString());
- sb.append("</span>");
- }
- else {
- sb.append(reservation.getCompletionTypeObject().toString());
+ }
+ else if(duccwork instanceof DuccWorkJob) {
+ DuccWorkJob job = (DuccWorkJob) duccwork;
+ switch(job.getCompletionType()) {
+ case Undefined:
+ break;
+ case CanceledByUser:
+ case CanceledByAdministrator:
+ try {
+ String cancelUser = duccwork.getStandardInfo().getCancelUser();
+ if(cancelUser != null) {
+ sb.append("<span title=\"canceled by "+cancelUser+"\">");
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ sb.append("</span>");
+ }
+ else {
+ IRationale rationale = job.getCompletionRationale();
+ if(rationale != null) {
+ sb.append("<span title=\""+rationale+"\">");
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ sb.append("</span>");
+ }
+ else {
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ }
+
+ }
+ }
+ catch(Exception e) {
+ IRationale rationale = job.getCompletionRationale();
+ if(rationale != null) {
+ sb.append("<span title=\""+rationale+"\">");
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ sb.append("</span>");
+ }
+ else {
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ }
+ }
+ break;
+ default:
+ IRationale rationale = job.getCompletionRationale();
+ if(rationale != null) {
+ sb.append("<span title=\""+rationale+"\">");
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ sb.append("</span>");
+ }
+ else {
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ }
+ break;
}
- break;
}
row.add(new JsonPrimitive(sb.toString()));
// Allocation
sb = new StringBuffer();
sb.append("<span>");
- sb.append(reservation.getSchedulingInfo().getInstancesCount());
- sb.append("</sppn>");
+ sb.append(duccwork.getSchedulingInfo().getInstancesCount());
+ sb.append("</span>");
row.add(new JsonPrimitive(sb.toString()));
- //
- TreeMap<String,Integer> nodeMap = new TreeMap<String,Integer>();
- if(!reservation.getReservationMap().isEmpty()) {
- IDuccReservationMap map = reservation.getReservationMap();
- for (DuccId key : map.keySet()) {
- IDuccReservation value = reservation.getReservationMap().get(key);
- String node = value.getNodeIdentity().getName();
- if(!nodeMap.containsKey(node)) {
- nodeMap.put(node,new Integer(0));
- }
- Integer count = nodeMap.get(node);
- count++;
- nodeMap.put(node,count);
- }
- }
// User Processes
sb = new StringBuffer();
- boolean qualify = false;
- if(!nodeMap.isEmpty()) {
- if(nodeMap.keySet().size() > 1) {
- qualify = true;
+ TreeMap<String,Integer> nodeMap = new TreeMap<String,Integer>();
+ if(duccwork instanceof DuccWorkReservation) {
+ DuccWorkReservation reservation = (DuccWorkReservation) duccwork;
+ if(!reservation.getReservationMap().isEmpty()) {
+ IDuccReservationMap map = reservation.getReservationMap();
+ for (DuccId key : map.keySet()) {
+ IDuccReservation value = reservation.getReservationMap().get(key);
+ String node = value.getNodeIdentity().getName();
+ if(!nodeMap.containsKey(node)) {
+ nodeMap.put(node,new Integer(0));
+ }
+ Integer count = nodeMap.get(node);
+ count++;
+ nodeMap.put(node,count);
+ }
}
- }
- sb.append("<span>");
- ArrayList<String> qualifiedPids = new ArrayList<String>();
- if(reservation.isOperational()) {
- DuccMachinesData machinesData = DuccMachinesData.getInstance();
- for (String node: nodeMap.keySet()) {
- NodeId nodeId = new NodeId(node);
- List<String> nodePids = machinesData.getPids(nodeId, userId);
- for( String pid : nodePids ) {
- if(qualify) {
- qualifiedPids.add(node+":"+pid);
- }
- else {
- qualifiedPids.add(pid);
+
+ boolean qualify = false;
+ if(!nodeMap.isEmpty()) {
+ if(nodeMap.keySet().size() > 1) {
+ qualify = true;
+ }
+ }
+ ArrayList<String> qualifiedPids = new ArrayList<String>();
+ if(duccwork.isOperational()) {
+ DuccMachinesData machinesData = DuccMachinesData.getInstance();
+ for (String node: nodeMap.keySet()) {
+ NodeId nodeId = new NodeId(node);
+ List<String> nodePids = machinesData.getPids(nodeId, userId);
+ for( String pid : nodePids ) {
+ if(qualify) {
+ qualifiedPids.add(node+":"+pid);
+ }
+ else {
+ qualifiedPids.add(pid);
+ }
}
}
}
- }
- if(qualifiedPids.size() > 0) {
- String list = "";
- for( String entry : qualifiedPids ) {
- list += entry+" ";
+ if(qualifiedPids.size() > 0) {
+ String list = "";
+ for( String entry : qualifiedPids ) {
+ list += entry+" ";
+ }
+ sb.append("<span title=\""+list.trim()+"\">");
+ sb.append(""+qualifiedPids.size());
+ sb.append("</span>");
+ }
+ else {
+ sb.append(""+qualifiedPids.size());
}
- sb.append("<span title=\""+list.trim()+"\">");
- sb.append(""+qualifiedPids.size());
- sb.append("</span>");
}
else {
- sb.append(""+qualifiedPids.size());
+ DuccWorkJob job = (DuccWorkJob) duccwork;
+ if(job.isOperational()) {
+ sb.append(duccwork.getSchedulingInfo().getInstancesCount());
+ }
+ else {
+ sb.append("0");
+ }
}
- sb.append("</span>");
row.add(new JsonPrimitive(sb.toString()));
// Size
sb = new StringBuffer();
sb.append("<span>");
- String size = reservation.getSchedulingInfo().getShareMemorySize();
- MemoryUnits units = reservation.getSchedulingInfo().getShareMemoryUnits();
+ String size = duccwork.getSchedulingInfo().getShareMemorySize();
+ MemoryUnits units = duccwork.getSchedulingInfo().getShareMemoryUnits();
sb.append(getProcessMemorySize(duccId,type,size,units));
sb.append("</span>");
row.add(new JsonPrimitive(sb.toString()));
@@ -718,12 +805,54 @@ public class DuccHandlerJsonFormat exten
// Description
sb = new StringBuffer();
sb.append("<span>");
- sb.append(stringNormalize(reservation.getStandardInfo().getDescription(),messages.fetch("none")));
+ sb.append(stringNormalize(duccwork.getStandardInfo().getDescription(),messages.fetch("none")));
sb.append("</span>");
row.add(new JsonPrimitive(sb.toString()));
return row;
}
+
+ private boolean isListEligible(ArrayList<String> users, FilterUsersStyle filterUsersStyle, String user, boolean completed) {
+ boolean list = false;
+ if(!users.isEmpty()) {
+ switch(filterUsersStyle) {
+ case IncludePlusActive:
+ if(!completed) {
+ list = true;
+ }
+ else if(users.contains(user)) {
+ list = true;
+ }
+ break;
+ case ExcludePlusActive:
+ if(!completed) {
+ list = true;
+ }
+ else if(!users.contains(user)) {
+ list = true;
+ }
+ break;
+ case Include:
+ if(users.contains(user)) {
+ list = true;
+ }
+ break;
+ case Exclude:
+ if(!users.contains(user)) {
+ list = true;
+ }
+ break;
+ }
+ }
+ else {
+ if(!completed) {
+ list = true;
+ }
+ else
+ list = true;
+ }
+ return list;
+ }
private void handleServletJsonFormatReservationsAaData(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException
@@ -735,79 +864,104 @@ public class DuccHandlerJsonFormat exten
JsonArray data = new JsonArray();
int maxRecords = getReservationsMax(request);
- ArrayList<String> users = getReservationsUsers(request);
+
DuccData duccData = DuccData.getInstance();
+
ConcurrentSkipListMap<ReservationInfo,ReservationInfo> sortedReservations = duccData.getSortedReservations();
+ ConcurrentSkipListMap<JobInfo, JobInfo> sortedServices = duccData.getSortedServices();
+ ConcurrentSkipListMap<Long, Object> sortedCombined = new ConcurrentSkipListMap<Long, Object>();
+
+ ArrayList<String> users = getReservationsUsers(request);
FilterUsersStyle filterUsersStyle = getFilterUsersStyle(request);
- if(sortedReservations.size()> 0) {
- Iterator<Entry<ReservationInfo, ReservationInfo>> iterator = sortedReservations.entrySet().iterator();
- int counter = 0;
- while(iterator.hasNext()) {
- ReservationInfo reservationInfo = iterator.next().getValue();
+
+ if((sortedReservations.size() > 0) || (sortedServices.size() > 0)) {
+ Iterator<Entry<ReservationInfo, ReservationInfo>> iR = sortedReservations.entrySet().iterator();
+ while(iR.hasNext()) {
+ ReservationInfo reservationInfo = iR.next().getValue();
DuccWorkReservation reservation = reservationInfo.getReservation();
- boolean list = false;
- if(!users.isEmpty()) {
- String reservationUser =reservation.getStandardInfo().getUser().trim();
- switch(filterUsersStyle) {
- case IncludePlusActive:
- if(!reservation.isCompleted()) {
- list = true;
- }
- else if(users.contains(reservationUser)) {
- if(maxRecords > 0) {
- if (counter++ < maxRecords) {
- list = true;
- }
- }
- }
- break;
- case ExcludePlusActive:
- if(!reservation.isCompleted()) {
- list = true;
- }
- else if(!users.contains(reservationUser)) {
- if(maxRecords > 0) {
- if (counter++ < maxRecords) {
- list = true;
- }
- }
- }
- break;
- case Include:
- if(users.contains(reservationUser)) {
- if(maxRecords > 0) {
- if (counter++ < maxRecords) {
- list = true;
- }
- }
- }
- break;
- case Exclude:
- if(!users.contains(reservationUser)) {
- if(maxRecords > 0) {
- if (counter++ < maxRecords) {
- list = true;
- }
- }
- }
- break;
- }
+ String user = reservation.getStandardInfo().getUser().trim();
+ boolean completed = reservation.isCompleted();
+ if(isListEligible(users, filterUsersStyle, user, completed)) {
+ Long key = new Long(reservation.getDuccId().getFriendly());
+ sortedCombined.put(key, reservation);
}
- else {
- if(!reservation.isCompleted()) {
- list = true;
- }
- else if(maxRecords > 0) {
- if (counter++ < maxRecords) {
- list = true;
- }
+ }
+ Iterator<Entry<JobInfo, JobInfo>> iS = sortedServices.entrySet().iterator();
+ while(iS.hasNext()) {
+ JobInfo jobInfo = iS.next().getValue();
+ DuccWorkJob job = jobInfo.getJob();
+ ServiceDeploymentType sdt = job.getServiceDeploymentType();
+ switch(sdt) {
+ case uima:
+ case custom:
+ default:
+ break;
+ case other:
+ String user = job.getStandardInfo().getUser().trim();
+ boolean completed = job.isCompleted();
+ if(isListEligible(users, filterUsersStyle, user, completed)) {
+ Long key = new Long(job.getDuccId().getFriendly());
+ sortedCombined.put(key, job);
}
+ break;
}
- if(list) {
- JsonArray row = buildReservationRow(request, reservation, duccData);
- data.add(row);
+ }
+ if(sortedCombined.size() > 0) {
+ int counter = 0;
+ Iterator<Long> keys = sortedCombined.descendingKeySet().iterator();
+ while(keys.hasNext()) {
+ Long key = keys.next();
+ Object object = sortedCombined.get(key);
+ if(object instanceof DuccWorkReservation) {
+ DuccWorkReservation reservation = (DuccWorkReservation) object;
+ JsonArray row = buildReservationRow(request, reservation, duccData);
+ data.add(row);
+ }
+ else if(object instanceof DuccWorkJob) {
+ DuccWorkJob job = (DuccWorkJob) object;
+ JsonArray row = buildReservationRow(request, job, duccData);
+ data.add(row);
+ }
+ else {
+ // huh?
+ }
+ if(counter++ > maxRecords) {
+ break;
+ }
}
}
+ else {
+ JsonArray row = new JsonArray();
+ // Terminate
+ row.add(new JsonPrimitive("no reservations meet criteria"));
+ // Id
+ row.add(new JsonPrimitive(""));
+ // Start
+ row.add(new JsonPrimitive(""));
+ // End
+ row.add(new JsonPrimitive(""));
+ // User
+ row.add(new JsonPrimitive(""));
+ // Class
+ row.add(new JsonPrimitive(""));
+ // Type
+ row.add(new JsonPrimitive(""));
+ // State
+ row.add(new JsonPrimitive(""));
+ // Reason
+ row.add(new JsonPrimitive(""));
+ // Allocation
+ row.add(new JsonPrimitive(""));
+ // User Processes
+ row.add(new JsonPrimitive(""));
+ // Size
+ row.add(new JsonPrimitive(""));
+ // List
+ row.add(new JsonPrimitive(""));
+ // Description
+ row.add(new JsonPrimitive(""));
+ data.add(row);
+ }
}
else {
JsonArray row = new JsonArray();
@@ -829,6 +983,8 @@ public class DuccHandlerJsonFormat exten
row.add(new JsonPrimitive(""));
// Class
row.add(new JsonPrimitive(""));
+ // Type
+ row.add(new JsonPrimitive(""));
// State
row.add(new JsonPrimitive(""));
// Reason
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java?rev=1449197&r1=1449196&r2=1449197&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerLegacy.java Fri Feb 22 20:21:46 2013
@@ -50,8 +50,9 @@ import org.apache.uima.ducc.transport.ev
import org.apache.uima.ducc.transport.event.common.IDuccReservation;
import org.apache.uima.ducc.transport.event.common.IDuccReservationMap;
import org.apache.uima.ducc.transport.event.common.IDuccUnits.MemoryUnits;
+import org.apache.uima.ducc.transport.event.common.IDuccWorkService.ServiceDeploymentType;
+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.IDuccWorkReservation;
import org.apache.uima.ducc.transport.event.common.IRationale;
import org.apache.uima.ducc.ws.DuccDaemonsData;
import org.apache.uima.ducc.ws.DuccData;
@@ -419,20 +420,28 @@ public class DuccHandlerLegacy extends D
duccLogger.trace(methodName, jobid, messages.fetch("exit"));
}
- private void buildReservationsListEntry(HttpServletRequest request, StringBuffer sb, DuccId duccId, IDuccWorkReservation reservation, DuccData duccData) {
+ private void buildReservationsListEntry(HttpServletRequest request, StringBuffer sb, DuccId duccId, IDuccWork duccwork, DuccData duccData) {
String type="Reservation";
String id = normalize(duccId);
sb.append("<td class=\"ducc-col-terminate\">");
if(terminateEnabled) {
- if(!reservation.isCompleted()) {
- String disabled = getDisabled(request,reservation);
- String user = reservation.getStandardInfo().getUser();
+ if(!duccwork.isCompleted()) {
+ String disabled = getDisabled(request,duccwork);
+ String user = duccwork.getStandardInfo().getUser();
if(user != null) {
if(user.equals(JdConstants.reserveUser)) {
disabled = "disabled=\"disabled\"";
}
}
- sb.append("<input type=\"button\" onclick=\"ducc_confirm_terminate_reservation("+id+")\" value=\"Terminate\" "+disabled+"/>");
+ if(duccwork instanceof DuccWorkReservation) {
+ sb.append("<input type=\"button\" onclick=\"ducc_confirm_terminate_reservation("+id+")\" value=\"Terminate\" "+disabled+"/>");
+ }
+ else if(duccwork instanceof DuccWorkJob) {
+ sb.append("<input type=\"button\" onclick=\"ducc_confirm_terminate_service("+id+")\" value=\"Terminate\" "+disabled+"/>");
+ }
+ else {
+ //huh?
+ }
}
}
sb.append("</td>");
@@ -442,36 +451,57 @@ public class DuccHandlerLegacy extends D
sb.append("</td>");
// Start
sb.append("<td>");
- sb.append(getTimeStamp(request,reservation.getDuccId(),reservation.getStandardInfo().getDateOfSubmission()));
+ sb.append(getTimeStamp(request,duccwork.getDuccId(),duccwork.getStandardInfo().getDateOfSubmission()));
sb.append("</td>");
// End
sb.append("<td>");
- switch(reservation.getReservationState()) {
- case Completed:
- sb.append(getTimeStamp(request,reservation.getDuccId(),reservation.getStandardInfo().getDateOfCompletion()));
- break;
- default:
- break;
+ if(duccwork instanceof DuccWorkReservation) {
+ DuccWorkReservation reservation = (DuccWorkReservation) duccwork;
+ switch(reservation.getReservationState()) {
+ case Completed:
+ sb.append(getTimeStamp(request,duccwork.getDuccId(),duccwork.getStandardInfo().getDateOfCompletion()));
+ break;
+ default:
+ break;
+ }
+ }
+ else if(duccwork instanceof DuccWorkJob) {
+ DuccWorkJob job = (DuccWorkJob) duccwork;
+ switch(job.getJobState()) {
+ case Completed:
+ sb.append(getTimeStamp(request,duccwork.getDuccId(),duccwork.getStandardInfo().getDateOfCompletion()));
+ break;
+ default:
+ break;
+ }
}
sb.append("</td>");
// User
String title = "";
- String submitter = reservation.getStandardInfo().getSubmitter();
+ String submitter = duccwork.getStandardInfo().getSubmitter();
if(submitter != null) {
- title = " title=\"reservation submitter PID@host: "+submitter+"\"";
+ title = " title=\"submitter PID@host: "+submitter+"\"";
}
sb.append("<td"+title+">");
- UserId userId = new UserId(reservation.getStandardInfo().getUser());
+ UserId userId = new UserId(duccwork.getStandardInfo().getUser());
sb.append(userId.toString());
sb.append("</td>");
// Class
sb.append("<td>");
- sb.append(stringNormalize(reservation.getSchedulingInfo().getSchedulingClass(),messages.fetch("default")));
+ sb.append(stringNormalize(duccwork.getSchedulingInfo().getSchedulingClass(),messages.fetch("default")));
+ sb.append("</td>");
+ // Type
+ String reservationType = "Unmanaged";
+ if(duccwork instanceof DuccWorkJob) {
+ reservationType = "Managed";
+ }
+ sb.append("<td>");
+ sb.append(reservationType);
sb.append("</td>");
// State
sb.append("<td>");
if(duccData.isLive(duccId)) {
- if(reservation.isOperational()) {
+ if(duccwork.isOperational()) {
sb.append("<span class=\"active_state\">");
}
else {
@@ -481,144 +511,258 @@ public class DuccHandlerLegacy extends D
else {
sb.append("<span class=\"historic_state\">");
}
- sb.append(reservation.getStateObject().toString());
+ sb.append(duccwork.getStateObject().toString());
if(duccData.isLive(duccId)) {
sb.append("</span>");
}
sb.append("</td>");
// Reason
sb.append("<td>");
- switch(reservation.getCompletionType()) {
- case Undefined:
- break;
- case CanceledByUser:
- case CanceledByAdmin:
- try {
- String cancelUser = reservation.getStandardInfo().getCancelUser();
- if(cancelUser != null) {
- sb.append("<span title=\"canceled by "+cancelUser+"\">");
- sb.append(reservation.getCompletionTypeObject().toString());
- sb.append("</span>");
- }
- else {
+ if(duccwork instanceof DuccWorkReservation) {
+ DuccWorkReservation reservation = (DuccWorkReservation) duccwork;
+ switch(reservation.getCompletionType()) {
+ case Undefined:
+ break;
+ case CanceledByUser:
+ case CanceledByAdmin:
+ try {
+ String cancelUser = duccwork.getStandardInfo().getCancelUser();
+ if(cancelUser != null) {
+ sb.append("<span title=\"canceled by "+cancelUser+"\">");
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ sb.append("</span>");
+ }
+ else {
+ IRationale rationale = reservation.getCompletionRationale();
+ if(rationale != null) {
+ sb.append("<span title=\""+rationale+"\">");
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ sb.append("</span>");
+ }
+ else {
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ }
+
+ }
+ }
+ catch(Exception e) {
IRationale rationale = reservation.getCompletionRationale();
if(rationale != null) {
sb.append("<span title=\""+rationale+"\">");
- sb.append(reservation.getCompletionTypeObject().toString());
+ sb.append(duccwork.getCompletionTypeObject().toString());
sb.append("</span>");
}
else {
- sb.append(reservation.getCompletionTypeObject().toString());
+ sb.append(duccwork.getCompletionTypeObject().toString());
}
-
}
- }
- catch(Exception e) {
+ break;
+ default:
IRationale rationale = reservation.getCompletionRationale();
if(rationale != null) {
sb.append("<span title=\""+rationale+"\">");
- sb.append(reservation.getCompletionTypeObject().toString());
+ sb.append(duccwork.getCompletionTypeObject().toString());
sb.append("</span>");
}
else {
- sb.append(reservation.getCompletionTypeObject().toString());
+ sb.append(duccwork.getCompletionTypeObject().toString());
}
+ break;
}
- break;
- default:
- IRationale rationale = reservation.getCompletionRationale();
- if(rationale != null) {
- sb.append("<span title=\""+rationale+"\">");
- sb.append(reservation.getCompletionTypeObject().toString());
- sb.append("</span>");
- }
- else {
- sb.append(reservation.getCompletionTypeObject().toString());
+ }
+ else if(duccwork instanceof DuccWorkJob) {
+ DuccWorkJob job = (DuccWorkJob) duccwork;
+ switch(job.getCompletionType()) {
+ case Undefined:
+ break;
+ case CanceledByUser:
+ case CanceledByAdministrator:
+ try {
+ String cancelUser = duccwork.getStandardInfo().getCancelUser();
+ if(cancelUser != null) {
+ sb.append("<span title=\"canceled by "+cancelUser+"\">");
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ sb.append("</span>");
+ }
+ else {
+ IRationale rationale = job.getCompletionRationale();
+ if(rationale != null) {
+ sb.append("<span title=\""+rationale+"\">");
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ sb.append("</span>");
+ }
+ else {
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ }
+
+ }
+ }
+ catch(Exception e) {
+ IRationale rationale = job.getCompletionRationale();
+ if(rationale != null) {
+ sb.append("<span title=\""+rationale+"\">");
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ sb.append("</span>");
+ }
+ else {
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ }
+ }
+ break;
+ default:
+ IRationale rationale = job.getCompletionRationale();
+ if(rationale != null) {
+ sb.append("<span title=\""+rationale+"\">");
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ sb.append("</span>");
+ }
+ else {
+ sb.append(duccwork.getCompletionTypeObject().toString());
+ }
+ break;
}
- break;
}
sb.append("</td>");
// Allocation
sb.append("<td align=\"right\">");
- sb.append(reservation.getSchedulingInfo().getInstancesCount());
+ sb.append(duccwork.getSchedulingInfo().getInstancesCount());
sb.append("</td>");
- //
- TreeMap<String,Integer> nodeMap = new TreeMap<String,Integer>();
- if(!reservation.getReservationMap().isEmpty()) {
- IDuccReservationMap map = reservation.getReservationMap();
- for (DuccId key : map.keySet()) {
- IDuccReservation value = reservation.getReservationMap().get(key);
- String node = value.getNodeIdentity().getName();
- if(!nodeMap.containsKey(node)) {
- nodeMap.put(node,new Integer(0));
- }
- Integer count = nodeMap.get(node);
- count++;
- nodeMap.put(node,count);
- }
- }
// User Processes
- boolean qualify = false;
- if(!nodeMap.isEmpty()) {
- if(nodeMap.keySet().size() > 1) {
- qualify = true;
- }
- }
sb.append("<td align=\"right\">");
- ArrayList<String> qualifiedPids = new ArrayList<String>();
- if(reservation.isOperational()) {
- DuccMachinesData machinesData = DuccMachinesData.getInstance();
- for (String node: nodeMap.keySet()) {
- NodeId nodeId = new NodeId(node);
- List<String> nodePids = machinesData.getPids(nodeId, userId);
- for( String pid : nodePids ) {
- if(qualify) {
- qualifiedPids.add(node+":"+pid);
- }
- else {
- qualifiedPids.add(pid);
+ TreeMap<String,Integer> nodeMap = new TreeMap<String,Integer>();
+ if(duccwork instanceof DuccWorkReservation) {
+ DuccWorkReservation reservation = (DuccWorkReservation) duccwork;
+ if(!reservation.getReservationMap().isEmpty()) {
+ IDuccReservationMap map = reservation.getReservationMap();
+ for (DuccId key : map.keySet()) {
+ IDuccReservation value = reservation.getReservationMap().get(key);
+ String node = value.getNodeIdentity().getName();
+ if(!nodeMap.containsKey(node)) {
+ nodeMap.put(node,new Integer(0));
+ }
+ Integer count = nodeMap.get(node);
+ count++;
+ nodeMap.put(node,count);
+ }
+ }
+
+ boolean qualify = false;
+ if(!nodeMap.isEmpty()) {
+ if(nodeMap.keySet().size() > 1) {
+ qualify = true;
+ }
+ }
+ ArrayList<String> qualifiedPids = new ArrayList<String>();
+ if(duccwork.isOperational()) {
+ DuccMachinesData machinesData = DuccMachinesData.getInstance();
+ for (String node: nodeMap.keySet()) {
+ NodeId nodeId = new NodeId(node);
+ List<String> nodePids = machinesData.getPids(nodeId, userId);
+ for( String pid : nodePids ) {
+ if(qualify) {
+ qualifiedPids.add(node+":"+pid);
+ }
+ else {
+ qualifiedPids.add(pid);
+ }
}
}
}
- }
- if(qualifiedPids.size() > 0) {
- String list = "";
- for( String entry : qualifiedPids ) {
- list += entry+" ";
+ if(qualifiedPids.size() > 0) {
+ String list = "";
+ for( String entry : qualifiedPids ) {
+ list += entry+" ";
+ }
+ sb.append("<span title=\""+list.trim()+"\">");
+ sb.append(""+qualifiedPids.size());
+ sb.append("</span>");
+ }
+ else {
+ sb.append(""+qualifiedPids.size());
}
- sb.append("<span title=\""+list.trim()+"\">");
- sb.append(""+qualifiedPids.size());
- sb.append("</span>");
}
else {
- sb.append(""+qualifiedPids.size());
+ DuccWorkJob job = (DuccWorkJob) duccwork;
+ if(job.isOperational()) {
+ sb.append(duccwork.getSchedulingInfo().getInstancesCount());
+ }
+ else {
+ sb.append("0");
+ }
}
sb.append("</td>");
// Size
sb.append("<td align=\"right\">");
- String size = reservation.getSchedulingInfo().getShareMemorySize();
- MemoryUnits units = reservation.getSchedulingInfo().getShareMemoryUnits();
+ String size = duccwork.getSchedulingInfo().getShareMemorySize();
+ MemoryUnits units = duccwork.getSchedulingInfo().getShareMemoryUnits();
sb.append(getProcessMemorySize(duccId,type,size,units));
sb.append("</td>");
// List
sb.append("<td>");
- if(!nodeMap.isEmpty()) {
- sb.append("<select>");
- for (String node: nodeMap.keySet()) {
- Integer count = nodeMap.get(node);
- String option = node+" "+"["+count+"]";
- sb.append("<option>"+option+"</option>");
+ if(duccwork instanceof DuccWorkReservation) {
+ if(!nodeMap.isEmpty()) {
+ sb.append("<select>");
+ for (String node: nodeMap.keySet()) {
+ Integer count = nodeMap.get(node);
+ String option = node+" "+"["+count+"]";
+ sb.append("<option>"+option+"</option>");
+ }
+ sb.append("</select>");
}
- sb.append("</select>");
+ }
+ else {
+ //TODO
}
sb.append("</td>");
// Description
sb.append("<td>");
- sb.append(stringNormalize(reservation.getStandardInfo().getDescription(),messages.fetch("none")));
+ sb.append(stringNormalize(duccwork.getStandardInfo().getDescription(),messages.fetch("none")));
sb.append("</td>");
sb.append("</tr>");
}
+ private boolean isListEligible(ArrayList<String> users, FilterUsersStyle filterUsersStyle, String user, boolean completed) {
+ boolean list = false;
+ if(!users.isEmpty()) {
+ switch(filterUsersStyle) {
+ case IncludePlusActive:
+ if(!completed) {
+ list = true;
+ }
+ else if(users.contains(user)) {
+ list = true;
+ }
+ break;
+ case ExcludePlusActive:
+ if(!completed) {
+ list = true;
+ }
+ else if(!users.contains(user)) {
+ list = true;
+ }
+ break;
+ case Include:
+ if(users.contains(user)) {
+ list = true;
+ }
+ break;
+ case Exclude:
+ if(!users.contains(user)) {
+ list = true;
+ }
+ break;
+ }
+ }
+ else {
+ if(!completed) {
+ list = true;
+ }
+ else
+ list = true;
+ }
+ return list;
+ }
+
private void handleServletLegacyReservations(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException
{
@@ -627,78 +771,76 @@ public class DuccHandlerLegacy extends D
StringBuffer sb = new StringBuffer();
int maxRecords = getReservationsMax(request);
- ArrayList<String> users = getReservationsUsers(request);
+
DuccData duccData = DuccData.getInstance();
+
ConcurrentSkipListMap<ReservationInfo,ReservationInfo> sortedReservations = duccData.getSortedReservations();
+ ConcurrentSkipListMap<JobInfo, JobInfo> sortedServices = duccData.getSortedServices();
+ ConcurrentSkipListMap<Long, Object> sortedCombined = new ConcurrentSkipListMap<Long, Object>();
+
+ ArrayList<String> users = getReservationsUsers(request);
FilterUsersStyle filterUsersStyle = getFilterUsersStyle(request);
- if(sortedReservations.size()> 0) {
- Iterator<Entry<ReservationInfo, ReservationInfo>> iterator = sortedReservations.entrySet().iterator();
- int counter = 0;
- while(iterator.hasNext()) {
- ReservationInfo reservationInfo = iterator.next().getValue();
+
+ if((sortedReservations.size() > 0) || (sortedServices.size() > 0)) {
+ Iterator<Entry<ReservationInfo, ReservationInfo>> iR = sortedReservations.entrySet().iterator();
+ while(iR.hasNext()) {
+ ReservationInfo reservationInfo = iR.next().getValue();
DuccWorkReservation reservation = reservationInfo.getReservation();
- boolean list = false;
- if(!users.isEmpty()) {
- String reservationUser = reservation.getStandardInfo().getUser().trim();
- switch(filterUsersStyle) {
- case IncludePlusActive:
- if(!reservation.isCompleted()) {
- list = true;
- }
- else if(users.contains(reservationUser)) {
- if(maxRecords > 0) {
- if (counter++ < maxRecords) {
- list = true;
- }
- }
- }
- break;
- case ExcludePlusActive:
- if(!reservation.isCompleted()) {
- list = true;
- }
- else if(!users.contains(reservationUser)) {
- if(maxRecords > 0) {
- if (counter++ < maxRecords) {
- list = true;
- }
- }
- }
- break;
- case Include:
- if(users.contains(reservationUser)) {
- if(maxRecords > 0) {
- if (counter++ < maxRecords) {
- list = true;
- }
- }
- }
- break;
- case Exclude:
- if(!users.contains(reservationUser)) {
- if(maxRecords > 0) {
- if (counter++ < maxRecords) {
- list = true;
- }
- }
- }
- break;
- }
+ String user = reservation.getStandardInfo().getUser().trim();
+ boolean completed = reservation.isCompleted();
+ if(isListEligible(users, filterUsersStyle, user, completed)) {
+ Long key = new Long(reservation.getDuccId().getFriendly());
+ sortedCombined.put(key, reservation);
}
- else {
- if(!reservation.isCompleted()) {
- list = true;
+ }
+ Iterator<Entry<JobInfo, JobInfo>> iS = sortedServices.entrySet().iterator();
+ while(iS.hasNext()) {
+ JobInfo jobInfo = iS.next().getValue();
+ DuccWorkJob job = jobInfo.getJob();
+ ServiceDeploymentType sdt = job.getServiceDeploymentType();
+ switch(sdt) {
+ case uima:
+ case custom:
+ default:
+ break;
+ case other:
+ String user = job.getStandardInfo().getUser().trim();
+ boolean completed = job.isCompleted();
+ if(isListEligible(users, filterUsersStyle, user, completed)) {
+ Long key = new Long(job.getDuccId().getFriendly());
+ sortedCombined.put(key, job);
+ }
+ break;
+ }
+ }
+ if(sortedCombined.size() > 0) {
+ int counter = 0;
+ Iterator<Long> keys = sortedCombined.descendingKeySet().iterator();
+ while(keys.hasNext()) {
+ Long key = keys.next();
+ Object object = sortedCombined.get(key);
+ if(object instanceof DuccWorkReservation) {
+ DuccWorkReservation reservation = (DuccWorkReservation) object;
+ sb.append(trGet(counter));
+ buildReservationsListEntry(request, sb, reservation.getDuccId(), reservation, duccData);
+ }
+ else if(object instanceof DuccWorkJob) {
+ DuccWorkJob job = (DuccWorkJob) object;
+ sb.append(trGet(counter));
+ buildReservationsListEntry(request, sb, job.getDuccId(), job, duccData);
}
- else if(maxRecords > 0) {
- if (counter++ < maxRecords) {
- list = true;
- }
+ else {
+ // huh?
+ }
+ if(counter++ > maxRecords) {
+ break;
}
}
- if(list) {
- sb.append(trGet(counter));
- buildReservationsListEntry(request, sb, reservation.getDuccId(), reservation, duccData);
- }
+ }
+ else {
+ sb.append("<tr>");
+ sb.append("<td>");
+ sb.append(messages.fetch("no reservations meet criteria"));
}
}
else {
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/reservations.jsp
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/reservations.jsp?rev=1449197&r1=1449196&r2=1449197&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/reservations.jsp (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/webapp/root/reservations.jsp Fri Feb 22 20:21:46 2013
@@ -17,49 +17,12 @@ specific language governing permissions
under the License.
-->
<%@ page language="java" %>
-<%
-String table_style = "scroll";
-String cookieName = "ducc:table_style";
-String cookieValue = null;
-Cookie cookie = null;
-Cookie cookies [] = request.getCookies ();
-if (cookies != null)
-{
- for (int i = 0; i < cookies.length; i++)
- {
- if (cookies [i].getName().equals (cookieName))
- {
- cookie = cookies[i];
- cookieValue = cookie.getValue();
- if(cookieValue != null) {
- table_style = cookieValue;
- }
- break;
- }
- }
-}
-%>
<html>
<head>
<link rel="shortcut icon" href="uima.ico" />
<title>ducc-mon</title>
<meta http-equiv="CACHE-CONTROL" content="NO-CACHE">
- <script src="opensources/jquery-1.4.2.js" type="text/javascript"></script>
-<%
-if (table_style.equals("scroll")) {
-%>
- <script type="text/javascript" language="javascript" src="opensources/DataTables-1.9.1/media/js/jquery.dataTables.min.js"></script>
- <script type="text/javascript" language="javascript" src="opensources/DataTables-plugins/fnReloadAjax.js"></script>
-<%
-}
-%>
- <script src="opensources/jgrowl/jquery.jgrowl.js" type="text/javascript"></script>
- <link rel="stylesheet" href="opensources/jgrowl/jquery.jgrowl.css" type="text/css"/>
- <link href="opensources/jquery-ui-1.8.4/gallery/jquery-ui-themes-1.8.4/themes/redmond/jquery-ui.css" rel="stylesheet" type="text/css"/>
- <script src="opensources/jquery-ui-1.8.4/ui/minified/jquery-ui.min.js"></script>
- <link href="opensources/navigation/menu.css" rel="stylesheet" type="text/css">
- <script src="js/ducc.js"></script>
- <link href="ducc.css" rel="stylesheet" type="text/css">
+ <%@ include file="$imports.jsp" %>
<%
if (table_style.equals("scroll")) {
%>
@@ -79,9 +42,9 @@ if (table_style.equals("scroll")) {
"fnRowCallback" : function(nRow,aData,iDisplayIndex) {
$('td:eq(0)', nRow).css( "text-align", "right" );
$('td:eq(1)', nRow).css( "text-align", "right" );
- $('td:eq(8)', nRow).css( "text-align", "right" );
$('td:eq(9)', nRow).css( "text-align", "right" );
$('td:eq(10)', nRow).css( "text-align", "right" );
+ $('td:eq(11)', nRow).css( "text-align", "right" );
return nRow;
},
} );
@@ -90,13 +53,6 @@ if (table_style.equals("scroll")) {
<%
}
%>
-<%
-if (table_style.equals("classic")) {
-%>
-<script type="text/javascript" src="opensources/sorttable.js"></script>
-<%
-}
-%>
</head>
<body onload="ducc_init('reservations');" onResize="window.location.href = window.location.href;">
@@ -141,30 +97,6 @@ if (table_style.equals("classic")) {
<%
if (table_style.equals("scroll")) {
%>
-<!--
- <table id="reservations-table" width="100%">
- <caption><b>Reservations List</b><br><i><small>click column heading to sort</small></i></caption>
- <thead>
- <tr class="ducc-header">
- <th class="ducc-col-terminate"></th>
- <th title="The system assigned id for this reservation">Id</th>
- <th title="The time this reservation was submitted">Start</th>
- <th title="The time this reservation was finished">End</th>
- <th class="ducc-no-filter" id="user_column_heading" title="The user who submitted this reservation">User</th>
- <th title="The user specified class of this reservation">Class</th>
- <th title="The current state of this reservation">State</th>
- <th title="The reason for the final state of this reservation, normally CanceledByUser">Reason</th>
- <th title="The number of resources (machines or shares, depending on class) assigned to this reservation">Allocation</th>
- <th title="The combined number of PIDs on the assigned resource(s) for user">User<br>Processes</th>
- <th title="The memory allocation per resource for this reservation, in GB">Size</th>
- <th title="The list of of machines assigned to this reservation">List</th>
- <th title="The user specified description of this reservation">Description</th>
- </tr>
- </thead>
- <tbody id="reservations_list_area">
- </tbody>
- </table>
--->
<table id="reservations-table" width="100%">
<caption><b>Reservations List</b><br><i><small>click column heading to sort</small></i></caption>
<thead>
@@ -175,6 +107,7 @@ if (table_style.equals("scroll")) {
<th title="The time this reservation was finished">End</th>
<th class="ducc-no-filter" id="user_column_heading" title="The user who submitted this reservation">User</th>
<th title="The user specified class of this reservation">Class</th>
+ <th title="The type of this reservation">Type</th>
<th title="The current state of this reservation">State</th>
<th title="The reason for the final state of this reservation, normally CanceledByUser">Reason</th>
<th title="The number of resources (machines or shares, depending on class) assigned to this reservation">Allocation</th>