Author: cwiklik
Date: Tue May 31 18:34:37 2016
New Revision: 1746315
URL: http://svn.apache.org/viewvc?rev=1746315&view=rev
Log:
UIMA-4948 modified to scrape load average from linux uptime. Changed
NodeCpuCollector to stop collecting CPU as this class is being serialized to a
client. It should just be a plain Bean with getters and setters.
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/NodeCpuCollector.java
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/DefaultNodeMetricsProcessor.java
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxNodeMetricsProcessor.java
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/NodeCpuCollector.java
URL:
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/NodeCpuCollector.java?rev=1746315&r1=1746314&r2=1746315&view=diff
==============================================================================
---
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/NodeCpuCollector.java
(original)
+++
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/NodeCpuCollector.java
Tue May 31 18:34:37 2016
@@ -18,6 +18,8 @@
*/
package org.apache.uima.ducc.agent.metrics.collectors;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
import java.util.concurrent.Callable;
@@ -30,7 +32,45 @@ public class NodeCpuCollector implements
public NodeCpuInfo call() throws Exception {
OperatingSystemMXBean osBean =
ManagementFactory.getOperatingSystemMXBean();
- return new NodeCpuInfo(osBean.getAvailableProcessors());
+ return new NodeCpuInfo(osBean.getAvailableProcessors(),
String.valueOf(getCPULoad()));
}
+ private double getCPULoad() throws Exception {
+ double cpu = 0.0;
+ InputStreamReader in = null;
+ String[] command = {
+ "/bin/sh",
+ "-c",
+ "/bin/grep 'cpu' /proc/stat | /bin/awk
'{usage=($2+$4)*100/($2+$4+$5)} END {print usage}'" };
+ try {
+ ProcessBuilder pb = new ProcessBuilder();
+ pb.command(command);
+
+ pb.redirectErrorStream(true);
+ Process swapCollectorProcess = pb.start();
+ in = new
InputStreamReader(swapCollectorProcess.getInputStream());
+ BufferedReader reader = new BufferedReader(in);
+ String line = null;
+ while ((line = reader.readLine()) != null) {
+ System.out.println(line);
+ try {
+ cpu = Double.parseDouble(line.trim());
+ } catch (NumberFormatException e) {
+ cpu = 0;
+ e.printStackTrace();
+ }
+ }
+ } catch (Exception e) {
+ throw e;
+ } finally {
+ if (in != null) {
+ try {
+ in.close();
+ } catch (Exception e) {
+ }
+ }
+ }
+
+ return cpu;
+ }
}
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/DefaultNodeMetricsProcessor.java
URL:
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/DefaultNodeMetricsProcessor.java?rev=1746315&r1=1746314&r2=1746315&view=diff
==============================================================================
---
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/DefaultNodeMetricsProcessor.java
(original)
+++
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/DefaultNodeMetricsProcessor.java
Tue May 31 18:34:37 2016
@@ -28,6 +28,7 @@ import org.apache.uima.ducc.agent.Agent;
import org.apache.uima.ducc.agent.NodeAgent;
import
org.apache.uima.ducc.agent.metrics.collectors.DefaultNodeLoadAverageCollector;
import
org.apache.uima.ducc.agent.metrics.collectors.DefaultNodeMemoryCollector;
+import org.apache.uima.ducc.agent.metrics.collectors.NodeCpuCollector;
import org.apache.uima.ducc.agent.metrics.collectors.NodeUsersCollector;
import org.apache.uima.ducc.common.DuccNode;
import org.apache.uima.ducc.common.Node;
@@ -67,10 +68,10 @@ public class DefaultNodeMetricsProcessor
new DefaultNodeLoadAverageCollector();
Future<NodeLoadAverage> loadFuture = pool.submit(loadAvgCollector);
-// NodeCpuCollector cpuCollector = new NodeCpuCollector();
+ NodeCpuCollector cpuCollector = new NodeCpuCollector();
// Future<NodeCpuInfo> cpuFuture = pool.submit(cpuCollector);
- NodeCpuInfo cpuInfo = new NodeCpuInfo(agent.numProcessors);
+ NodeCpuInfo cpuInfo = new NodeCpuInfo(agent.numProcessors,
cpuCollector.call().getCurrentLoad());
NodeUsersCollector nodeUsersCollector = new
NodeUsersCollector(agent, logger);
Future<TreeMap<String,NodeUsersInfo>> nuiFuture =
pool.submit(nodeUsersCollector);
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxNodeMetricsProcessor.java
URL:
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxNodeMetricsProcessor.java?rev=1746315&r1=1746314&r2=1746315&view=diff
==============================================================================
---
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxNodeMetricsProcessor.java
(original)
+++
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxNodeMetricsProcessor.java
Tue May 31 18:34:37 2016
@@ -18,6 +18,8 @@
*/
package org.apache.uima.ducc.agent.processors;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.util.TreeMap;
import java.util.concurrent.ExecutorService;
@@ -27,6 +29,7 @@ import java.util.concurrent.Future;
import org.apache.camel.Exchange;
import org.apache.uima.ducc.agent.Agent;
import org.apache.uima.ducc.agent.NodeAgent;
+import org.apache.uima.ducc.agent.metrics.collectors.NodeCpuCollector;
import org.apache.uima.ducc.agent.metrics.collectors.NodeLoadAverageCollector;
import org.apache.uima.ducc.agent.metrics.collectors.NodeMemInfoCollector;
import org.apache.uima.ducc.agent.metrics.collectors.NodeUsersCollector;
@@ -125,12 +128,15 @@ public class LinuxNodeMetricsProcessor e
NodeMemInfoCollector memCollector = new
NodeMemInfoCollector(MeminfoTargetFields);
Future<NodeMemory> nmiFuture =
pool.submit(memCollector);
- NodeLoadAverageCollector loadAvgCollector = new
NodeLoadAverageCollector(
- loadAvgFile, 5, 0);
+// NodeLoadAverageCollector loadAvgCollector = new
NodeLoadAverageCollector(
+// loadAvgFile, 5, 0);
+ //
+ NodeLoadAverageCollector loadAvgCollector = new
NodeLoadAverageCollector();
+
Future<NodeLoadAverage> loadFuture =
pool.submit(loadAvgCollector);
-// NodeCpuCollector cpuCollector = new NodeCpuCollector();
+ NodeCpuCollector cpuCollector = new NodeCpuCollector();
// Future<NodeCpuInfo> cpuFuture =
pool.submit(cpuCollector);
- NodeCpuInfo cpuInfo = new NodeCpuInfo(agent.numProcessors);
+ NodeCpuInfo cpuInfo = new
NodeCpuInfo(agent.numProcessors, String.valueOf(cpuCollector.call()));
e.getIn().setHeader("node",
agent.getIdentity().getName());
NodeMemory memInfo = nmiFuture.get();
@@ -148,8 +154,8 @@ public class LinuxNodeMetricsProcessor e
} else {
users = new TreeMap<String, NodeUsersInfo>();
}
-
- NodeMetrics nodeMetrics = new NodeMetrics(agent.getIdentity(),
memInfo, loadFuture.get(),
+ NodeLoadAverage lav = loadFuture.get();
+ NodeMetrics nodeMetrics = new NodeMetrics(agent.getIdentity(),
memInfo, lav,
cpuInfo, users);
Node node = new DuccNode(agent.getIdentity(),
nodeMetrics, agent.useCgroups);
@@ -165,7 +171,7 @@ public class LinuxNodeMetricsProcessor e
" OS Version:" + osversion +
" OS Arch:" + osarch +
" CPU Count:" +
cpuInfo.getAvailableProcessors() +
- " CPU Load:" +cpuInfo.getCurrentLoad() +
+ " CPU Load Average:" +lav.getLoadAvg1()
+
" Posting Memory (KB):"
+
node.getNodeMetrics().getNodeMemory().getMemTotal()+
" Memory Free
(KB):"+node.getNodeMetrics().getNodeMemory().getMemFree()+
@@ -181,21 +187,8 @@ public class LinuxNodeMetricsProcessor e
NodeMetricsUpdateDuccEvent updateEvent = new
NodeMetricsUpdateDuccEvent(node,agent.getInventoryRef().size());
e.getIn().setBody(updateEvent,
NodeMetricsUpdateDuccEvent.class);
- // Add header property which will allow the agent to
filter in its pings
-// Map<String, Object> headers = new HashMap<String,
Object>();
-//
headers.put(agent.configurationFactory.agentPingSelectorName,
-// agent.getIdentity().getIp());
-
- // Dispatch ping to self via common agent ping topic. A
property in the header
- // allow the agent to filter in its pings
-// agent.
-// configurationFactory.
-// getAgentPingDispatcher().
-// dispatch(new AgentPingEvent(EventType.AGENT_PING,
node), headers);
-
} catch (Exception ex) {
logger.error(methodName, null, ex, new Object[] {
"Agent" });
}
}
-
}