You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2017/01/15 21:56:37 UTC

svn commit: r1778949 - in /jmeter/trunk: bin/ src/components/org/apache/jmeter/visualizers/backend/ xdocs/ xdocs/usermanual/

Author: pmouawad
Date: Sun Jan 15 21:56:37 2017
New Revision: 1778949

URL: http://svn.apache.org/viewvc?rev=1778949&view=rev
Log:
Bug 60591 - BackendListener : Add a time boxed sampling 
Based on PR 237  from by Logan Mauzaize (logan.mauzaize at gmail.com) and
Maxime Chassagneux (maxime.chassagneux at gmail.com).

Changes in PR:
- Add documentation in properties_reference.xml
- Make some fields static

This closes #237
Bugzilla Id: 60591

Added:
    jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/WindowMode.java   (with props)
Modified:
    jmeter/trunk/bin/jmeter.properties
    jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/SamplerMetric.java
    jmeter/trunk/xdocs/changes.xml
    jmeter/trunk/xdocs/usermanual/properties_reference.xml

Modified: jmeter/trunk/bin/jmeter.properties
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/jmeter.properties?rev=1778949&r1=1778948&r2=1778949&view=diff
==============================================================================
--- jmeter/trunk/bin/jmeter.properties (original)
+++ jmeter/trunk/bin/jmeter.properties Sun Jan 15 21:56:37 2017
@@ -917,6 +917,8 @@ summariser.name=summary
 # BackendListener - configuration
 #---------------------------------------------------------------------------
 #
+# Backend metrics window mode (fixed=fixed-size window, timed=time boxed) 
+#backend_metrics_window_mode=fixed
 # Backend metrics sliding window size for Percentiles, Min, Max
 #backend_metrics_window=100
 

Modified: jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/SamplerMetric.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/SamplerMetric.java?rev=1778949&r1=1778948&r2=1778949&view=diff
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/SamplerMetric.java (original)
+++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/SamplerMetric.java Sun Jan 15 21:56:37 2017
@@ -18,6 +18,11 @@
 
 package org.apache.jmeter.visualizers.backend;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
 import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
 import org.apache.jmeter.control.TransactionController;
 import org.apache.jmeter.samplers.SampleResult;
