Author: cwiklik
Date: Mon May 13 17:00:49 2013
New Revision: 1481969

URL: http://svn.apache.org/r1481969
Log:
UIMA-2878 Modified to publish cpu utilization only when the process is in 
Running state

Modified:
    
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java?rev=1481969&r1=1481968&r2=1481969&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/processors/LinuxProcessMetricsProcessor.java
 Mon May 13 17:00:49 2013
@@ -48,6 +48,10 @@ public class LinuxProcessMetricsProcesso
   // private RandomAccessFile nodeStatFile;
   private RandomAccessFile processStatFile;
 
+  private long initTimeinSeconds = 0;
+  
+  private boolean initializing = true;
+  
   private final ExecutorService pool;
 
   private IDuccProcess process;
@@ -127,17 +131,31 @@ public class LinuxProcessMetricsProcesso
                 process.getPID(), managedProcess.getOwner(), DUCC_HOME
                         + "/admin/ducc_get_process_swap_usage.sh", logger);
 
-        // Publish cumulative CPU usage
-        if (agent.cpuClockRate > 0) {
-          logger.info("process", null, "----------- PID:" + process.getPID()
-                  + " CPU Time (seconds):" + 
processCpuUsage.get().getTotalJiffies()
-                  / agent.cpuClockRate);
-          process.setCpuTime(processCpuUsage.get().getTotalJiffies() / 
agent.cpuClockRate);
+        // report cpu utilization while the process is running
+        if ( 
managedProcess.getDuccProcess().getProcessState().equals(ProcessState.Running)) 
{
+          if (agent.cpuClockRate > 0) {
+            if ( initializing ) {
+              initializing = false;
+              // cache how much cpu was used up during initialization of the 
process
+              initTimeinSeconds = processCpuUsage.get().getTotalJiffies() / 
agent.cpuClockRate;
+            }
+            //  normalize cpu usage to report in seconds. Also subtract how 
much cpu was
+            //  used during initialization
+            long cpu = ( 
processCpuUsage.get().getTotalJiffies()/agent.cpuClockRate)-initTimeinSeconds;
+            logger.info("process", null, "----------- PID:" + process.getPID()
+                    + " CPU Time (seconds):" + cpu);
+            // Publish cumulative CPU usage
+            process.setCpuTime(cpu);
+          } else {
+            process.setCpuTime(0);
+            logger.info("process", null,
+                    "Agent is unable to determine Node's clock rate. 
Defaulting CPU Time to 0 For Process with PID:"
+                            + process.getPID());
+          }
+          
         } else {
+          //   report 0 for CPU while the process is initializing
           process.setCpuTime(0);
-          logger.info("process", null,
-                  "Agent is unable to determine Node's clock rate. Defaulting 
CPU Time to 0 For Process with PID:"
-                          + process.getPID());
         }
         long majorFaults = processMajorFaultUsage.get().getMajorFaults();
         // collects process Major faults (swap in memory)


Reply via email to