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" });
                }
        }
-
 }


Reply via email to