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 2019/11/25 20:43:33 UTC

svn commit: r1870424 - in /uima/uima-ducc/trunk: uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/ uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/ uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/

Author: degenaro
Date: Mon Nov 25 20:43:33 2019
New Revision: 1870424

URL: http://svn.apache.org/viewvc?rev=1870424&view=rev
Log:
UIMA-6158 DUCC Web Server (WS) should display Agent BootTime, IP, PID, and JConsoleUrl when no shared filesystem

Added:
    uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/INodeBootMetrics.java   (with props)
Modified:
    uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/NodeMetricsUpdateDuccEvent.java
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesData.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

Added: uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/INodeBootMetrics.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/INodeBootMetrics.java?rev=1870424&view=auto
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/INodeBootMetrics.java (added)
+++ uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/INodeBootMetrics.java Mon Nov 25 20:43:33 2019
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+package org.apache.uima.ducc.transport.event;
+
+public interface INodeBootMetrics {
+	
+	public String getBootTime();
+	public String getPid();
+	public String getNodeIp();
+	public String getJconsoleUrl();
+}

Propchange: uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/INodeBootMetrics.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/NodeMetricsUpdateDuccEvent.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/NodeMetricsUpdateDuccEvent.java?rev=1870424&r1=1870423&r2=1870424&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/NodeMetricsUpdateDuccEvent.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-transport/src/main/java/org/apache/uima/ducc/transport/event/NodeMetricsUpdateDuccEvent.java Mon Nov 25 20:43:33 2019
@@ -21,25 +21,47 @@ package org.apache.uima.ducc.transport.e
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map.Entry;
+import java.util.Properties;
 import java.util.TreeMap;
 
 import org.apache.uima.ducc.common.Node;
 import org.apache.uima.ducc.common.NodeIdentity;
 import org.apache.uima.ducc.common.agent.metrics.memory.NodeMemory;
+import org.apache.uima.ducc.common.boot.DuccDaemonRuntimeProperties;
 import org.apache.uima.ducc.common.node.metrics.NodeUsersInfo;
 import org.apache.uima.ducc.common.node.metrics.NodeUsersInfo.NodeProcess;
 
 