@@ -28,24 +33,57 @@ import org.apache.jmeter.util.JMeterUtil
  * @since 2.13
  */
 public class SamplerMetric {
-    private static final int SLIDING_WINDOW_SIZE = JMeterUtils.getPropDefault("backend_metrics_window", 100); //$NON-NLS-1$
-    
-    // Response times for OK samples
-    // Limit to sliding window of SLIDING_WINDOW_SIZE values 
-    private DescriptiveStatistics okResponsesStats = new DescriptiveStatistics(SLIDING_WINDOW_SIZE);
-    // Response times for KO samples
-    // Limit to sliding window of SLIDING_WINDOW_SIZE values 
-    private DescriptiveStatistics koResponsesStats = new DescriptiveStatistics(SLIDING_WINDOW_SIZE);
-    // Response times for All samples
-    // Limit to sliding window of SLIDING_WINDOW_SIZE values 
-    private DescriptiveStatistics allResponsesStats = new DescriptiveStatistics(SLIDING_WINDOW_SIZE);
+    private static final int SLIDING_WINDOW_SIZE = JMeterUtils.getPropDefault("backend_metrics_window", 100);
+
+    private static final WindowMode WINDOW_MODE = WindowMode.get();
+
+    /**
+     * Response times for OK samples
+     */
+    private DescriptiveStatistics okResponsesStats = new DescriptiveStatistics();
+    /**
+     * Response times for KO samples
+     */
+    private DescriptiveStatistics koResponsesStats = new DescriptiveStatistics();
+    /**
+     * Response times for All samples
+     */
+    private DescriptiveStatistics allResponsesStats = new DescriptiveStatistics();
+    /**
+     *  OK, KO, ALL stats if WindowMode is FIXED
+     */
+    private List<DescriptiveStatistics> windowedStats = initWindowedStats();
+    /**
+     * Timeboxed percentiles don't makes sense
+     */
+    private DescriptiveStatistics pctResponseStats = new DescriptiveStatistics();
     private int successes;
     private int failures;
     private int hits;
+    
     /**
      * 
      */
     public SamplerMetric() {
+    	List<DescriptiveStatistics> stats = new ArrayList<>(4);
+    	stats.add(pctResponseStats);
+    	stats.addAll(windowedStats);
+
+    	// Limit to sliding window of SLIDING_WINDOW_SIZE values
+		for (DescriptiveStatistics stat : stats) {
+    		stat.setWindowSize(SLIDING_WINDOW_SIZE);
+    	}
+    }
+
+    /**
+     * @return List of {@link DescriptiveStatistics}
+     */
+    private List<DescriptiveStatistics> initWindowedStats() {
+        if (WINDOW_MODE == WindowMode.FIXED) {
+            return Arrays.asList(okResponsesStats, koResponsesStats, allResponsesStats);
+        } else {
+            return Collections.emptyList();
+        }
     }
 
     /**
@@ -60,6 +98,7 @@ public class SamplerMetric {
         }
         long time = result.getTime();
         allResponsesStats.addValue(time);
+        pctResponseStats.addValue(time);
         if(result.isSuccessful()) {
             // Should we also compute KO , all response time ?
             // only take successful requests for time computing
@@ -88,8 +127,19 @@ public class SamplerMetric {
      * Reset metric except for percentile related data
      */
     public synchronized void resetForTimeInterval() {
-        // We don't clear responsesStats nor usersStats as it will slide as per my understanding of 
-        // http://commons.apache.org/proper/commons-math/userguide/stat.html
+    	switch (WINDOW_MODE) {
+    		case FIXED:
+                // We don't clear responsesStats nor usersStats as it will slide as per my understanding of 
+                // http://commons.apache.org/proper/commons-math/userguide/stat.html
+    			break;
+    		case TIMED:
+    			for (DescriptiveStatistics stat : windowedStats) {
+    				stat.clear();
+    			}
+    			break;
+			default: 
+			    // This cannot happen
+    	}
         successes = 0;
         failures = 0;
         hits = 0;
@@ -242,7 +292,7 @@ public class SamplerMetric {
      *         values.
      */
     public double getAllPercentile(double percentile) {
-        return allResponsesStats.getPercentile(percentile);
+        return pctResponseStats.getPercentile(percentile);
     }
 
     /**

Added: jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/WindowMode.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/WindowMode.java?rev=1778949&view=auto
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/WindowMode.java (added)
+++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/WindowMode.java Sun Jan 15 21:56:37 2017
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.jmeter.visualizers.backend;
+
+import org.apache.jmeter.util.JMeterUtils;
+
+/**
+ * Metrics are sent into boxes which can be {@link #FIXED a fixed-size sliding window} or {@link #TIMED time boxed}.
+ * @since 3.2
+ */
+public enum WindowMode {
+	/** Fixed-size sliding window. **/
+	FIXED,
+	/** Time boxed. **/
+	TIMED;
+
+	/**
+	 * Gets defined JMeter mode.
+	 */
+	public static WindowMode get() {
+		String name = JMeterUtils.getPropDefault("backend_metrics_window_mode", FIXED.name());
+		return WindowMode.valueOf(name.toUpperCase());
+	}
+}

Propchange: jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/WindowMode.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1778949&r1=1778948&r2=1778949&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml [utf-8] (original)
+++ jmeter/trunk/xdocs/changes.xml [utf-8] Sun Jan 15 21:56:37 2017
@@ -126,6 +126,7 @@ JMeter now requires Java 8. Ensure you u
     <li><bug>60542</bug>View Results Tree : Allow Upper Panel to be collapsed. Contributed by Ubik Load Pack (support at ubikloadpack.com)</li>
     <li><bug>52962</bug>Allow sorting by columns for View Results in Table, Summary Report, Aggregate Report and Aggregate Graph. Based on a <pr>245</pr> by Logan Mauzaize (logan.mauzaize at gmail.com) and Maxime Chassagneux (maxime.chassagneux at gmail.com).</li>
     <li><bug>60590</bug>BackendListener : Add Influxdb BackendListenerClient implementation to JMeter. Partly based on <pr>246</pr> by Logan Mauzaize (logan.mauzaize at gmail.com) and Maxime Chassagneux (maxime.chassagneux at gmail.com).</li>
+    <li><bug>60591</bug>BackendListener : Add a time boxed sampling. Based on a <pr>237</pr> by Logan Mauzaize (logan.mauzaize at gmail.com) and Maxime Chassagneux (maxime.chassagneux at gmail.com).</li>
 </ul>
 
 <h3>Timers, Assertions, Config, Pre- &amp; Post-Processors</h3>

Modified: jmeter/trunk/xdocs/usermanual/properties_reference.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/usermanual/properties_reference.xml?rev=1778949&r1=1778948&r2=1778949&view=diff
==============================================================================
--- jmeter/trunk/xdocs/usermanual/properties_reference.xml (original)
+++ jmeter/trunk/xdocs/usermanual/properties_reference.xml Sun Jan 15 21:56:37 2017
@@ -1129,6 +1129,15 @@ log_level.org.apache.http.client=DEBUG
     and <code>Max</code>.<br/>
     Defaults to: <code>100</code>
 </property>
+<property name="backend_metrics_window">
+    Backend metrics window mode.
+    Possible values:
+    <ul>
+        <li><code>fixed</code> : fixed-size window</li>
+        <li><code>timed</code> : time boxed</li>
+    </ul>
+    Defaults to: <code>fixed</code>
+</property>
 </properties>
 </section>
 <section name="&sect-num;.32 BeanShell configuration" anchor="beanshell">