Author: aco
Date: Thu Jun 22 19:26:20 2006
New Revision: 416547

URL: http://svn.apache.org/viewvc?rev=416547&view=rev
Log:
- Redesigned the sampler and added the cpu sampler.

Added:
    
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/
    
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/AbstractPerformanceSampler.java
    
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/CpuSamplerTask.java
    
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/MeasurableClient.java
    
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/PerformanceEventListener.java
    
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/PerformanceSampler.java
    
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/ThroughputSamplerTask.java
    
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/plugins/
    
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/plugins/CpuSamplerPlugin.java
    
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/plugins/LinuxCpuSamplerPlugin.java

Added: 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/AbstractPerformanceSampler.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/AbstractPerformanceSampler.java?rev=416547&view=auto
==============================================================================
--- 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/AbstractPerformanceSampler.java
 (added)
+++ 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/AbstractPerformanceSampler.java
 Thu Jun 22 19:26:20 2006
@@ -0,0 +1,150 @@
+package org.apache.activemq.tool.sampler;
+
+import org.apache.activemq.tool.reports.PerformanceReportWriter;
+import org.apache.activemq.tool.properties.AbstractObjectProperties;
+
+import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicBoolean;
+
+public abstract class AbstractPerformanceSampler extends 
AbstractObjectProperties implements PerformanceSampler {
+       protected long rampUpTime   = 30 * 1000; // 30 secs
+       protected long rampDownTime = 30 * 1000; // 30 secs
+       protected long duration     = 5 * 60 * 1000; // 5 mins
+       protected long interval     = 1000; // 1 sec
+       protected PerformanceReportWriter perfReportWriter = null;
+       protected PerformanceEventListener perfEventListener = null;
+       protected final AtomicBoolean isRunning = new AtomicBoolean(false);
+
+       protected long sampleIndex = 0;
+
+       public long getRampUpTime() {
+               return rampUpTime;
+       }
+
+       public void setRampUpTime(long rampUpTime) {
+               this.rampUpTime = rampUpTime;
+       }
+
+       public long getRampDownTime() {
+               return rampDownTime;
+       }
+
+       public void setRampDownTime(long rampDownTime) {
+               this.rampDownTime = rampDownTime;
+       }
+
+       public long getDuration() {
+               return duration;
+       }
+
+       public void setDuration(long duration) {
+               this.duration = duration;
+       }
+
+       public long getInterval() {
+               return interval;
+       }
+
+       public void setInterval(long interval) {
+               this.interval = interval;
+       }
+
+       public PerformanceReportWriter getPerfReportWriter() {
+               return perfReportWriter;
+       }
+
+       public void setPerfReportWriter(PerformanceReportWriter 
perfReportWriter) {
+               this.perfReportWriter = perfReportWriter;
+       }
+
+       public PerformanceEventListener getPerfEventListener() {
+               return perfEventListener;
+       }
+
+       public void setPerfEventListener(PerformanceEventListener 
perfEventListener) {
+               this.perfEventListener = perfEventListener;
+       }
+
+    public void startSampler() {
+        isRunning.set(true);
+        Thread t = new Thread(this);
+        t.start();
+    }
+
+    public void run() {
+        try {
+            // Compute for the actual duration window of the sampler
+            long endTime = System.currentTimeMillis() + duration - 
rampDownTime;
+
+            onRampUpStart();
+            if (perfEventListener != null) {
+               perfEventListener.onRampUpStart(this);
+            }
+
+            try {
+                Thread.sleep(rampUpTime);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+
+            onSamplerStart();
+            if (perfEventListener != null) {
+               perfEventListener.onSamplerStart(this);
+            }
+
+            while (System.currentTimeMillis() < endTime) {
+                try {
+                    Thread.sleep(interval);
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+                sampleData();
+                sampleIndex++;
+            }
+
+            onSamplerEnd();
+            if (perfEventListener != null) {
+               perfEventListener.onSamplerEnd(this);
+            }
+
+            try {
+                Thread.sleep(rampDownTime);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+
+            onRampDownEnd();
+            if (perfEventListener != null) {
+               perfEventListener.onRampDownEnd(this);
+            }
+        } finally {
+            isRunning.set(false);
+            synchronized (isRunning) {
+                isRunning.notifyAll();
+            }
+        }
+       }
+
+       public abstract void sampleData();
+
+    public boolean isRunning() {
+               return isRunning.get();
+       }
+
+       public void waitUntilDone() {
+               while (isRunning()) {
+            try {
+                synchronized (isRunning) {
+                    isRunning.wait(0);
+                }
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+       }
+
+    // Call back functions to customize behavior of thread.
+    protected void onRampUpStart() {}
+    protected void onSamplerStart() {}
+    protected void onSamplerEnd() {}
+    protected void onRampDownEnd() {}
+}

Added: 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/CpuSamplerTask.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/CpuSamplerTask.java?rev=416547&view=auto
==============================================================================
--- 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/CpuSamplerTask.java
 (added)
+++ 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/CpuSamplerTask.java
 Thu Jun 22 19:26:20 2006
@@ -0,0 +1,34 @@
+package org.apache.activemq.tool.sampler;
+
+import org.apache.activemq.tool.sampler.plugins.CpuSamplerPlugin;
+import org.apache.activemq.tool.sampler.plugins.LinuxCpuSamplerPlugin;
+import org.apache.activemq.tool.reports.plugins.ReportPlugin;
+
+import java.io.IOException;
+
+public class CpuSamplerTask extends AbstractPerformanceSampler {
+
+    private CpuSamplerPlugin plugin = null;
+
+    public void createPlugin() throws IOException {
+        createPlugin(System.getProperty("os.name"));
+    }
+
+    public void createPlugin(String osName) throws IOException {
+        if (osName == null) {
+            throw new IOException("No defined OS name found. Foound: " + 
osName);
+        }
+
+        if (osName.equalsIgnoreCase(CpuSamplerPlugin.LINUX)) {
+            plugin = new LinuxCpuSamplerPlugin();
+        } else {
+            throw new IOException("No CPU Sampler Plugin found for OS: " + 
osName + ". CPU Sampler will not be started.");
+        }
+    }
+
+    public void sampleData() {
+        if (plugin != null && perfReportWriter != null) {
+            perfReportWriter.writeCsvData(ReportPlugin.REPORT_PLUGIN_CPU, 
plugin.getCpuUtilizationStats());
+        }
+    }
+}

Added: 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/MeasurableClient.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/MeasurableClient.java?rev=416547&view=auto
==============================================================================
--- 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/MeasurableClient.java
 (added)
+++ 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/MeasurableClient.java
 Thu Jun 22 19:26:20 2006
@@ -0,0 +1,23 @@
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed 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.activemq.tool.sampler;
+
+public interface MeasurableClient {
+    public void   reset();
+    public String getClientName();
+    public long   getThroughput();
+}

Added: 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/PerformanceEventListener.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/PerformanceEventListener.java?rev=416547&view=auto
==============================================================================
--- 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/PerformanceEventListener.java
 (added)
+++ 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/PerformanceEventListener.java
 Thu Jun 22 19:26:20 2006
@@ -0,0 +1,8 @@
+package org.apache.activemq.tool.sampler;
+
+public interface PerformanceEventListener {
+       public void onRampUpStart(PerformanceSampler sampler);
+       public void onSamplerStart(PerformanceSampler sampler);
+       public void onSamplerEnd(PerformanceSampler sampler);
+       public void onRampDownEnd(PerformanceSampler sampler);
+}

Added: 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/PerformanceSampler.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/PerformanceSampler.java?rev=416547&view=auto
==============================================================================
--- 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/PerformanceSampler.java
 (added)
+++ 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/PerformanceSampler.java
 Thu Jun 22 19:26:20 2006
@@ -0,0 +1,22 @@
+package org.apache.activemq.tool.sampler;
+
+import org.apache.activemq.tool.reports.PerformanceReportWriter;
+
+public interface PerformanceSampler extends Runnable {
+       public long getRampUpTime();
+       public void setRampUpTime(long rampUpTime);
+       public long getRampDownTime();
+       public void setRampDownTime(long rampDownTime);
+       public long getDuration();
+       public void setDuration(long duration);
+       public long getInterval();
+       public void setInterval(long interval);
+       public PerformanceReportWriter getPerfReportWriter();
+       public void setPerfReportWriter(PerformanceReportWriter writer);
+       public PerformanceEventListener getPerfEventListener();
+       public void setPerfEventListener(PerformanceEventListener listener);
+
+       public void sampleData();
+       public boolean isRunning();
+       public void waitUntilDone();
+}

Added: 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/ThroughputSamplerTask.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/ThroughputSamplerTask.java?rev=416547&view=auto
==============================================================================
--- 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/ThroughputSamplerTask.java
 (added)
+++ 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/ThroughputSamplerTask.java
 Thu Jun 22 19:26:20 2006
@@ -0,0 +1,39 @@
+package org.apache.activemq.tool.sampler;
+
+import org.apache.activemq.tool.reports.plugins.ReportPlugin;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public class ThroughputSamplerTask extends AbstractPerformanceSampler {
+
+    private final Object mutex = new Object();
+    private List clients = new ArrayList();
+
+       public void sampleData() {
+               for (Iterator i = clients.iterator(); i.hasNext();) {
+            MeasurableClient client = (MeasurableClient) i.next();
+            if (perfReportWriter != null) {
+               
perfReportWriter.writeCsvData(ReportPlugin.REPORT_PLUGIN_THROUGHPUT,
+                        "index=" + sampleIndex + ",clientName=" + 
client.getClientName() +
+                        ",throughput=" + client.getThroughput());
+            }
+            client.reset();
+        }
+       }
+
+       public void registerClient(MeasurableClient client) {
+        synchronized (mutex) {
+            clients.add(client);
+        }
+    }
+
+    protected void onSamplerStart() {
+        // Reset the throughput of the clients
+        for (Iterator i = clients.iterator(); i.hasNext();) {
+            MeasurableClient client = (MeasurableClient) i.next();
+            client.reset();
+        }
+    }
+}

Added: 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/plugins/CpuSamplerPlugin.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/plugins/CpuSamplerPlugin.java?rev=416547&view=auto
==============================================================================
--- 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/plugins/CpuSamplerPlugin.java
 (added)
+++ 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/plugins/CpuSamplerPlugin.java
 Thu Jun 22 19:26:20 2006
@@ -0,0 +1,19 @@
+package org.apache.activemq.tool.sampler.plugins;
+
+public interface CpuSamplerPlugin {
+       public final static String WINDOWS_2000 = "Windows 2000";
+       public final static String WINDOWS_NT   = "Windows NT";
+       public final static String WINDOWS_XP   = "Windows XP";
+       public final static String WINDOWS_95   = "Windows 95";
+       public final static String WINDOWS_CE   = "Windows CE";
+       public final static String LINUX        = "Linux";
+       public final static String SOLARIS      = "Solaris";
+       public final static String AIX          = "AIX";
+       public final static String FREEBSD      = "FreeBSD";
+       public final static String MAC_OS       = "Mac OS";
+       public final static String MAC_OS_X     = "Mac OS X";
+       public final static String POWERPC      = "PowerPC";
+       public final static String OS_2         = "OS/2";
+       
+       public String getCpuUtilizationStats();
+}

Added: 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/plugins/LinuxCpuSamplerPlugin.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/plugins/LinuxCpuSamplerPlugin.java?rev=416547&view=auto
==============================================================================
--- 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/plugins/LinuxCpuSamplerPlugin.java
 (added)
+++ 
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/sampler/plugins/LinuxCpuSamplerPlugin.java
 Thu Jun 22 19:26:20 2006
@@ -0,0 +1,50 @@
+package org.apache.activemq.tool.sampler.plugins;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.StringTokenizer;
+
+public class LinuxCpuSamplerPlugin implements CpuSamplerPlugin {
+
+       private String vmstat = "vmstat";
+       
+       public String getCpuUtilizationStats() {
+               try {
+                       Process p = Runtime.getRuntime().exec(vmstat);
+                       BufferedReader br = new BufferedReader(new 
InputStreamReader(p.getInputStream()), 1024);
+                       
+                       br.readLine(); // throw away the first line
+                       
+                       String header = br.readLine();
+                       String data   = br.readLine();
+                       
+                       br.close();
+                       
+                       // Convert to CSV of key=value pair
+                       return convertToCSV(header, data);
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       return "";
+               }
+       }
+
+       public String getVmstat() {
+               return vmstat;
+       }
+
+       public void setVmstat(String vmstat) {
+               this.vmstat = vmstat;
+       }
+       
+       protected String convertToCSV(String header, String data) {
+               StringTokenizer headerTokens = new StringTokenizer(header, " ");
+               StringTokenizer dataTokens   = new StringTokenizer(data, " ");
+               
+               String csv = "";
+               while (headerTokens.hasMoreTokens()) {
+                       csv += (headerTokens.nextToken() + "=" + 
dataTokens.nextToken() + ";");
+               }
+               
+               return csv;
+       }
+}


Reply via email to