-public class NodeMetricsUpdateDuccEvent extends AbstractDuccEvent{
+public class NodeMetricsUpdateDuccEvent extends AbstractDuccEvent implements INodeBootMetrics {
 
 	private static final long serialVersionUID = -1066240477810440223L;
 	private Node node;
 	private int processCount=0;
 	
-	public NodeMetricsUpdateDuccEvent(Node node, int processCount) {
-		super(EventType.NODE_METRICS);
+	private String bootTime;
+	private String pid;
+	private String nodeIp;
+	private String jconsoleUrl;
+	
+	private void init(Node node, int processCount) {
 		this.node = node;
 		this.processCount = processCount;
+		DuccDaemonRuntimeProperties drp = DuccDaemonRuntimeProperties.getInstance();
+		if(node != null) {
+			String machineName = node.getNodeIdentity().getShortName();
+			Properties properties = drp.getAgent(machineName);
+			if(properties != null) {
+				bootTime = properties.getProperty(DuccDaemonRuntimeProperties.keyBootTime,"");
+				pid = properties.getProperty(DuccDaemonRuntimeProperties.keyPid,"");
+				nodeIp = properties.getProperty(DuccDaemonRuntimeProperties.keyNodeIpAddress,"");
+				jconsoleUrl = properties.getProperty(DuccDaemonRuntimeProperties.keyJmxUrl,"");
+			}
+		}
+	}
+	
+	public NodeMetricsUpdateDuccEvent(Node node, int processCount) {
+		super(EventType.NODE_METRICS);
+		init(node, processCount);
 	}
 	public Node getNode() {
 		return node;
@@ -78,4 +100,20 @@ public class NodeMetricsUpdateDuccEvent
 	public boolean getCgroupsCpuReportingEnabled() {
 		return node.getNodeMetrics().isCpuReportingEnabled();
 	}
+	@Override
+	public String getBootTime() {
+		return bootTime;
+	}
+	@Override
+	public String getPid() {
+		return pid;
+	}
+	@Override
+	public String getNodeIp() {
+		return nodeIp;
+	}
+	@Override
+	public String getJconsoleUrl() {
+		return jconsoleUrl;
+	}
 }

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesData.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesData.java?rev=1870424&r1=1870423&r2=1870424&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesData.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/DuccMachinesData.java Mon Nov 25 20:43:33 2019
@@ -18,7 +18,9 @@
 */
 package org.apache.uima.ducc.ws;
 
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -284,8 +286,11 @@ public class DuccMachinesData {
 				String memFree = "";
 				String swapInuse = "";
 				String swapFree = "";
+				String jConsole = "";
 				double cpu = 0;
-				MachineInfo machineInfo = new MachineInfo(IDuccEnv.DUCC_NODES_FILE_PATH, "", nodeName, memTotal, memReserve, memFree, swapInuse, swapFree, cpu, false, false, null, -1, 0);
+				long bootTime = 0;
+				long pid = 0;
+				MachineInfo machineInfo = new MachineInfo(IDuccEnv.DUCC_NODES_FILE_PATH, "", nodeName, memTotal, memReserve, memFree, swapInuse, swapFree, jConsole, cpu, false, false, null, bootTime, pid, -1, 0);
 				putMachine(machineInfo);
 			}
 			updateSortedMachines();
@@ -386,6 +391,31 @@ public class DuccMachinesData {
 		return cpu;
 	}
 	
+	private SimpleDateFormat sdf = new SimpleDateFormat("yyyy.mm.dd HH:mm:ss EEE");
+	
+	private long toMillis(String sdate) {
+		long retVal = 0;
+		try {
+			Date d = sdf.parse(sdate);
+			retVal = d.getTime();
+		}
+		catch(Exception e) {
+			
+		}
+		return retVal;
+	}
+	
+	private long toLong(String sdata) {
+		long retVal = 0;
+		try {
+			retVal = Long.parseLong(sdata);
+		}
+		catch(Exception e) {
+			
+		}
+		return retVal;
+	}
+	
 	/**
 	 * 
 	 * @param duccEvent
@@ -440,12 +470,26 @@ public class DuccMachinesData {
 		//String swapFree = ""+lval/*+memUnits*/;
 		msi.swapFree = lvalSwapFree;
 		String swapFree = ""+lvalSwapFree/*+memUnits*/;
+		
+		String jConsole = null;
+		long bootTime = 0;
+		long pid = 0;
+		
+		try {
+			jConsole = nodeMetrics.getJconsoleUrl();
+			bootTime = toMillis(nodeMetrics.getBootTime());
+			pid = toLong(nodeMetrics.getPid());
+		}
+		catch(NoSuchMethodError t) {
+			// legacy Agent
+		}
+		
 		List<ProcessInfo> alienPids = nodeMetrics.getRogueProcessInfoList();
 		Node node = nodeMetrics.getNode();
 		double cpu = getCpuLoadAvg(node);
 		boolean cGroupsEnabled = nodeMetrics.getCgroups();
 		boolean cGroupsCpuReportingEnabled = nodeMetrics.getCgroupsCpuReportingEnabled();
-		MachineInfo current = new MachineInfo("", ip.toString(), machineName, memTotal, memReserve, memFree, ""+swapInuse, ""+swapFree, cpu, cGroupsEnabled, cGroupsCpuReportingEnabled, alienPids, duccEvent.getMillis(), duccEvent.getEventSize());
+		MachineInfo current = new MachineInfo("", ip.toString(), machineName, memTotal, memReserve, memFree, ""+swapInuse, ""+swapFree, jConsole, cpu, cGroupsEnabled, cGroupsCpuReportingEnabled, alienPids, bootTime, pid, duccEvent.getMillis(), duccEvent.getEventSize());
 		
 		NodeId key = nodeId;
 		MachineInfo previous = unsortedMachines.get(key);

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=1870424&r1=1870423&r2=1870424&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 25 20:43:33 2019
@@ -51,10 +51,13 @@ public class MachineInfo implements Comp
 	private String memFree;
 	private String swapInuse;
 	private String swapFree;
+	private String jConsole;
 	private double cpu;
 	private boolean cGroupsEnabled;
 	private boolean cGroupsCpuReportingEnabled;
 	private List<ProcessInfo> alienPids;
+	private long bootTime;
+	private long pid;
 	private long swapDelta;
 	private long heartbeat;
 	private long heartbeatMax;
@@ -71,15 +74,15 @@ public class MachineInfo implements Comp
 	
 	private NodeId nodeid;
 	
-	public MachineInfo(String fileDef, String ip, String name, String memTotal, String memReserve, String memFree, String swapInuse, String swapFree, double cpu, boolean cGroupsEnabled, boolean cGroupsCpuReportingEnabled, List<ProcessInfo> alienPids, long heartbeat, long pubSize) {
-		init(MachineStatus.Defined, fileDef, ip, name, memTotal, memReserve, memFree, swapInuse, swapFree, cpu, cGroupsEnabled, cGroupsCpuReportingEnabled, alienPids, heartbeat, pubSize);
+	public MachineInfo(String fileDef, String ip, String name, String memTotal, String memReserve, String memFree, String swapInuse, String swapFree, String jConsole, double cpu, boolean cGroupsEnabled, boolean cGroupsCpuReportingEnabled, List<ProcessInfo> alienPids, long bootTime, long pid, long heartbeat, long pubSize) {
+		init(MachineStatus.Defined, fileDef, ip, name, memTotal, memReserve, memFree, swapInuse, swapFree, jConsole, cpu, cGroupsEnabled, cGroupsCpuReportingEnabled, alienPids, bootTime, pid, heartbeat, pubSize);
 	}
 	
-	public MachineInfo(MachineStatus machineStatus, String fileDef, String ip, String name, String memTotal, String memReserve, String memFree, String swapInuse, String swapFree, double cpu, boolean cGroupsEnabled, boolean cGroupsCpuReportingEnabled, List<ProcessInfo> alienPids, long heartbeat, long pubSize) {
-		init(machineStatus, fileDef, ip, name, memTotal, memReserve, memFree, swapInuse, swapFree, cpu, cGroupsEnabled, cGroupsCpuReportingEnabled, alienPids, heartbeat, pubSize);
+	public MachineInfo(MachineStatus machineStatus, String fileDef, String ip, String name, String memTotal, String memReserve, String memFree, String swapInuse, String swapFree, String jConsole, double cpu, boolean cGroupsEnabled, boolean cGroupsCpuReportingEnabled, List<ProcessInfo> alienPids, long bootTime, long pid, long heartbeat, long pubSize) {
+		init(machineStatus, fileDef, ip, name, memTotal, memReserve, memFree, swapInuse, swapFree, jConsole, cpu, cGroupsEnabled, cGroupsCpuReportingEnabled, alienPids, bootTime, pid, heartbeat, pubSize);
 	}
 	
-	private void init(MachineStatus machineStatus, String fileDef, String ip, String name, String memTotal, String memReserve, String memFree, String swapInuse, String swapFree, double cpu, boolean cGroupsEnabled, boolean cGroupsCpuReportingEnabled, List<ProcessInfo> alienPids, long heartbeat, long pubSize) {
+	private void init(MachineStatus machineStatus, String fileDef, String ip, String name, String memTotal, String memReserve, String memFree, String swapInuse, String swapFree, String jConsole, double cpu, boolean cGroupsEnabled, boolean cGroupsCpuReportingEnabled, List<ProcessInfo> alienPids, long bootTime, long pid, long heartbeat, long pubSize) {
 		this.machineStatus = machineStatus;
 		this.fileDef = fileDef;
 		this.ip = ip;
@@ -89,6 +92,7 @@ public class MachineInfo implements Comp
 		this.memFree = memFree;
 		this.swapInuse = swapInuse;
 		this.swapFree = swapFree;
+		this.jConsole = jConsole;
 		this.cpu = cpu;
 		this.cGroupsEnabled = cGroupsEnabled;
 		this.cGroupsCpuReportingEnabled = cGroupsCpuReportingEnabled;
@@ -96,6 +100,8 @@ public class MachineInfo implements Comp
 		if(this.alienPids == null) {
 			this.alienPids = new ArrayList<ProcessInfo>();
 		}
+		this.bootTime = bootTime;
+		this.pid = pid;
 		this.swapDelta = 0;
 		this.heartbeat = heartbeat;
 		this.heartbeatMax = 0;
@@ -310,6 +316,10 @@ public class MachineInfo implements Comp
 		return this.swapFree;
 	}
 	
+	public String getJconsole() {
+		return this.jConsole;
+	}
+	
 	public double getCpu() {
 		return cpu;
 	}
@@ -357,6 +367,22 @@ public class MachineInfo implements Comp
 		return retVal;
 	}
 	
+	public long getBootTime() {
+		return this.bootTime;
+	}
+	
+	public void setBootTime(long value) {
+		this.bootTime = value;
+	}
+	
+	public long getPid() {
+		return this.pid;
+	}
+	
+	public void setPid(long value) {
+		this.pid = value;
+	}
+	
 	public long getSwapDelta() {
 		return this.swapDelta;
 	}

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=1870424&r1=1870423&r2=1870424&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 25 20:43:33 2019
@@ -1673,12 +1673,10 @@ public class DuccHandlerClassic extends
 				Iterator<MachineInfo> iterator = machines.keySet().iterator();
 				while(iterator.hasNext()) {
 					MachineInfo machineInfo = iterator.next();
-					DuccDaemonRuntimeProperties drp = DuccDaemonRuntimeProperties.getInstance();
 					String machineName = machineInfo.getShortName();
 					if(machineName.startsWith("=")) {
 						continue;
 					}
-					Properties properties = drp.getAgent(machineName);
 					sb.append(trGet(counter));
 					// Status
 					StringBuffer status = new StringBuffer();
@@ -1711,12 +1709,16 @@ public class DuccHandlerClassic extends
 					sb.append(daemonName);
 					sb.append("</td>");	
 					// Boot Time
-					String bootTime = getTimeStamp(DuccCookies.getDateStyle(request),getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyBootTime,""));
+					String bootTime = null;
+					long bootTimeLong = machineInfo.getBootTime();
+					if(bootTimeLong > 0) {
+						bootTime = getTimeStamp(DuccCookies.getDateStyle(request),bootTimeLong);
+					}
 					sb.append("<td>");
 					sb.append(toDash(bootTime));
 					sb.append("</td>");
 					// Host IP
-					String hostIP = getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyNodeIpAddress,"");
+					String hostIP = machineInfo.getIp();
 					sb.append("<td>");
 					sb.append(toDash(hostIP));
 					sb.append("</td>");	
@@ -1726,7 +1728,11 @@ public class DuccHandlerClassic extends
 					sb.append(hostName);
 					sb.append("</td>");
 					// PID
-					String pid = getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyPid,"");
+					String pid = null;
+					long pidLong = machineInfo.getPid();
+					if(pidLong > 0) {
+						pid = ""+pidLong;
+					}
 					sb.append("<td>");
 					sb.append(toDash(pid));
 					sb.append("</td>");
@@ -1768,7 +1774,7 @@ public class DuccHandlerClassic extends
 					sb.append("</td>");
 					// JConsole URL
 					sb.append("<td>");
-					String jmxUrl = getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyJmxUrl,"");
+					String jmxUrl = machineInfo.getJconsole();
 					if(jmxUrl != null) {
 						sb.append(buildjConsoleLink(jmxUrl));
 					}

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=1870424&r1=1870423&r2=1870424&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 25 20:43:33 2019
@@ -2486,12 +2486,10 @@ public class DuccHandlerJsonFormat exten
 				while(iterator.hasNext()) {
 					row = new JsonArray();
 					MachineInfo machineInfo = iterator.next();
-					DuccDaemonRuntimeProperties drp = DuccDaemonRuntimeProperties.getInstance();
 					String machineName = machineInfo.getShortName();
 					if(machineName.startsWith("=")) {
 						continue;
 					}
-					Properties properties = drp.getAgent(machineName);
 					// Status
 					StringBuffer status = new StringBuffer();
 					if(brokerAlive) {
@@ -2518,16 +2516,24 @@ public class DuccHandlerJsonFormat exten
 					String daemonName = "Agent";
 					row.add(new JsonPrimitive(daemonName));
 					// Boot Time
-					String bootTime = getTimeStamp(DuccCookies.getDateStyle(request),getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyBootTime,""));
+					String bootTime = null;
+					long bootTimeLong = machineInfo.getBootTime();
+					if(bootTimeLong > 0) {
+						bootTime = getTimeStamp(DuccCookies.getDateStyle(request),bootTimeLong);
+					}
 					row.add(new JsonPrimitive(bootTime));
 					// Host IP
-					String hostIP = getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyNodeIpAddress,"");
+					String hostIP = machineInfo.getIp();
 					row.add(new JsonPrimitive(hostIP));
 					// Host Name
 					String hostName = machineInfo.getName();
 					row.add(new JsonPrimitive(hostName));
 					// PID
-					String pid = getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyPid,"");
+					String pid = null;
+					long pidLong = machineInfo.getPid();
+					if(pidLong > 0) {
+						pid = ""+pidLong;
+					}
 					row.add(new JsonPrimitive(pid));
 					// Publication Size (last)
 					String publicationSizeLast = machineInfo.getPublicationSizeLast();
@@ -2559,7 +2565,7 @@ public class DuccHandlerJsonFormat exten
 					}
 					row.add(new JsonPrimitive(fmtHeartbeatMaxTOD));
 					// JConsole URL
-					String jmxUrl = getPropertiesValue(properties,DuccDaemonRuntimeProperties.keyJmxUrl,"");
+					String jmxUrl = machineInfo.getJconsole();
 					String jmxUrlLink = "";
 					if(jmxUrl != null) {
 						jmxUrlLink = buildjConsoleLink(jmxUrl);