Author: degenaro
Date: Tue May 31 17:32:31 2016
New Revision: 1746305
URL: http://svn.apache.org/viewvc?rev=1746305&view=rev
Log:
UIMA-4923 DUCC Web Server (WS) should not display nodes that have been removed
from service on Machines page
- Code simplifications
- Use sort name to insure uniqueness between defined and agent reported nodes
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesData.java
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesDataHelper.java
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/MachineInfo.java
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java
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/types/NodeId.java
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesData.java
URL:
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesData.java?rev=1746305&r1=1746304&r2=1746305&view=diff
==============================================================================
---
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesData.java
(original)
+++
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesData.java
Tue May 31 17:32:31 2016
@@ -23,6 +23,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Properties;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.atomic.AtomicLong;
@@ -42,8 +43,10 @@ import org.apache.uima.ducc.common.utils
import org.apache.uima.ducc.common.utils.id.DuccId;
import org.apache.uima.ducc.transport.event.NodeMetricsUpdateDuccEvent;
import org.apache.uima.ducc.transport.event.ProcessInfo;
+import org.apache.uima.ducc.ws.MachineInfo.MachineStatus;
import org.apache.uima.ducc.ws.db.DbQuery;
import org.apache.uima.ducc.ws.db.IDbMachine;
+import org.apache.uima.ducc.ws.server.DuccWebProperties;
import org.apache.uima.ducc.ws.types.Ip;
import org.apache.uima.ducc.ws.types.NodeId;
import org.apache.uima.ducc.ws.types.UserId;
@@ -95,16 +98,120 @@ public class DuccMachinesData {
return retVal;
}
+ private long down_fudge = 10;
+ private long DOWN_AFTER_SECONDS =
WebServerComponent.updateIntervalSeconds + down_fudge;
+ private long SECONDS_PER_MILLI = 1000;
+
+ private long getAgentMillisMIA() {
+ String location = "getAgentMillisMIA";
+ long millisMIA = DOWN_AFTER_SECONDS*SECONDS_PER_MILLI;
+ Properties properties = DuccWebProperties.get();
+ String s_tolerance =
properties.getProperty("ducc.rm.node.stability");
+ String s_rate =
properties.getProperty("ducc.agent.node.metrics.publish.rate");
+ try {
+ long tolerance = Long.parseLong(s_tolerance.trim());
+ long rate = Long.parseLong(s_rate.trim());
+ long secondsRM = (tolerance * rate) / SECONDS_PER_MILLI;
+ logger.trace(location, jobid,
"default:"+DOWN_AFTER_SECONDS+" "+"secondsRM:"+secondsRM);
+ if(DOWN_AFTER_SECONDS < secondsRM) {
+ millisMIA = secondsRM * SECONDS_PER_MILLI;
+ }
+ }
+ catch(Throwable t) {
+ logger.warn(location, jobid, t);
+ }
+ return millisMIA;
+ }
+
+ private void determineStatus(MachineInfo mi, IDbMachine dbMachine) {
+ String location = "determineStatus";
+ if(dbMachine != null) {
+ // determine defined/down/up based on DB
+ Boolean responsive = dbMachine.getResponsive();
+ Boolean online = dbMachine.getOnline();
+ Boolean blacklisted = dbMachine.getBlacklisted();
+ MachineStatus machineStatus = MachineStatus.Down;
+ if(responsive) {
+ if(online) {
+ if(!blacklisted) {
+ machineStatus =
MachineStatus.Up;
+ }
+ }
+ }
+ mi.setMachineStatus(machineStatus);
+ mi.setResponsive(responsive);
+ mi.setOnline(online);
+ mi.setBlacklisted(blacklisted);
+ StringBuffer sb = new StringBuffer();
+ sb.append(mi.getName());
+ sb.append(" ");
+ sb.append(mi.getMachineStatus());
+ sb.append(" ");
+ sb.append(mi.getMachineStatusReason());
+ sb.append(" ");
+ String text = sb.toString().trim();
+ logger.trace(location, jobid, text);
+ mi.setQuantum(dbMachine.getQuantum());
+ }
+ else {
+ // determine defined/down/up based on Agent
+ if(mi.getElapsedSeconds() < 0) {
+ mi.setMachineStatus(MachineStatus.Defined);
+ }
+ else if(mi.isExpired(getAgentMillisMIA())) {
+ mi.setMachineStatus(MachineStatus.Down);
+ }
+ else {
+ mi.setMachineStatus(MachineStatus.Up);
+ }
+ }
+ }
+
+ private Map<String, IDbMachine> getDbMapMachines() {
+ String location = "getDbMapMachines";
+ Map<String, IDbMachine> retVal = null;
+ try {
+ DbQuery dbQuery = DbQuery.getInstance();
+ //if(!dbQuery.isEnabled()) {
+ retVal = dbQuery.getMapMachines();
+ //}
+ }
+ catch(Exception e) {
+ logger.error(location, jobid, e);
+ }
+ return retVal;
+ }
+
+ private IDbMachine getDbMachine(Map<String, IDbMachine> dbMapMachines,
NodeId nodeId) {
+ String location = "getDbMachine";
+ IDbMachine retVal = null;
+ try {
+ if(dbMapMachines != null) {
+ if(nodeId != null) {
+ String name = nodeId.getLongName();
+ retVal = dbMapMachines.get(name);
+ }
+ }
+ }
+ catch(Exception e) {
+ logger.error(location, jobid, e);
+ }
+ return retVal;
+ }
+
public void updateSortedMachines() {
String location = "updateSortedMachines";
logger.debug(location, jobid, "start");
try {
ConcurrentSkipListMap<MachineInfo,NodeId> map = new
ConcurrentSkipListMap<MachineInfo,NodeId>();
+ Map<String, IDbMachine> dbMapMachines =
getDbMapMachines();
for(Entry<NodeId,MachineInfo> entry :
unsortedMachines.entrySet()) {
- NodeId value = entry.getKey();
- MachineInfo key = entry.getValue();
- map.put(key, value);
- logger.debug(location, jobid, "put: "+value);
+ NodeId nodeId = entry.getKey();
+ IDbMachine dbMachine =
getDbMachine(dbMapMachines, nodeId);
+ MachineInfo machineInfo = entry.getValue();
+ determineStatus(machineInfo, dbMachine);
+ map.put(machineInfo, nodeId);
+ logger.debug(location, jobid, "put: "+nodeId);
}
sortedMachines = map;
updateMachineFactsList();
@@ -225,17 +332,30 @@ public class DuccMachinesData {
return cpu;
}
- public void put(DatedNodeMetricsUpdateDuccEvent duccEvent) {
+ /**
+ *
+ * @param duccEvent
+ * @return true is new node or false if already known node
+ *
+ * Put new or updated node metrics into map of Agent node metric reports
+ */
+ public boolean put(DatedNodeMetricsUpdateDuccEvent duccEvent) {
+ boolean retVal = true;
String location = "put";
MachineSummaryInfo msi = new MachineSummaryInfo();
NodeMetricsUpdateDuccEvent nodeMetrics =
duccEvent.getNodeMetricsUpdateDuccEvent();
Ip ip = new Ip(nodeMetrics.getNodeIdentity().getIp().trim());
TreeMap<String, NodeUsersInfo> map =
nodeMetrics.getNodeUsersMap();
if(map != null) {
- ipToNodeUsersInfoMap.put(ip.toString(), map);
+ String ipString = ip.toString();
+ ipToNodeUsersInfoMap.put(ipString, map);
}
String machineName =
nodeMetrics.getNodeIdentity().getName().trim();
NodeId nodeId = new NodeId(machineName);
+ // determine if this is new machine (true) or already known
machine (false)
+ if(ipToNameMap.containsKey(ip)) {
+ retVal = false;
+ }
ipToNameMap.put(ip,nodeId);
nameToIpMap.put(nodeId,ip);
// mem: total
@@ -305,6 +425,7 @@ public class DuccMachinesData {
putMachine(current);
updateTotals(nodeId,msi);
setPublished();
+ return retVal;
}
public List<String> getPids(Ip ip, UserId user) {
@@ -400,20 +521,6 @@ public class DuccMachinesData {
return retVal;
}
- private void enhance(MachineFacts facts, Map<String, IDbMachine>
dbMachineMap) {
- if(facts != null) {
- if(dbMachineMap != null) {
- String[] machineStatus =
DuccMachinesDataHelper.getMachineStatus(facts, dbMachineMap);
- facts.status = machineStatus[0];
- facts.statusReason = machineStatus[1];
- String reserveSize =
DuccMachinesDataHelper.getMachineReserveSize(facts, dbMachineMap);
- facts.memReserve = reserveSize;
- String quantum =
DuccMachinesDataHelper.getMachineQuantum(facts, dbMachineMap);
- facts.quantum = quantum;
- }
- }
- }
-
/**
* Create a cached data set employed by the WS
* to display the System -> Machines page. The
@@ -485,7 +592,6 @@ public class DuccMachinesData {
* in part on the data comprising the ducc.nodes file.
*/
private void updateMachineFactsListAgent() {
-
MachineFactsList factsList = new MachineFactsList();
long quantum = getQuantum();
ConcurrentSkipListMap<MachineInfo,NodeId> sortedMachines =
getSortedMachines();
@@ -493,7 +599,9 @@ public class DuccMachinesData {
iterator = sortedMachines.keySet().iterator();
while(iterator.hasNext()) {
MachineInfo machineInfo = iterator.next();
- String status = machineInfo.getStatus();
+ MachineStatus machineStatus =
machineInfo.getMachineStatus();
+ String status = machineStatus.getLowerCaseName();
+ String statusReason = "";
String ip = machineInfo.getIp();
String name = machineInfo.getName();
String memTotal = calculateMem(quantum,
machineInfo.getMemTotal());
@@ -505,7 +613,7 @@ public class DuccMachinesData {
boolean cGroups = machineInfo.getCgroups();
List<String> aliens = machineInfo.getAliens();
String heartbeat = ""+machineInfo.getElapsed();
- MachineFacts facts = new
MachineFacts(status,ip,name,memTotal,memFree,swapInuse,swapDelta,swapFree,cpu,cGroups,aliens,heartbeat);
+ MachineFacts facts = new
MachineFacts(status,statusReason,ip,name,memTotal,memFree,swapInuse,swapDelta,swapFree,cpu,cGroups,aliens,heartbeat);
// when not using DB, memResrve == memTotal
facts.memReserve = memTotal;
factsList.add(facts);
@@ -520,6 +628,7 @@ public class DuccMachinesData {
* in part on the data comprising the ducc.nodes file.
*/
private void updateMachineFactsListDb() {
+ String location = "updateMachineFactsListDb";
// The returnable
MachineFactsList mfl = new MachineFactsList();
// Working map used to generate the returnable
@@ -543,11 +652,14 @@ public class DuccMachinesData {
// Initialize returnable with "defined" machines
ArrayList<String> duccNodes = DuccNodes.getInstance().get();
for(String name : duccNodes) {
+ NodeId nodeId = new NodeId(name);;
+ String shortName = nodeId.getShortName();
// skip defined machine if it already appears in DB
- if(knownShortNames.contains(name)) {
+ if(knownShortNames.contains(shortName)) {
continue;
}
String status = "defined";
+ String statusReason = "";
String ip = "";
String memTotal = "";
String memFree = "";
@@ -558,13 +670,15 @@ public class DuccMachinesData {
boolean cGroups = false;
List<String> aliens = new ArrayList<String>();
String heartbeat = "";
- MachineFacts facts = new
MachineFacts(status,ip,name,memTotal,memFree,swapInuse,swapDelta,swapFree,cpu,cGroups,aliens,heartbeat);
+ MachineFacts facts = new
MachineFacts(status,statusReason,ip,name,memTotal,memFree,swapInuse,swapDelta,swapFree,cpu,cGroups,aliens,heartbeat);
mfl.add(facts);
}
// Augment returnable with data from Agents & RM (from DB)
for(Entry<MachineInfo, NodeId> entry :
dbSortedMachines.entrySet()) {
MachineInfo machineInfo = entry.getKey();
- String status = machineInfo.getStatus();
+ MachineStatus machineStatus =
machineInfo.getMachineStatus();
+ String status = machineStatus.getLowerCaseName();
+ String statusReason =
machineInfo.getMachineStatusReason();
String ip = machineInfo.getIp();
String name = machineInfo.getName();
String memTotal = machineInfo.getMemTotal();
@@ -576,9 +690,10 @@ public class DuccMachinesData {
boolean cGroups = machineInfo.getCgroups();
List<String> aliens = machineInfo.getAliens();
String heartbeat = ""+machineInfo.getElapsed();
- MachineFacts facts = new
MachineFacts(status,ip,name,memTotal,memFree,swapInuse,swapDelta,swapFree,cpu,cGroups,aliens,heartbeat);
- // Add info from Agent that DB does not have
- enhance(facts, dbMapMachines);
+ MachineFacts facts = new
MachineFacts(status,statusReason,ip,name,memTotal,memFree,swapInuse,swapDelta,swapFree,cpu,cGroups,aliens,heartbeat);
+ facts.memReserve = machineInfo.getMemTotal();
+ facts.quantum = ""+machineInfo.getQuantum();
+ logger.trace(location, jobid, facts.status+"
"+facts.statusReason);
mfl.add(facts);
}
machineFactsList = mfl;
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesDataHelper.java
URL:
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesDataHelper.java?rev=1746305&r1=1746304&r2=1746305&view=diff
==============================================================================
---
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesDataHelper.java
(original)
+++
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesDataHelper.java
Tue May 31 17:32:31 2016
@@ -18,21 +18,10 @@
*/
package org.apache.uima.ducc.ws;
-import java.util.Map;
-
import org.apache.uima.ducc.cli.ws.json.MachineFacts;
import org.apache.uima.ducc.cli.ws.json.MachineFactsList;
-import org.apache.uima.ducc.common.utils.DuccLogger;
-import org.apache.uima.ducc.common.utils.DuccLoggerComponents;
-import org.apache.uima.ducc.common.utils.id.DuccId;
-import org.apache.uima.ducc.ws.db.IDbMachine;
public class DuccMachinesDataHelper {
-
- private static DuccLogger logger =
DuccLoggerComponents.getWsLogger(DuccMachinesDataHelper.class.getName());
- private static DuccId jobid = null;
-
- public enum MachineStatus { up, down, unknown };
/**
* @param factsList = list of machine facts, each entry comprising one
machine
@@ -70,136 +59,5 @@ public class DuccMachinesDataHelper {
}
return retVal;
}
-
- private static String[] getMachineStatusWs(MachineFacts facts,
Map<String, IDbMachine> dbMachineMap) {
- String location = "getMachineStatusWs";
- String[] retVal = null;
- if(facts != null) {
- if(facts.status != null) {
- if(facts.status.equals("up")) {
- retVal = new String[2];
- retVal[0] = facts.status;
- retVal[1] = "";
- logger.debug(location, jobid,
retVal[0]+" "+retVal[1]);
- }
- else if(facts.status.equals("down")) {
- retVal = new String[2];
- retVal[0] = facts.status;
- retVal[1] = "heartbeat=missing";
- logger.debug(location, jobid,
retVal[0]+" "+retVal[1]);
- }
- }
- }
- return retVal;
- }
-
- // up: responsive == true && online == true && blacklisted == false
-
- private static String[] getMachineStatusDb(MachineFacts facts,
Map<String, IDbMachine> dbMachineMap) {
- String location = "getMachineStatusDb";
- String[] retVal = null;
- if(facts != null) {
- if(facts.status != null) {
- if(dbMachineMap != null) {
- IDbMachine dbMachine =
dbMachineMap.get(facts.name);
- if(dbMachine != null) {
- Boolean responsive =
dbMachine.getResponsive();
- Boolean online =
dbMachine.getOnline();
- Boolean blacklisted =
dbMachine.getBlacklisted();
- StringBuffer sb = new
StringBuffer();
-
sb.append("responsive="+responsive);
- sb.append(" ");
- sb.append("online="+online);
- sb.append(" ");
-
sb.append("blacklisted="+blacklisted);
- retVal = new String[2];
- retVal[0] =
MachineStatus.down.name();
- retVal[1] = sb.toString();
- if(responsive) {
- if(online) {
-
if(!blacklisted) {
-
retVal[0] = MachineStatus.up.name();
- }
- }
- }
- logger.debug(location, jobid,
sb);
- }
- }
- }
- }
- return retVal;
- }
-
- public static String[] getMachineStatus(MachineFacts facts, Map<String,
IDbMachine> dbMachineMap) {
- String[] retVal = null;
- if(retVal == null) {
- retVal = getMachineStatusDb(facts, dbMachineMap);
- }
- if(retVal == null) {
- retVal = getMachineStatusWs(facts, dbMachineMap);
- }
- if(retVal == null) {
- retVal = new String[2];
- retVal[0] = facts.status;
- retVal[1] = "";
- }
- return retVal;
- }
-
- private static String getMachineReserveSizeWs(MachineFacts facts,
Map<String, IDbMachine> dbMachineMap) {
- String location = "getMachineReserveSizeWs";
- String retVal = null;
- if(facts != null) {
- if(!facts.status.equals("defined")) {
- retVal = facts.memFree;
- logger.debug(location, jobid, retVal);
- }
- }
- return retVal;
- }
-
- // reserve size: quantum * shareOrder
-
- private static String getMachineReserveSizeDb(MachineFacts facts,
Map<String, IDbMachine> dbMachineMap) {
- String location = "getMachineReserveSizeDb";
- String retVal = null;
- if(dbMachineMap != null) {
- IDbMachine dbMachine = dbMachineMap.get(facts.name);
- if(dbMachine != null) {
- retVal =
""+dbMachine.getQuantum()*dbMachine.getShareOrder();
- logger.debug(location, jobid, retVal);
- }
- }
- return retVal;
- }
-
- public static String getMachineReserveSize(MachineFacts facts,
Map<String, IDbMachine> dbMachineMap) {
- String retVal = null;
- if(retVal == null) {
- retVal = getMachineReserveSizeDb(facts, dbMachineMap);
- }
- if(retVal == null) {
- retVal = getMachineReserveSizeWs(facts, dbMachineMap);
- }
- if(retVal == null) {
- retVal = "0";
- }
- return retVal;
- }
-
- // quantum
-
- public static String getMachineQuantum(MachineFacts facts, Map<String,
IDbMachine> dbMachineMap) {
- String location = "getMachineQuantum";
- String retVal = "";
- if(dbMachineMap != null) {
- IDbMachine dbMachine = dbMachineMap.get(facts.name);
- if(dbMachine != null) {
- retVal = ""+dbMachine.getQuantum();
- logger.debug(location, jobid, retVal);
- }
- }
- return retVal;
- }
-
+
}
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/MachineInfo.java
URL:
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/MachineInfo.java?rev=1746305&r1=1746304&r2=1746305&view=diff
==============================================================================
---
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/MachineInfo.java
(original)
+++
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/MachineInfo.java
Tue May 31 17:32:31 2016
@@ -21,13 +21,11 @@ package org.apache.uima.ducc.ws;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
-import java.util.Properties;
import org.apache.uima.ducc.common.utils.DuccLogger;
import org.apache.uima.ducc.common.utils.DuccLoggerComponents;
import org.apache.uima.ducc.common.utils.id.DuccId;
import org.apache.uima.ducc.transport.event.ProcessInfo;
-import org.apache.uima.ducc.ws.server.DuccWebProperties;
public class MachineInfo implements Comparable<MachineInfo> {
@@ -35,10 +33,16 @@ public class MachineInfo implements Comp
private static DuccLogger logger =
DuccLoggerComponents.getWsLogger(MachineInfo.class.getName());
private static DuccId jobid = null;
- private long down_fudge = 10;
- private long DOWN_AFTER_SECONDS =
WebServerComponent.updateIntervalSeconds + down_fudge;
- private long SECONDS_PER_MILLI = 1000;
-
+ public enum MachineStatus {
+ Defined,
+ Down,
+ Up;
+ public String getLowerCaseName() {
+ String retVal = name().toLowerCase();
+ return retVal;
+ }
+ };
+
private String fileDef;
private String ip;
private String name;
@@ -56,7 +60,23 @@ public class MachineInfo implements Comp
private long pubSize;
private long pubSizeMax;
+ private MachineStatus machineStatus = MachineStatus.Defined;
+ private Boolean responsive = null;
+ private Boolean online = null;
+ private Boolean blacklisted = null;
+
+ private Integer quantum = null;
+
public MachineInfo(String fileDef, String ip, String name, String
memTotal, String memFree, String swapInuse, String swapFree, double cpu,
boolean cGroups, List<ProcessInfo> alienPids, long heartbeat, long pubSize) {
+ init(MachineStatus.Defined, fileDef, ip, name, memTotal,
memFree, swapInuse, swapFree, cpu, cGroups, alienPids, heartbeat, pubSize);
+ }
+
+ public MachineInfo(MachineStatus machineStatus, String fileDef, String
ip, String name, String memTotal, String memFree, String swapInuse, String
swapFree, double cpu, boolean cGroups, List<ProcessInfo> alienPids, long
heartbeat, long pubSize) {
+ init(machineStatus, fileDef, ip, name, memTotal, memFree,
swapInuse, swapFree, cpu, cGroups, alienPids, heartbeat, pubSize);
+ }
+
+ private void init(MachineStatus machineStatus, String fileDef, String
ip, String name, String memTotal, String memFree, String swapInuse, String
swapFree, double cpu, boolean cGroups, List<ProcessInfo> alienPids, long
heartbeat, long pubSize) {
+ this.machineStatus = machineStatus;
this.fileDef = fileDef;
this.ip = ip;
this.name = name;
@@ -78,45 +98,156 @@ public class MachineInfo implements Comp
this.pubSizeMax = 0;
}
- private long getAgentMillisMIA() {
- String location = "getAgentMillisMIA";
- long millisMIA = DOWN_AFTER_SECONDS*SECONDS_PER_MILLI;
- Properties properties = DuccWebProperties.get();
- String s_tolerance =
properties.getProperty("ducc.rm.node.stability");
- String s_rate =
properties.getProperty("ducc.agent.node.metrics.publish.rate");
- try {
- long tolerance = Long.parseLong(s_tolerance.trim());
- long rate = Long.parseLong(s_rate.trim());
- long secondsRM = (tolerance * rate) / SECONDS_PER_MILLI;
- logger.trace(location, jobid,
"default:"+DOWN_AFTER_SECONDS+" "+"secondsRM:"+secondsRM);
- if(DOWN_AFTER_SECONDS < secondsRM) {
- millisMIA = secondsRM * SECONDS_PER_MILLI;
+ /*
+ * Derived status based on DB or Agent supplied data,
+ * one of: defined, down, up
+ */
+
+ public String getStatus() {
+ return machineStatus.getLowerCaseName();
+ }
+
+ public MachineStatus getMachineStatus() {
+ return this.machineStatus;
+ }
+
+ public void setMachineStatus(MachineStatus machineStatus) {
+ this.machineStatus = machineStatus;
+ }
+
+ /**
+ * Hover string for status of Down/Up on Machine page
+ */
+
+ public String getMachineStatusReason() {
+ String retVal = "";
+ StringBuffer sb = new StringBuffer();
+ sb.append(getResponsive());
+ sb.append(" ");
+ sb.append(getOnline());
+ sb.append(" ");
+ sb.append(getBlacklisted());
+ sb.append(" ");
+ retVal = sb.toString().trim();
+ return retVal;
+ }
+
+ /**
+ * Resource Manager determined value for "responsive"
+ */
+
+ public void setResponsive(boolean value) {
+ if(value) {
+ setResponsive();
+ }
+ else {
+ setNotResponsive();
+ }
+ }
+
+ public void setResponsive() {
+ responsive = new Boolean(true);
+ }
+
+ public void setNotResponsive() {
+ responsive = new Boolean(false);
+ }
+
+ public String getResponsive() {
+ String retVal = "";
+ if(responsive != null) {
+ if(responsive.booleanValue()) {
+ retVal = "responsive=true";
+ }
+ else {
+ retVal = "responsive=false";
}
}
- catch(Throwable t) {
- logger.warn(location, jobid, t);
+ return retVal;
+ }
+
+ /**
+ * Resource Manager determined value for "online"
+ */
+
+ public void setOnline(boolean value) {
+ if(value) {
+ setOnline();
}
- return millisMIA;
+ else {
+ setNotOnline();
+ }
+ }
+
+ public void setOnline() {
+ online = new Boolean(true);
+ }
+
+ public void setNotOnline() {
+ online = new Boolean(false);
}
- private String calculateStatus() {
- String status = "";
- if(getElapsedSeconds() < 0) {
- status = "defined";
+ public String getOnline() {
+ String retVal = "";
+ if(online != null) {
+ if(online.booleanValue()) {
+ retVal = "online=true";
+ }
+ else {
+ retVal = "online=false";
+ }
}
- else if(isExpired(getAgentMillisMIA())) {
- status = "down";
+ return retVal;
+ }
+
+ /**
+ * Resource Manager determined value for "blacklisted"
+ */
+
+ public void setBlacklisted(boolean value) {
+ if(value) {
+ setBlacklisted();
}
else {
- status = "up";
+ setNotBlacklisted();
}
- return status;
}
- public String getStatus() {
- return calculateStatus();
+ public void setBlacklisted() {
+ blacklisted = new Boolean(true);
}
+ public void setNotBlacklisted() {
+ blacklisted = new Boolean(false);
+ }
+
+ public String getBlacklisted() {
+ String retVal = "";
+ if(blacklisted != null) {
+ if(blacklisted.booleanValue()) {
+ retVal = "blacklisted=true";
+ }
+ else {
+ retVal = "blacklisted=false";
+ }
+ }
+ return retVal;
+ }
+
+ /**
+ * Resource Manager determined value for "quantum"
+ */
+
+ public void setQuantum(Integer quantum) {
+ this.quantum = quantum;
+ }
+
+ public Integer getQuantum() {
+ return quantum;
+ }
+
+ //
+
public String getFileDef() {
return this.fileDef;
}
@@ -316,33 +447,78 @@ public class MachineInfo implements Comp
return retVal;
}
+ /**
+ * @param m1
+ * @param m2
+ * @return 0 if m1 == m2, -1 if m1 < m2, +1 if m1 > m2, where
+ * Defined < Down < Up
+ */
private int compareStatus(MachineInfo m1, MachineInfo m2) {
+ String location = "compareStatus";
int retVal = 0;
try {
- String v1 = m1.getStatus();
- String v2 = m2.getStatus();
- if(!v1.equals(v2)) {
- if(v1.equals("defined")) {
- return -1;
- }
- if(v2.equals("defined")) {
- return 1;
- }
- if(v1.equals("down")) {
- return -1;
- }
- if(v2.equals("down")) {
- return 1;
+ MachineStatus v1 = m1.getMachineStatus();
+ MachineStatus v2 = m2.getMachineStatus();
+ switch(v1) {
+ default:
+ case Defined:
+ switch(v2) {
+ default:
+ case Defined:
+ retVal = 0;
+ break;
+ case Down:
+ retVal = -1;
+ break;
+ case Up:
+ retVal = -1;
+ break;
}
- if(v1.equals("up")) {
- return 1;
+ break;
+ case Down:
+ switch(v2) {
+ default:
+ case Defined:
+ retVal = 1;
+ break;
+ case Down:
+ retVal = 0;
+ break;
+ case Up:
+ retVal = -1;
+ break;
}
- if(v2.equals("up")) {
- return -1;
+ break;
+ case Up:
+ switch(v2) {
+ default:
+ retVal = 1;
+ case Defined:
+ break;
+ case Down:
+ retVal = 1;
+ break;
+ case Up:
+ retVal = 0;
+ break;
}
+ break;
}
+ StringBuffer sb = new StringBuffer();
+ sb.append(m1.getName());
+ sb.append(" ");
+ sb.append(m1.getMachineStatus().getLowerCaseName());
+ sb.append(" ");
+ sb.append(m2.getName());
+ sb.append(" ");
+ sb.append(m2.getMachineStatus().getLowerCaseName());
+ sb.append(" ");
+ sb.append(" "+retVal);
+ logger.trace(location, jobid, sb);
}
+
catch(Throwable t) {
+ logger.error(location, jobid, t);
}
return retVal;
}
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java
URL:
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java?rev=1746305&r1=1746304&r2=1746305&view=diff
==============================================================================
---
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java
(original)
+++
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/WebServerComponent.java
Tue May 31 17:32:31 2016
@@ -64,8 +64,6 @@ implements IWebServer {
private static AtomicLong updateLast = new
AtomicLong(System.currentTimeMillis());
public static long updateIntervalSeconds = 60;
public static long updateIntervalMilliSeconds =
updateIntervalSeconds*1000;
- private static AtomicLong updateCount = new AtomicLong(0);
- private static long warmup = 10;
public WebServerComponent(CamelContext context, CommonConfiguration
common) {
super("WebServer",context);
@@ -158,14 +156,15 @@ implements IWebServer {
}
}
- private void sortMachines() {
+ /**
+ * Sort machines if interval has elapsed (60 seconds)
+ * or if a new machine has been detected (force == true)
+ */
+ private void sortMachines(boolean force) {
long last = updateLast.get();
long deadline = last + updateIntervalMilliSeconds;
- if(updateCount.getAndIncrement() < warmup) {
- deadline = last + updateIntervalMilliSeconds/10;
- }
long now = System.currentTimeMillis();
- if(now > deadline) {
+ if(now > deadline || force) {
boolean success = updateLast.compareAndSet(last, now);
if(success) {
DuccMachinesData.getInstance().updateSortedMachines();
@@ -177,8 +176,10 @@ implements IWebServer {
String methodName = "update";
duccLogger.trace(methodName, jobid, duccMsg.fetch("enter"));
duccLogger.trace(methodName, jobid,
duccMsg.fetchLabel("received")+"NodeMetricsUpdateDuccEvent");
- DuccMachinesData.getInstance().put(new
DatedNodeMetricsUpdateDuccEvent(duccEvent));
- sortMachines();
+ DuccMachinesData dmd = DuccMachinesData.getInstance();
+ DatedNodeMetricsUpdateDuccEvent datedEvent = new
DatedNodeMetricsUpdateDuccEvent(duccEvent);
+ boolean force = dmd.put(datedEvent);
+ sortMachines(force);
duccLogger.trace(methodName, jobid, duccMsg.fetch("exit"));
}
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java
URL:
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java?rev=1746305&r1=1746304&r2=1746305&view=diff
==============================================================================
---
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java
(original)
+++
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandlerClassic.java
Tue May 31 17:32:31 2016
@@ -1490,7 +1490,12 @@ public class DuccHandlerClassic extends
while(iterator.hasNext()) {
NodeId key = iterator.next();
MachineInfo machineInfo = machines.get(key);
- Properties properties =
DuccDaemonRuntimeProperties.getInstance().getAgent(machineInfo.getName());
+ DuccDaemonRuntimeProperties drp =
DuccDaemonRuntimeProperties.getInstance();
+ String machineName = machineInfo.getName();
+ if(machineName.startsWith("=")) {
+ continue;
+ }
+ Properties properties =
drp.getAgent(machineName);
sb.append(trGet(counter));
// Status
StringBuffer status = new StringBuffer();
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=1746305&r1=1746304&r2=1746305&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
Tue May 31 17:32:31 2016
@@ -2023,7 +2023,12 @@ public class DuccHandlerJsonFormat exten
row = new JsonArray();
NodeId key = iterator.next();
MachineInfo machineInfo = machines.get(key);
- Properties properties =
DuccDaemonRuntimeProperties.getInstance().getAgent(machineInfo.getName());
+ DuccDaemonRuntimeProperties drp =
DuccDaemonRuntimeProperties.getInstance();
+ String machineName = machineInfo.getName();
+ if(machineName.startsWith("=")) {
+ continue;
+ }
+ Properties properties =
drp.getAgent(machineName);
// Status
StringBuffer status = new StringBuffer();
String machineStatus = machineInfo.getStatus();
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/types/NodeId.java
URL:
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/types/NodeId.java?rev=1746305&r1=1746304&r2=1746305&view=diff
==============================================================================
---
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/types/NodeId.java
(original)
+++
uima/sandbox/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/types/NodeId.java
Tue May 31 17:32:31 2016
@@ -90,4 +90,12 @@ public class NodeId implements Comparabl
}
return retVal;
}
+
+ // @return use long name as hashCode
+
+ @Override
+ public int hashCode()
+ {
+ return getLongName().hashCode();
+ }
}