Author: cwiklik
Date: Thu Aug 18 13:45:24 2016
New Revision: 1756785

URL: http://svn.apache.org/viewvc?rev=1756785&view=rev
Log:
UIMA-5047 Modified to fetch cpu usage from cgroups cpuacct.stat

Modified:
    
uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java
    
uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/ProcessCpuUsageCollector.java
    
uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java
    
uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/DuccProcessCpuUsage.java
    
uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/ProcessCpuUsage.java

Modified: 
uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java
URL: 
http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java?rev=1756785&r1=1756784&r2=1756785&view=diff
==============================================================================
--- 
uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java
 (original)
+++ 
uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java
 Thu Aug 18 13:45:24 2016
@@ -57,6 +57,7 @@ public class CGroupsManager {
        private static final String CGDuccMemoryPath = "/memory/"+SYSTEM+"/";
        private static final String CGDuccCpuPath = "/cpu/"+SYSTEM+"/";
        private static final String CGProcsFile = "/cgroup.procs";
+       private static final String CGDuccCpuAcctPath = "/cpu/"+SYSTEM+"/";
        
        // legacy means that the cgonfig points to <cgroup location>/ducc
        private boolean legacyCgConfig = false;
@@ -489,6 +490,33 @@ public class CGroupsManager {
                return false;
        }
 
+       public String getCpuUsage(String containerId ) throws Exception {
+               String usage = "0";
+               String file = 
getCGroupLocation("cpuacct")+containerId+System.getProperty("file.separator")+"cpuacct.stat";
+               agentLogger.trace("getCpuUsage", null, "CPUACCT.STAT 
file:"+file);
+               File f = new File(file);
+               if ( f.exists() ) {
+                       InputStreamReader isr = new InputStreamReader(new 
FileInputStream(f));
+                       BufferedReader br = new BufferedReader(isr);
+                       String line;
+                       try {
+                               while ((line = br.readLine()) != null) {
+                                       agentLogger.trace("getCpuUsage", null, 
"CPUACCT.STAT Line:"+line);
+                                       // The line read from cpuacct.stat has: 
NAME VALUE syntax. 
+                                       // Need just the VALUE part
+                                       usage = (line.trim().split(" "))[1];  
// get the CPU in user mode
+                                       break;
+                               }
+                       } finally {
+                               if (isr != null) {
+                                       isr.close();
+                               }
+                               agentLogger.trace("getCpuUsage", null, "Done 
Reading cpuacct.stat file:"+file);
+
+                       }
+               }
+               return usage;
+       }
        /**
         * Sets the max memory use for an existing cgroup container.
         * 

Modified: 
uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/ProcessCpuUsageCollector.java
URL: 
http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/ProcessCpuUsageCollector.java?rev=1756785&r1=1756784&r2=1756785&view=diff
==============================================================================
--- 
uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/ProcessCpuUsageCollector.java
 (original)
+++ 
uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/metrics/collectors/ProcessCpuUsageCollector.java
 Thu Aug 18 13:45:24 2016
@@ -18,35 +18,36 @@
 */
 package org.apache.uima.ducc.agent.metrics.collectors;
 
-import java.io.RandomAccessFile;
 import java.util.concurrent.Callable;
 
+import org.apache.uima.ducc.agent.launcher.CGroupsManager;
 import org.apache.uima.ducc.common.agent.metrics.cpu.DuccProcessCpuUsage;
 import org.apache.uima.ducc.common.agent.metrics.cpu.ProcessCpuUsage;
 import org.apache.uima.ducc.common.utils.DuccLogger;
 
-public class ProcessCpuUsageCollector extends AbstractMetricCollector 
implements
+public class ProcessCpuUsageCollector implements
                Callable<ProcessCpuUsage> {
-       //private DuccLogger logger;
-       //private String pid;
-
-       public ProcessCpuUsageCollector(DuccLogger logger, String pid,
-                       RandomAccessFile fileHandle, int howMany, int offset) {
-               super(fileHandle, howMany, offset);
-               //this.logger = logger;
-               //this.pid = pid;
+       private String containerId=null;
+       private CGroupsManager cgm=null;
+       
+       public ProcessCpuUsageCollector(DuccLogger logger, CGroupsManager mgr, 
String jobId ) {
+               this.containerId = jobId;
+               this.cgm = mgr;
        }
 
        public ProcessCpuUsage call() throws Exception {
                try {
-                       super.parseMetricFile();
-                       return new DuccProcessCpuUsage(super.metricFileContents,
-                            super.metricFieldOffsets, 
super.metricFieldLengths);
+                       return new DuccProcessCpuUsage(collect());
                } catch (Exception e) {
-                       e.printStackTrace();
                        throw e;
                }
        }
+       
+       private long collect() throws Exception{
+                       
+               return Long.parseLong(cgm.getCpuUsage(containerId));
+       
+       }
 /*
        private String execTopShell() throws Exception {
                List<String> command = new ArrayList<String>();

Modified: 
uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java
URL: 
http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java?rev=1756785&r1=1756784&r2=1756785&view=diff
==============================================================================
--- 
uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java
 (original)
+++ 
uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java
 Thu Aug 18 13:45:24 2016
@@ -29,6 +29,7 @@ import java.util.concurrent.Future;
 
 import org.apache.camel.Exchange;
 import org.apache.uima.ducc.agent.NodeAgent;
+import org.apache.uima.ducc.agent.launcher.CGroupsManager;
 import org.apache.uima.ducc.agent.launcher.ManagedProcess;
 import org.apache.uima.ducc.agent.metrics.collectors.DuccGarbageStatsCollector;
 import org.apache.uima.ducc.agent.metrics.collectors.ProcessCpuUsageCollector;
@@ -208,12 +209,15 @@ public class LinuxProcessMetricsProcesso
                                                                        
.submit(processMajorFaultUsageCollector);
                                                        totalFaults += 
processMajorFaultUsage.get()
                                                                        
.getMajorFaults();
-                                                       RandomAccessFile raf = 
null;
+                                                       //RandomAccessFile raf 
= null;
                                                        try {
+                                                               /*
                                                                raf = new 
RandomAccessFile("/proc/" + pid + "/stat", "r");
                                                                
ProcessCpuUsageCollector processCpuUsageCollector = new 
ProcessCpuUsageCollector(
                                                                                
logger, pid, raf, 42, 0);
-
+       */
+                                                               
ProcessCpuUsageCollector processCpuUsageCollector = 
+                                                                               
new ProcessCpuUsageCollector(logger, agent.cgroupsManager, containerId);
                                                                // if process 
is stopping or already dead dont
                                                                // collect 
metrics. The Camel
                                                                // route has 
just been stopped.
@@ -223,19 +227,19 @@ public class LinuxProcessMetricsProcesso
 
                                                                processCpuUsage 
= pool
                                                                                
.submit(processCpuUsageCollector);
-                                                               totalCpuUsage 
+= (processCpuUsage.get()
-                                                                               
.getTotalJiffies() / agent.cpuClockRate);
+                                                               long cpuUsage = 
processCpuUsage.get().getCpuUsage();
+                                                               
+                                                               totalCpuUsage 
+= ( processCpuUsage.get().getCpuUsage() / agent.cpuClockRate );
+                                                               logger.info(
+                                                                               
"LinuxProcessMetricsProcessor.process",null,
+                                                                               
"CPU USAGE:"+cpuUsage+ " CLOCK RATE:"+agent.cpuClockRate+" Total CPU 
USAGE:"+totalCpuUsage);
+                                                               
                                                                
                                                        } catch( Exception ee) {
                                                                logger.warn(
                                                                                
"LinuxProcessMetricsProcessor.process",
                                                                                
null,ee);
-
-                                                       } finally {
-                                                               if ( raf != 
null ) {
-                                                                       
raf.close();
-                                                               }
-                                                       }
+                                                       } 
 
                                                        currentCpuUsage += 
collectProcessCurrentCPU(pid);
 
@@ -293,10 +297,11 @@ public class LinuxProcessMetricsProcesso
                                                totalFaults = 
processMajorFaultUsage.get()
                                                                
.getMajorFaults();
 
+                                               /*
                                                ProcessCpuUsageCollector 
processCpuUsageCollector = new ProcessCpuUsageCollector(
                                                                logger, 
process.getPID(), processStatFile, 42,
                                                                0);
-
+                                               
                                                // if process is stopping or 
already dead dont collect
                                                // metrics. The Camel
                                                // route has just been stopped.
@@ -306,6 +311,12 @@ public class LinuxProcessMetricsProcesso
                                                processCpuUsage = 
pool.submit(processCpuUsageCollector);
                                                totalCpuUsage = 
processCpuUsage.get().getTotalJiffies()
                                                                / 
agent.cpuClockRate;
+                                       
+*/
+
+                                               // Cgroups are not available so 
percent CPU is not available
+                                               totalCpuUsage = 0;
+                                               
                                                currentCpuUsage = 
collectProcessCurrentCPU(process
                                                                .getPID());
 

Modified: 
uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/DuccProcessCpuUsage.java
URL: 
http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/DuccProcessCpuUsage.java?rev=1756785&r1=1756784&r2=1756785&view=diff
==============================================================================
--- 
uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/DuccProcessCpuUsage.java
 (original)
+++ 
uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/DuccProcessCpuUsage.java
 Thu Aug 18 13:45:24 2016
@@ -18,25 +18,14 @@
 */
 package org.apache.uima.ducc.common.agent.metrics.cpu;
 
-import org.apache.uima.ducc.common.node.metrics.ByteBufferParser;
-
-public class DuccProcessCpuUsage extends ByteBufferParser 
-implements ProcessCpuUsage {
+public class DuccProcessCpuUsage implements ProcessCpuUsage {
        private static final long serialVersionUID = 1L;
-       public static final int USERJIFFIES=13;
-       public static final int SYSTEMJIFFIES=14;
+    private long cpuUsage=0;
     
-       public DuccProcessCpuUsage(byte[] memInfoBuffer,
-                       int[] memInfoFieldOffsets, int[] memInfoFiledLengths) {
-               super(memInfoBuffer, memInfoFieldOffsets, memInfoFiledLengths);
+       public DuccProcessCpuUsage( long cpuUsage ) {
+               this.cpuUsage = cpuUsage;
        }       
-       public long getUserJiffies() {
-               return super.getFieldAsLong(USERJIFFIES);
-       }
-       public long getKernelJiffies() {
-               return super.getFieldAsLong(SYSTEMJIFFIES);
-       }
-       public long getTotalJiffies() {
-               return (getUserJiffies()+getKernelJiffies());
+       public long getCpuUsage() {
+               return cpuUsage;
        }
 }

Modified: 
uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/ProcessCpuUsage.java
URL: 
http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/ProcessCpuUsage.java?rev=1756785&r1=1756784&r2=1756785&view=diff
==============================================================================
--- 
uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/ProcessCpuUsage.java
 (original)
+++ 
uima/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/agent/metrics/cpu/ProcessCpuUsage.java
 Thu Aug 18 13:45:24 2016
@@ -21,7 +21,5 @@ package org.apache.uima.ducc.common.agen
 import java.io.Serializable;
 
 public interface ProcessCpuUsage extends Serializable {
-       public long getUserJiffies();
-       public long getKernelJiffies();
-       public long getTotalJiffies();
+       public long getCpuUsage();
 }


Reply via email to