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 2016/11/21 17:56:15 UTC
svn commit: r1770727 - in
/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws:
DuccMachinesDataHelper.java MachineInfo.java server/DuccHandlerClassic.java
server/DuccHandlerJsonFormat.java
Author: degenaro
Date: Mon Nov 21 17:56:15 2016
New Revision: 1770727
URL: http://svn.apache.org/viewvc?rev=1770727&view=rev
Log:
UIMA-5181 DUCC Web Server (WS) Machines page usable memory size is wrong
Modified:
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesDataHelper.java
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/MachineInfo.java
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerJsonFormat.java
Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesDataHelper.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesDataHelper.java?rev=1770727&r1=1770726&r2=1770727&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesDataHelper.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesDataHelper.java Mon Nov 21 17:56:15 2016
@@ -47,17 +47,20 @@ public class DuccMachinesDataHelper {
}
/**
- * @param facts = facts of a machine
+ * @param facts = machineInfo of a machine
* @return true if "up" false otherwise
*/
- public static boolean isUp(MachineFacts facts) {
+ public static boolean isUp(MachineInfo machineInfo) {
boolean retVal = false;
- if(facts != null) {
- if(facts.status.equals("up")) {
+ if(machineInfo != null) {
+ if(machineInfo.getStatus().equals("up")) {
retVal = true;
}
}
return retVal;
}
-
+
+ public static boolean isUp(MachineFacts machineInfo) {
+ return false;
+ }
}
Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/MachineInfo.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/MachineInfo.java?rev=1770727&r1=1770726&r2=1770727&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/MachineInfo.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/MachineInfo.java Mon Nov 21 17:56:15 2016
@@ -512,8 +512,8 @@ public class MachineInfo implements Comp
case Up:
switch(v2) {
default:
- retVal = 1;
case Defined:
+ retVal = 1;
break;
case Down:
retVal = 1;
Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java?rev=1770727&r1=1770726&r2=1770727&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java Mon Nov 21 17:56:15 2016
@@ -26,7 +26,6 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
-import java.util.ListIterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
@@ -37,8 +36,6 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.uima.ducc.cli.ws.json.MachineFacts;
-import org.apache.uima.ducc.cli.ws.json.MachineFactsList;
import org.apache.uima.ducc.common.ConvertSafely;
import org.apache.uima.ducc.common.IDuccEnv;
import org.apache.uima.ducc.common.NodeConfiguration;
@@ -1614,6 +1611,175 @@ public class DuccHandlerClassic extends
duccLogger.trace(methodName, jobid, messages.fetch("exit"));
}
+ // Individual Machine
+ private void buildRowForIndividualMachine(StringBuffer data, int counter, MachineInfo machineInfo, SizeBytes allocated) {
+ StringBuffer row = new StringBuffer();
+ row.append((trGet(counter)));
+ StringBuffer sb = new StringBuffer();
+ // Status
+ String status = machineInfo.getStatus();
+ if(status == null) {
+ status = "?";
+ }
+ String hover = "title=\""+machineInfo.getMachineStatusReason()+"\"";
+ if(status.equals("down")) {
+ sb.append("<span "+hover+" class=\"health_red\""+">");
+ sb.append(status);
+ sb.append("</span>");
+ }
+ else if(status.equals("up")) {
+ sb.append("<span "+hover+"class=\"health_green\""+">");
+ sb.append(status);
+ sb.append("</span>");
+ }
+ else {
+ sb.append(status);
+ }
+ row.append("<td>");
+ row.append(sb);
+ row.append("</td>");
+ // IP
+ row.append("<td>");
+ row.append(machineInfo.getIp());
+ row.append("</td>");
+ // Name
+ row.append("<td>");
+ row.append(machineInfo.getName());
+ row.append("</td>");
+ // Nodepool
+ row.append("<td>");
+ String nodepool = DuccSchedulerClasses.getInstance().getNodepool(machineInfo.getName());
+ row.append(nodepool);
+ row.append("</td>");
+ // Memory: usable
+ if(status.equals("up")) {
+ sb = new StringBuffer();
+ sb.append("total="+machineInfo.getMemTotal());
+ Integer quantum = machineInfo.getQuantum();
+ if(quantum != null) {
+ sb.append(" ");
+ sb.append("quantum="+quantum);
+ }
+ hover = "title=\""+sb.toString()+"\"";
+ row.append("<td align=\"right\" "+hover+">");
+ row.append(machineInfo.getMemReserve());
+ row.append("</td>");
+ }
+ else if(status.equals("down")) {
+ row.append("<td align=\"right\">");
+ row.append("0");
+ row.append("</td>");
+ }
+ else {
+ row.append("<td align=\"right\">");
+ row.append("</td>");
+ }
+ // Memory: free
+ if(status.equals("up")) {
+ long memFree = ConvertSafely.String2Long(machineInfo.getMemReserve());
+ memFree = memFree - allocated.getGBytes();
+ row.append("<td align=\"right\">");
+ row.append(memFree);
+ row.append("</td>");
+ }
+ else if(status.equals("down")) {
+ row.append("<td align=\"right\">");
+ row.append("0");
+ row.append("</td>");
+ }
+ else {
+ row.append("<td align=\"right\">");
+ row.append("</td>");
+ }
+ // CPU: load average
+ row.append("<td align=\"right\">");
+ if(status.equals("up")) {
+ String cpu = formatter1.format(machineInfo.getCpu());
+ row.append(cpu);
+ }
+ row.append("</td>");
+ // Swap: inuse
+ sb = new StringBuffer();
+ String swapping = machineInfo.getSwapInuse();
+ if(swapping.equals("0")) {
+ sb.append(swapping);
+ }
+ else {
+ sb.append("<span class=\"health_red\">");
+ sb.append(swapping);
+ sb.append("</span>");
+ }
+ row.append("<td align=\"right\">");
+ if(!status.equals("defined")) {
+ row.append(sb);
+ }
+ row.append("</td>");
+ // Swap: free
+ row.append("<td align=\"right\">");
+ if(!status.equals("defined")) {
+ row.append(machineInfo.getSwapFree());
+ }
+ row.append("</td>");
+ // C-Groups
+ boolean isCgroupsEnabled = machineInfo.getCgroupsEnabled();
+ boolean isCgroupsCpuReportingEnabled = machineInfo.getCgroupsCpuReportingEnabled();
+ sb = new StringBuffer();
+ if(status.equals("up")) {
+ if(isCgroupsEnabled) {
+ if(isCgroupsCpuReportingEnabled) {
+ sb.append("<span title=\""+"control groups active"+"\" class=\"health_black\""+">");
+ sb.append("on");
+ sb.append("</span>");
+ }
+ else {
+ sb.append("<span title=\""+"control groups CPU reporting not configured"+"\" class=\"health_red\""+">");
+ sb.append("noCPU%");
+ sb.append("</span>");
+ }
+ }
+ else {
+ sb.append("<span title=\""+"control groups inactive"+"\" class=\"health_red\""+">");
+ sb.append("off");
+ sb.append("</span>");
+ }
+ }
+ String cgroups = sb.toString();
+ row.append("<td align=\"right\">");
+ row.append(""+cgroups);
+ row.append("</td>");
+ // Alien PIDs
+ sb = new StringBuffer();
+ long aliens = machineInfo.getAliens().size();
+ if(aliens == 0) {
+ sb.append(aliens);
+ }
+ else {
+ StringBuffer title = new StringBuffer();
+ title.append("title=");
+ title.append("\"");
+ for(String pid : machineInfo.getAliens()) {
+ title.append(pid+" ");
+ }
+ title.append("\"");
+ sb.append("<span class=\"health_red\" "+title+">");
+ sb.append(aliens);
+ sb.append("</span>");
+ }
+ row.append("<td align=\"right\">");
+ if(!status.equals("defined")) {
+ row.append(sb);
+ }
+ row.append("</td>");
+ // Heartbeat: last
+ row.append("<td align=\"right\">");
+ if(!status.equals("defined")) {
+ row.append(machineInfo.getHeartbeatLast());
+ }
+ row.append("</td>");
+ row.append("</tr>");
+ data.append(row);
+ }
+
private void handleServletClassicSystemMachines(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException
{
@@ -1623,52 +1789,46 @@ public class DuccHandlerClassic extends
long sumMemTotal = 0; // Memory(GB):reported by Agent
long sumMemFree = 0; // Memory(GB):free
long sumMemReserve = 0; // Memory(GB):usable
+ long sumMemAllocated = 0;
double sumCPU = 0;
long sumMachines = 0;
long sumSwapInuse = 0;
long sumSwapFree = 0;
long sumAliens = 0;
String hover;
- ListIterator<MachineFacts> listIterator;
StringBuffer row;
StringBuffer data = new StringBuffer();
+ StringBuffer individualMachines = new StringBuffer();
DuccMachinesData instance = DuccMachinesData.getInstance();
- MachineFactsList factsList = instance.getMachineFactsList();
- if(factsList.size() > 0) {
- // Total
- listIterator = factsList.listIterator();
- while(listIterator.hasNext()) {
- MachineFacts facts = listIterator.next();
- if(DuccMachinesDataHelper.isUp(facts)) {
+ Map<MachineInfo, NodeId> machines = instance.getMachines();
+ if(!machines.isEmpty()) {
+ Map<String, Long> allocatedMap = Distiller.getMap();
+ for(Entry<MachineInfo, NodeId> entry : machines.entrySet()) {
+ MachineInfo machineInfo = entry.getKey();
+ SizeBytes sb = new SizeBytes(Type.Bytes, 0);
+ if(DuccMachinesDataHelper.isUp(machineInfo)) {
try {
- sumMemTotal += ConvertSafely.String2Long(facts.memTotal);
+ sumMemTotal += ConvertSafely.String2Long(machineInfo.getMemTotal());
// Calculate total for Memory(GB):usable
- sumMemReserve += ConvertSafely.String2Long(facts.memReserve);
- sumSwapInuse += ConvertSafely.String2Long(facts.swapInuse);
- sumSwapFree += ConvertSafely.String2Long(facts.swapFree);
- sumCPU += facts.cpu;
+ sumMemReserve += ConvertSafely.String2Long(machineInfo.getMemReserve());
+ sumSwapInuse += ConvertSafely.String2Long(machineInfo.getSwapInuse());
+ sumSwapFree += ConvertSafely.String2Long(machineInfo.getSwapFree());
+ sumCPU += machineInfo.getCpu();
sumMachines += 1;
- sumAliens += facts.aliens.size();
+ sumAliens += machineInfo.getAlienPidsCount();
+ String machineName = machineInfo.getName();
+ long bytes = allocatedMap.get(machineName);
+ sumMemAllocated += bytes;
+ sb = new SizeBytes(Type.Bytes, bytes);
+ String text = "allocated "+machineName+"="+sb.getGBytes();
+ duccLogger.trace(methodName, jobid, text);
}
catch(Exception e) {
duccLogger.trace(methodName, jobid, e);
}
}
- }
- // Calculate total for Memory(GB):free
- Map<String, Long> allocatedMap = Distiller.getMap();
- long sumMemAllocated = 0;
- for(Entry<String, Long> entry : allocatedMap.entrySet()) {
- String name = entry.getKey();
- MachineFacts facts = DuccMachinesDataHelper.getMachineFacts(factsList, name);
- // Only consider "up" machines
- if(DuccMachinesDataHelper.isUp(facts)) {
- long bytes = entry.getValue();
- sumMemAllocated += bytes;
- SizeBytes sb = new SizeBytes(Type.Bytes, bytes);
- String text = "allocated "+facts.name+"="+sb.getGBytes();
- duccLogger.trace(methodName, jobid, text);
- }
+ buildRowForIndividualMachine(individualMachines, counter, machineInfo, sb);
+ counter++;
}
SizeBytes sbAllocated = new SizeBytes(Type.Bytes, sumMemAllocated);
sumMemFree = sumMemReserve - sbAllocated.getGBytes();
@@ -1726,185 +1886,9 @@ public class DuccHandlerClassic extends
row.append("");
row.append("</td>");
row.append("</tr>");
+ //
data.append(row);
- // Individual Machines
- listIterator = factsList.listIterator();
- while(listIterator.hasNext()) {
- MachineFacts facts = listIterator.next();
- row = new StringBuffer();
- row.append((trGet(counter)));
- // Status
- StringBuffer sb = new StringBuffer();
- String status = facts.status;
- if(status == null) {
- status = "?";
- }
- hover = "title=\""+facts.statusReason+"\"";
- if(status.equals("down")) {
- sb.append("<span "+hover+" class=\"health_red\""+">");
- sb.append(status);
- sb.append("</span>");
- }
- else if(status.equals("up")) {
- sb.append("<span "+hover+"class=\"health_green\""+">");
- sb.append(status);
- sb.append("</span>");
- }
- else {
- sb.append(status);
- }
- row.append("<td>");
- row.append(sb);
- row.append("</td>");
- // IP
- row.append("<td>");
- row.append(facts.ip);
- row.append("</td>");
- // Name
- row.append("<td>");
- row.append(facts.name);
- row.append("</td>");
- // Nodepool
- row.append("<td>");
- String nodepool = DuccSchedulerClasses.getInstance().getNodepool(facts.name);
- row.append(nodepool);
- row.append("</td>");
- // Memory: usable
- if(status.equals("up")) {
- sb = new StringBuffer();
- sb.append("total="+facts.memTotal);
- if(facts.quantum != null) {
- if(facts.quantum.trim().length() > 0) {
- sb.append(" ");
- sb.append("quantum="+facts.quantum.trim());
- }
- }
- hover = "title=\""+sb.toString()+"\"";
- row.append("<td align=\"right\" "+hover+">");
- row.append(facts.memReserve);
- row.append("</td>");
- }
- else if(status.equals("down")) {
- row.append("<td align=\"right\">");
- row.append("0");
- row.append("</td>");
- }
- else {
- row.append("<td align=\"right\">");
- row.append("</td>");
- }
- // Memory: free
- if(status.equals("up")) {
- long memFree = ConvertSafely.String2Long(facts.memReserve);
- if(allocatedMap.containsKey(facts.name)) {
- long bytes = allocatedMap.get(facts.name);
- SizeBytes allocated = new SizeBytes(Type.Bytes, bytes);
- memFree = memFree - allocated.getGBytes();
- }
- row.append("<td align=\"right\">");
- row.append(memFree);
- row.append("</td>");
- }
- else if(status.equals("down")) {
- row.append("<td align=\"right\">");
- row.append("0");
- row.append("</td>");
- }
- else {
- row.append("<td align=\"right\">");
- row.append("</td>");
- }
- // CPU: load average
- row.append("<td align=\"right\">");
- if(facts.status != null) {
- if(facts.status.equals("up")) {
- String cpu = formatter1.format(facts.cpu);
- row.append(cpu);
- }
- }
- row.append("</td>");
- // Swap: inuse
- sb = new StringBuffer();
- String swapping = facts.swapInuse;
- if(swapping.equals("0")) {
- sb.append(swapping);
- }
- else {
- sb.append("<span class=\"health_red\">");
- sb.append(swapping);
- sb.append("</span>");
- }
- row.append("<td align=\"right\">");
- if(!status.equals("defined")) {
- row.append(sb);
- }
- row.append("</td>");
- // Swap: free
- row.append("<td align=\"right\">");
- if(!status.equals("defined")) {
- row.append(facts.swapFree);
- }
- row.append("</td>");
- // C-Groups
- boolean isCgroupsEnabled = facts.cgroupsEnabled;
- boolean isCgroupsCpuReportingEnabled = facts.cgroupsCpuReportingEnabled;
- sb = new StringBuffer();
- if(status.equals("up")) {
- if(isCgroupsEnabled) {
- if(isCgroupsCpuReportingEnabled) {
- sb.append("<span title=\""+"control groups active"+"\" class=\"health_black\""+">");
- sb.append("on");
- sb.append("</span>");
- }
- else {
- sb.append("<span title=\""+"control groups CPU reporting not configured"+"\" class=\"health_red\""+">");
- sb.append("noCPU%");
- sb.append("</span>");
- }
- }
- else {
- sb.append("<span title=\""+"control groups inactive"+"\" class=\"health_red\""+">");
- sb.append("off");
- sb.append("</span>");
- }
- }
- String cgroups = sb.toString();
- row.append("<td align=\"right\">");
- row.append(""+cgroups);
- row.append("</td>");
- // Alien PIDs
- sb = new StringBuffer();
- long aliens = facts.aliens.size();
- if(aliens == 0) {
- sb.append(aliens);
- }
- else {
- StringBuffer title = new StringBuffer();
- title.append("title=");
- title.append("\"");
- for(String pid : facts.aliens) {
- title.append(pid+" ");
- }
- title.append("\"");
- sb.append("<span class=\"health_red\" "+title+">");
- sb.append(aliens);
- sb.append("</span>");
- }
- row.append("<td align=\"right\">");
- if(!status.equals("defined")) {
- row.append(sb);
- }
- row.append("</td>");
- // Heartbeat: last
- row.append("<td align=\"right\">");
- if(!status.equals("defined")) {
- row.append(facts.heartbeat);
- }
- row.append("</td>");
- row.append("</tr>");
- data.append(row);
- counter++;
- }
+ data.append(individualMachines);
}
else {
row = new StringBuffer();
@@ -1954,9 +1938,9 @@ public class DuccHandlerClassic extends
row.append("");
row.append("</td>");
row.append("</tr>");
+ //
data.append(row);
}
-
duccLogger.debug(methodName, jobid, data);
response.getWriter().println(data);
duccLogger.trace(methodName, jobid, messages.fetch("exit"));
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=1770727&r1=1770726&r2=1770727&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 Nov 21 17:56:15 2016
@@ -26,7 +26,6 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
-import java.util.ListIterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
@@ -37,7 +36,6 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.uima.ducc.cli.ws.json.MachineFacts;
import org.apache.uima.ducc.cli.ws.json.MachineFactsList;
import org.apache.uima.ducc.cli.ws.json.NodePidList;
import org.apache.uima.ducc.cli.ws.json.ReservationFacts;
@@ -1407,6 +1405,155 @@ public class DuccHandlerJsonFormat exten
duccLogger.trace(methodName, jobid, messages.fetch("exit"));
}
+ // Individual Machine
+ private void buildRowForIndividualMachine(JsonArray data , int counter, MachineInfo machineInfo, SizeBytes allocated) {
+ JsonArray row = new JsonArray();
+ StringBuffer sb = new StringBuffer();
+ // Status
+ String status = machineInfo.getStatus();
+ String hover = "title=\""+machineInfo.getMachineStatusReason()+"\"";
+ if(status.equals("down")) {
+ sb.append("<span "+hover+" class=\"health_red\""+">");
+ sb.append(status);
+ sb.append("</span>");
+ }
+ else if(status.equals("up")) {
+ sb.append("<span "+hover+"class=\"health_green\""+">");
+ sb.append(status);
+ sb.append("</span>");
+ }
+ else {
+ sb.append(status);
+ }
+ row.add(new JsonPrimitive(sb.toString()));
+ // IP
+ row.add(new JsonPrimitive(machineInfo.getIp()));
+ // Name
+ row.add(new JsonPrimitive(machineInfo.getName()));
+ // Nodepool
+ String nodepool = DuccSchedulerClasses.getInstance().getNodepool(machineInfo.getName());
+ row.add(new JsonPrimitive(nodepool));
+ // Memory: usable
+ if(status.equals("up")) {
+ sb = new StringBuffer();
+ sb.append("total="+machineInfo.getMemTotal());
+ Integer quantum = machineInfo.getQuantum();
+ if(quantum != null) {
+ sb.append(" ");
+ sb.append("quantum="+quantum);
+ }
+ hover = "title=\""+sb.toString()+"\"";
+ String memReserveWithHover = "<span "+hover+" >"+machineInfo.getMemReserve()+"</span>";
+ row.add(new JsonPrimitive(memReserveWithHover));
+ }
+ else if(status.equals("down")) {
+ row.add(new JsonPrimitive("0"));
+ }
+ else {
+ row.add(new JsonPrimitive(""));
+ }
+ // Memory: free
+ if(status.equals("up")) {
+ long memFree = ConvertSafely.String2Long(machineInfo.getMemReserve());
+ memFree = memFree - allocated.getGBytes();
+ row.add(new JsonPrimitive(memFree));
+ }
+ else if(status.equals("down")) {
+ row.add(new JsonPrimitive("0"));
+ }
+ else {
+ row.add(new JsonPrimitive(""));
+ }
+ // CPU: load average
+ if(!status.equals("defined")) {
+ String cpu = formatter1.format(machineInfo.getCpu());
+ row.add(new JsonPrimitive(cpu));
+ }
+ else {
+ row.add(new JsonPrimitive(""));
+ }
+ // Swap: inuse
+ sb = new StringBuffer();
+ String swapping = machineInfo.getSwapInuse();
+ if(swapping.equals("0")) {
+ sb.append(swapping);
+ }
+ else {
+ sb.append("<span class=\"health_red\">");
+ sb.append(swapping);
+ sb.append("</span>");
+ }
+ if(!status.equals("defined")) {
+ row.add(new JsonPrimitive(sb.toString()));
+ }
+ else {
+ row.add(new JsonPrimitive(""));
+ }
+ // Swap: free
+ if(!status.equals("defined")) {
+ row.add(new JsonPrimitive(machineInfo.getSwapFree()));
+ }
+ else {
+ row.add(new JsonPrimitive(""));
+ }
+ // C-Groups
+ boolean isCgroupsEnabled = machineInfo.getCgroupsEnabled();
+ boolean isCgroupsCpuReportingEnabled = machineInfo.getCgroupsCpuReportingEnabled();
+ sb = new StringBuffer();
+ if(status.equals("up")) {
+ if(isCgroupsEnabled) {
+ if(isCgroupsCpuReportingEnabled) {
+ sb.append("<span title=\""+"control groups active"+"\" class=\"health_black\""+">");
+ sb.append("on");
+ sb.append("</span>");
+ }
+ else {
+ sb.append("<span title=\""+"control groups CPU reporting not configured"+"\" class=\"health_red\""+">");
+ sb.append("noCPU%");
+ sb.append("</span>");
+ }
+ }
+ else {
+ sb.append("<span title=\""+"control groups inactive"+"\" class=\"health_red\""+">");
+ sb.append("off");
+ sb.append("</span>");
+ }
+ }
+ row.add(new JsonPrimitive(sb.toString()));
+ // Alien PIDs
+ sb = new StringBuffer();
+ long aliens = machineInfo.getAliens().size();
+ if(aliens == 0) {
+ sb.append(aliens);
+ }
+ else {
+ StringBuffer title = new StringBuffer();
+ title.append("title=");
+ title.append("\"");
+ for(String pid : machineInfo.getAliens()) {
+ title.append(pid+" ");
+ }
+ title.append("\"");
+ sb.append("<span class=\"health_red\" "+title+">");
+ sb.append(aliens);
+ sb.append("</span>");
+ }
+ if(!status.equals("defined")) {
+ row.add(new JsonPrimitive(sb.toString()));
+ }
+ else {
+ row.add(new JsonPrimitive(""));
+ }
+ // Heartbeat: last
+ if(!status.equals("defined")) {
+ row.add(new JsonPrimitive(machineInfo.getHeartbeatLast()));
+ }
+ else {
+ row.add(new JsonPrimitive(""));
+ }
+ data.add(row);
+ }
+
private void handleServletJsonFormatMachinesAaData(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException
{
@@ -1414,53 +1561,50 @@ public class DuccHandlerJsonFormat exten
duccLogger.trace(methodName, jobid, messages.fetch("enter"));
JsonObject jsonResponse = new JsonObject();
JsonArray data = new JsonArray();
- String hover;
+ JsonArray individualMachines = new JsonArray();
+ int counter = 0;
long sumMemTotal = 0; // Memory(GB):reported by Agent
long sumMemFree = 0; // Memory(GB):free
long sumMemReserve = 0; // Memory(GB):usable
+ long sumMemAllocated = 0;
double sumCPU = 0;
long sumMachines = 0;
long sumSwapInuse = 0;
long sumSwapFree = 0;
long sumAliens = 0;
- ListIterator<MachineFacts> listIterator;
+ String hover;
JsonArray row;
- StringBuffer sb;
DuccMachinesData instance = DuccMachinesData.getInstance();
- MachineFactsList factsList = instance.getMachineFactsList();
- if(factsList.size() > 0) {
- // Total
- listIterator = factsList.listIterator();
- while(listIterator.hasNext()) {
- MachineFacts facts = listIterator.next();
- if(DuccMachinesDataHelper.isUp(facts)) {
+ Map<MachineInfo, NodeId> machines = instance.getMachines();
+ if(!machines.isEmpty()) {
+ Map<String, Long> allocatedMap = Distiller.getMap();
+ for(Entry<MachineInfo, NodeId> entry : machines.entrySet()) {
+ MachineInfo machineInfo = entry.getKey();
+ SizeBytes sb = new SizeBytes(Type.Bytes, 0);
+ if(DuccMachinesDataHelper.isUp(machineInfo)) {
try {
- sumMemTotal += ConvertSafely.String2Long(facts.memTotal);
+ sumMemTotal += ConvertSafely.String2Long(machineInfo.getMemTotal());
// Calculate total for Memory(GB):usable
- sumMemReserve += ConvertSafely.String2Long(facts.memReserve);
- sumSwapInuse += ConvertSafely.String2Long(facts.swapInuse);
- sumSwapFree += ConvertSafely.String2Long(facts.swapFree);
- sumCPU += facts.cpu;
+ sumMemReserve += ConvertSafely.String2Long(machineInfo.getMemReserve());
+ sumSwapInuse += ConvertSafely.String2Long(machineInfo.getSwapInuse());
+ sumSwapFree += ConvertSafely.String2Long(machineInfo.getSwapFree());
+ sumCPU += machineInfo.getCpu();
sumMachines += 1;
- sumAliens += facts.aliens.size();
+ sumAliens += machineInfo.getAliens().size();
+ String machineName = machineInfo.getName();
+ long bytes = allocatedMap.get(machineName);
+ sumMemAllocated += bytes;
+ sb = new SizeBytes(Type.Bytes, bytes);
+ String text = "allocated "+machineName+"="+sb.getGBytes();
+ duccLogger.trace(methodName, jobid, text);
}
catch(Exception e) {
duccLogger.trace(methodName, jobid, e);
}
}
- }
- // Calculate total for Memory(GB):free
- Map<String, Long> allocatedMap = Distiller.getMap();
- long sumMemAllocated = 0;
- for(Entry<String, Long> entry : allocatedMap.entrySet()) {
- String name = entry.getKey();
- MachineFacts facts = DuccMachinesDataHelper.getMachineFacts(factsList, name);
- // Only consider "up" machines
- if(DuccMachinesDataHelper.isUp(facts)) {
- long bytes = entry.getValue();
- sumMemAllocated += bytes;
- }
- }
+ buildRowForIndividualMachine(individualMachines, counter, machineInfo, sb);
+ counter++;
+ }
SizeBytes sbAllocated = new SizeBytes(Type.Bytes, sumMemAllocated);
sumMemFree = sumMemReserve - sbAllocated.getGBytes();
//
@@ -1493,161 +1637,6 @@ public class DuccHandlerJsonFormat exten
// Heartbeat: last
row.add(new JsonPrimitive(""));
data.add(row);
- // Individual Machines
- listIterator = factsList.listIterator();
- while(listIterator.hasNext()) {
- MachineFacts facts = listIterator.next();
- row = new JsonArray();
- // Status
- sb = new StringBuffer();
- String status = facts.status;
- hover = "title=\""+facts.statusReason+"\"";
- if(status.equals("down")) {
- sb.append("<span "+hover+" class=\"health_red\""+">");
- sb.append(status);
- sb.append("</span>");
- }
- else if(status.equals("up")) {
- sb.append("<span "+hover+"class=\"health_green\""+">");
- sb.append(status);
- sb.append("</span>");
- }
- else {
- sb.append(status);
- }
- row.add(new JsonPrimitive(sb.toString()));
- // IP
- row.add(new JsonPrimitive(facts.ip));
- // Name
- row.add(new JsonPrimitive(facts.name));
- // Nodepool
- String nodepool = DuccSchedulerClasses.getInstance().getNodepool(facts.name);
- row.add(new JsonPrimitive(nodepool));
- // Memory: usable
- if(status.equals("up")) {
- sb = new StringBuffer();
- sb.append("total="+facts.memTotal);
- if(facts.quantum != null) {
- if(facts.quantum.trim().length() > 0) {
- sb.append(" ");
- sb.append("quantum="+facts.quantum.trim());
- }
- }
- hover = "title=\""+sb.toString()+"\"";
- String memReserveWithHover = "<span "+hover+" >"+facts.memReserve+"</span>";
- row.add(new JsonPrimitive(memReserveWithHover));
- }
- else if(status.equals("down")) {
- row.add(new JsonPrimitive("0"));
- }
- else {
- row.add(new JsonPrimitive(""));
- }
- // Memory: free
- if(status.equals("up")) {
- long memFree = ConvertSafely.String2Long(facts.memReserve);
- if(allocatedMap.containsKey(facts.name)) {
- long bytes = allocatedMap.get(facts.name);
- SizeBytes allocated = new SizeBytes(Type.Bytes, bytes);
- memFree = memFree - allocated.getGBytes();
- }
- row.add(new JsonPrimitive(memFree));
- }
- else if(status.equals("down")) {
- row.add(new JsonPrimitive("0"));
- }
- else {
- row.add(new JsonPrimitive(""));
- }
- // CPU: load average
- if(!status.equals("defined")) {
- String cpu = formatter1.format(facts.cpu);
- row.add(new JsonPrimitive(cpu));
- }
- else {
- row.add(new JsonPrimitive(""));
- }
- // Swap: inuse
- sb = new StringBuffer();
- String swapping = facts.swapInuse;
- if(swapping.equals("0")) {
- sb.append(swapping);
- }
- else {
- sb.append("<span class=\"health_red\">");
- sb.append(swapping);
- sb.append("</span>");
- }
- if(!status.equals("defined")) {
- row.add(new JsonPrimitive(sb.toString()));
- }
- else {
- row.add(new JsonPrimitive(""));
- }
- // Swap: free
- if(!status.equals("defined")) {
- row.add(new JsonPrimitive(facts.swapFree));
- }
- else {
- row.add(new JsonPrimitive(""));
- }
- // C-Groups
- boolean isCgroupsEnabled = facts.cgroupsEnabled;
- boolean isCgroupsCpuReportingEnabled = facts.cgroupsCpuReportingEnabled;
- sb = new StringBuffer();
- if(status.equals("up")) {
- if(isCgroupsEnabled) {
- if(isCgroupsCpuReportingEnabled) {
- sb.append("<span title=\""+"control groups active"+"\" class=\"health_black\""+">");
- sb.append("on");
- sb.append("</span>");
- }
- else {
- sb.append("<span title=\""+"control groups CPU reporting not configured"+"\" class=\"health_red\""+">");
- sb.append("noCPU%");
- sb.append("</span>");
- }
- }
- else {
- sb.append("<span title=\""+"control groups inactive"+"\" class=\"health_red\""+">");
- sb.append("off");
- sb.append("</span>");
- }
- }
- row.add(new JsonPrimitive(sb.toString()));
- // Alien PIDs
- sb = new StringBuffer();
- long aliens = facts.aliens.size();
- if(aliens == 0) {
- sb.append(aliens);
- }
- else {
- StringBuffer title = new StringBuffer();
- title.append("title=");
- title.append("\"");
- for(String pid : facts.aliens) {
- title.append(pid+" ");
- }
- title.append("\"");
- sb.append("<span class=\"health_red\" "+title+">");
- sb.append(aliens);
- sb.append("</span>");
- }
- if(!status.equals("defined")) {
- row.add(new JsonPrimitive(sb.toString()));
- }
- else {
- row.add(new JsonPrimitive(""));
- }
- // Heartbeat: last
- if(!status.equals("defined")) {
- row.add(new JsonPrimitive(facts.heartbeat));
- }
- else {
- row.add(new JsonPrimitive(""));
- }
- data.add(row);
- }
}
else {
row = new JsonArray();
@@ -1675,14 +1664,12 @@ public class DuccHandlerJsonFormat exten
row.add(new JsonPrimitive(""));
data.add(row);
}
-
+ data.addAll(individualMachines);
jsonResponse.add("aaData", data);
-
String json = jsonResponse.toString();
duccLogger.debug(methodName, jobid, json);
response.getWriter().println(json);
response.setContentType("application/json");
-
duccLogger.trace(methodName, jobid, messages.fetch("exit"));
}