jmeter-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From pmoua...@apache.org
Subject svn commit: r1664054 - in /jmeter/trunk: src/components/org/apache/jmeter/visualizers/backend/SamplerMetric.java src/components/org/apache/jmeter/visualizers/backend/graphite/GraphiteBackendListenerClient.java xdocs/usermanual/realtime-results.xml
Date Wed, 04 Mar 2015 15:41:54 GMT
Author: pmouawad
Date: Wed Mar  4 15:41:53 2015
New Revision: 1664054

URL: http://svn.apache.org/r1664054
Log:
Bug 57246 - BackendListener : Create a Graphite implementation
Add metrics for ok, ko, all responses.
Rename metrics for shorter names

Bugzilla Id: 57246

Modified:
    jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/SamplerMetric.java
    jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/graphite/GraphiteBackendListenerClient.java
    jmeter/trunk/xdocs/usermanual/realtime-results.xml

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=1664054&r1=1664053&r2=1664054&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 Wed
Mar  4 15:41:53 2015
@@ -29,8 +29,15 @@ import org.apache.jmeter.util.JMeterUtil
 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 responsesStats = new DescriptiveStatistics(SLIDING_WINDOW_SIZE);
+    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 int successes;
     private int failures;
     /**
@@ -50,10 +57,13 @@ public class SamplerMetric {
             failures+=result.getErrorCount();
         }
         long time = result.getTime();
+        allResponsesStats.addValue(time);
         if(result.isSuccessful()) {
             // Should we also compute KO , all response time ?
             // only take successful requests for time computing
-            responsesStats.addValue(time);
+            okResponsesStats.addValue(time);
+        }else {
+            koResponsesStats.addValue(time);
         }
     }
     
@@ -68,12 +78,59 @@ public class SamplerMetric {
     }
 
     /**
+     * Get the number of total requests for the current time slot
+     * 
+     * @return number of total requests
+     */
+    public int getTotal() {
+        return successes+failures;
+    }
+    
+    /**
+     * Get the number of successful requests for the current time slot
+     * 
+     * @return number of successful requests
+     */
+    public int getSuccesses() {
+        return successes;
+    }
+
+    /**
+     * Get the number of failed requests for the current time slot
+     * 
+     * @return number of failed requests
+     */
+    public int getFailures() {
+        return failures;
+    }
+
+    /**
+     * Get the maximal elapsed time for requests within sliding window
+     * 
+     * @return the maximal elapsed time, or <code>0</code> if no requests have
+     *         been added yet
+     */
+    public double getOkMaxTime() {
+        return okResponsesStats.getMax();
+    }
+
+    /**
+     * Get the minimal elapsed time for requests within sliding window
+     * 
+     * @return the minTime, or {@link Long#MAX_VALUE} if no requests have been
+     *         added yet
+     */
+    public double getOkMinTime() {
+        return okResponsesStats.getMin();
+    }
+    
+    /**
      * Get the arithmetic mean of the stored values
      * 
      * @return The arithmetic mean of the stored values
      */
-    public double getMean() {
-        return responsesStats.getMean();
+    public double getOkMean() {
+        return okResponsesStats.getMean();
     }
     
     /**
@@ -84,45 +141,59 @@ public class SamplerMetric {
      * @return Returns an estimate for the requested percentile of the stored
      *         values.
      */
-    public double getPercentile(double percentile) {
-        return responsesStats.getPercentile(percentile);
+    public double getOkPercentile(double percentile) {
+        return okResponsesStats.getPercentile(percentile);
     }
 
     /**
-     * Get the number of total requests for the current time slot
+     * Get the maximal elapsed time for requests within sliding window
      * 
-     * @return number of total requests
+     * @return the maximal elapsed time, or <code>0</code> if no requests have
+     *         been added yet
      */
-    public int getTotal() {
-        return successes+failures;
+    public double getKoMaxTime() {
+        return koResponsesStats.getMax();
+    }
+
+    /**
+     * Get the minimal elapsed time for requests within sliding window
+     * 
+     * @return the minTime, or {@link Long#MAX_VALUE} if no requests have been
+     *         added yet
+     */
+    public double getKoMinTime() {
+        return koResponsesStats.getMin();
     }
     
     /**
-     * Get the number of successful requests for the current time slot
+     * Get the arithmetic mean of the stored values
      * 
-     * @return number of successful requests
+     * @return The arithmetic mean of the stored values
      */
-    public int getSuccesses() {
-        return successes;
+    public double getKoMean() {
+        return koResponsesStats.getMean();
     }
-
+    
     /**
-     * Get the number of failed requests for the current time slot
+     * Returns an estimate for the requested percentile of the stored values.
      * 
-     * @return number of failed requests
+     * @param percentile
+     *            the requested percentile (scaled from 0 - 100)
+     * @return Returns an estimate for the requested percentile of the stored
+     *         values.
      */
-    public int getFailures() {
-        return failures;
+    public double getKoPercentile(double percentile) {
+        return koResponsesStats.getPercentile(percentile);
     }
-
+    
     /**
      * Get the maximal elapsed time for requests within sliding window
      * 
      * @return the maximal elapsed time, or <code>0</code> if no requests have
      *         been added yet
      */
-    public double getMaxTime() {
-        return responsesStats.getMax();
+    public double getAllMaxTime() {
+        return allResponsesStats.getMax();
     }
 
     /**
@@ -131,7 +202,28 @@ public class SamplerMetric {
      * @return the minTime, or {@link Long#MAX_VALUE} if no requests have been
      *         added yet
      */
-    public double getMinTime() {
-        return responsesStats.getMin();
+    public double getAllMinTime() {
+        return allResponsesStats.getMin();
+    }
+    
+    /**
+     * Get the arithmetic mean of the stored values
+     * 
+     * @return The arithmetic mean of the stored values
+     */
+    public double getAllMean() {
+        return allResponsesStats.getMean();
+    }
+    
+    /**
+     * Returns an estimate for the requested percentile of the stored values.
+     * 
+     * @param percentile
+     *            the requested percentile (scaled from 0 - 100)
+     * @return Returns an estimate for the requested percentile of the stored
+     *         values.
+     */
+    public double getAllPercentile(double percentile) {
+        return allResponsesStats.getPercentile(percentile);
     }
 }

Modified: jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/graphite/GraphiteBackendListenerClient.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/graphite/GraphiteBackendListenerClient.java?rev=1664054&r1=1664053&r2=1664054&view=diff
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/graphite/GraphiteBackendListenerClient.java
(original)
+++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/graphite/GraphiteBackendListenerClient.java
Wed Mar  4 15:41:53 2015
@@ -45,22 +45,46 @@ import org.apache.log.Logger;
  */
 public class GraphiteBackendListenerClient extends AbstractBackendListenerClient implements
Runnable {
     private static final int DEFAULT_PLAINTEXT_PROTOCOL_PORT = 2003;
-    private static final String CUMULATED_CONTEXT_NAME = "cumulated";
+    private static final String TEST_CONTEXT_NAME = "test";
+    private static final String ALL_CONTEXT_NAME = "all";
 
     private static final Logger LOGGER = LoggingManager.getLoggerForClass();
     private static final String DEFAULT_METRICS_PREFIX = "jmeter."; //$NON-NLS-1$
     private static final String CUMULATED_METRICS = "__cumulated__"; //$NON-NLS-1$
-    private static final String METRIC_MAX_ACTIVE_THREADS = "maxActiveThreads"; //$NON-NLS-1$
-    private static final String METRIC_MIN_ACTIVE_THREADS = "minActiveThreads"; //$NON-NLS-1$
-    private static final String METRIC_MEAN_ACTIVE_THREADS = "meanActiveThreads"; //$NON-NLS-1$
-    private static final String METRIC_STARTED_THREADS = "startedThreads"; //$NON-NLS-1$
-    private static final String METRIC_STOPPED_THREADS = "stoppedThreads"; //$NON-NLS-1$
-    private static final String METRIC_FAILED_REQUESTS = "failure"; //$NON-NLS-1$
-    private static final String METRIC_SUCCESSFUL_REQUESTS = "success"; //$NON-NLS-1$
-    private static final String METRIC_TOTAL_REQUESTS = "total"; //$NON-NLS-1$
+    // User Metrics
+    private static final String METRIC_MAX_ACTIVE_THREADS = "maxAT"; //$NON-NLS-1$
+    private static final String METRIC_MIN_ACTIVE_THREADS = "minAT"; //$NON-NLS-1$
+    private static final String METRIC_MEAN_ACTIVE_THREADS = "meanAT"; //$NON-NLS-1$
+    private static final String METRIC_STARTED_THREADS = "startedT"; //$NON-NLS-1$
+    private static final String METRIC_FINISHED_THREADS = "endedT"; //$NON-NLS-1$
+    
+    // Response time Metrics
+    private static final String METRIC_SEPARATOR = "."; //$NON-NLS-1$
+    private static final String METRIC_OK_PREFIX = "ok"; //$NON-NLS-1$
+    private static final String METRIC_KO_PREFIX = "ko"; //$NON-NLS-1$
+    private static final String METRIC_ALL_PREFIX = "a";
+
+    
+    private static final String METRIC_COUNT = "count"; //$NON-NLS-1$
     private static final String METRIC_MIN_RESPONSE_TIME = "min"; //$NON-NLS-1$
     private static final String METRIC_MAX_RESPONSE_TIME = "max"; //$NON-NLS-1$
-    private static final String METRIC_PERCENTILE_PREFIX = "percentile"; //$NON-NLS-1$
+    private static final String METRIC_PERCENTILE = "pct"; //$NON-NLS-1$
+    
+    private static final String METRIC_OK_COUNT             = METRIC_OK_PREFIX+METRIC_SEPARATOR+METRIC_COUNT;
+    private static final String METRIC_OK_MIN_RESPONSE_TIME = METRIC_OK_PREFIX+METRIC_SEPARATOR+METRIC_MIN_RESPONSE_TIME;
+    private static final String METRIC_OK_MAX_RESPONSE_TIME = METRIC_OK_PREFIX+METRIC_SEPARATOR+METRIC_MAX_RESPONSE_TIME;
+    private static final String METRIC_OK_PERCENTILE_PREFIX = METRIC_OK_PREFIX+METRIC_SEPARATOR+METRIC_PERCENTILE;
+
+    private static final String METRIC_KO_COUNT             = METRIC_KO_PREFIX+METRIC_SEPARATOR+METRIC_COUNT;
+    private static final String METRIC_KO_MIN_RESPONSE_TIME = METRIC_KO_PREFIX+METRIC_SEPARATOR+METRIC_MIN_RESPONSE_TIME;
+    private static final String METRIC_KO_MAX_RESPONSE_TIME = METRIC_KO_PREFIX+METRIC_SEPARATOR+METRIC_MAX_RESPONSE_TIME;
+    private static final String METRIC_KO_PERCENTILE_PREFIX = METRIC_KO_PREFIX+METRIC_SEPARATOR+METRIC_PERCENTILE;
+
+    private static final String METRIC_ALL_COUNT             = METRIC_ALL_PREFIX+METRIC_SEPARATOR+METRIC_COUNT;
+    private static final String METRIC_ALL_MIN_RESPONSE_TIME = METRIC_ALL_PREFIX+METRIC_SEPARATOR+METRIC_MIN_RESPONSE_TIME;
+    private static final String METRIC_ALL_MAX_RESPONSE_TIME = METRIC_ALL_PREFIX+METRIC_SEPARATOR+METRIC_MAX_RESPONSE_TIME;
+    private static final String METRIC_ALL_PERCENTILE_PREFIX = METRIC_ALL_PREFIX+METRIC_SEPARATOR+METRIC_PERCENTILE;
+
     private static final long ONE_SECOND = 1L;
     private static final int MAX_POOL_SIZE = 1;
     private static final String DEFAULT_PERCENTILES = "90;95;99";
@@ -73,7 +97,9 @@ public class GraphiteBackendListenerClie
     private String rootMetricsPrefix;
     private String samplersList = ""; //$NON-NLS-1$
     private Set<String> samplersToFilter;
-    private Map<String, Float> percentiles;
+    private Map<String, Float> okPercentiles;
+    private Map<String, Float> koPercentiles;
+    private Map<String, Float> allPercentiles;
     
 
     private GraphiteMetricsSender graphiteMetricsManager;
@@ -100,7 +126,7 @@ public class GraphiteBackendListenerClie
             for (Map.Entry<String, SamplerMetric> entry : getMetricsPerSampler().entrySet())
{
                 SamplerMetric metric = entry.getValue();
                 if(entry.getKey().equals(CUMULATED_METRICS)) {
-                    addMetrics(timestampInSeconds, CUMULATED_CONTEXT_NAME, metric);
+                    addMetrics(timestampInSeconds, ALL_CONTEXT_NAME, metric);
                 } else {
                     addMetrics(timestampInSeconds, AbstractGraphiteMetricsSender.sanitizeString(entry.getKey()),
metric);                
                 }
@@ -108,11 +134,11 @@ public class GraphiteBackendListenerClie
                 metric.resetForTimeInterval();
             }
         }        
-        graphiteMetricsManager.addMetric(timestampInSeconds, CUMULATED_CONTEXT_NAME, METRIC_MIN_ACTIVE_THREADS,
Integer.toString(getUserMetrics().getMinActiveThreads()));
-        graphiteMetricsManager.addMetric(timestampInSeconds, CUMULATED_CONTEXT_NAME, METRIC_MAX_ACTIVE_THREADS,
Integer.toString(getUserMetrics().getMaxActiveThreads()));
-        graphiteMetricsManager.addMetric(timestampInSeconds, CUMULATED_CONTEXT_NAME, METRIC_MEAN_ACTIVE_THREADS,
Integer.toString(getUserMetrics().getMeanActiveThreads()));
-        graphiteMetricsManager.addMetric(timestampInSeconds, CUMULATED_CONTEXT_NAME, METRIC_STARTED_THREADS,
Integer.toString(getUserMetrics().getStartedThreads()));
-        graphiteMetricsManager.addMetric(timestampInSeconds, CUMULATED_CONTEXT_NAME, METRIC_STOPPED_THREADS,
Integer.toString(getUserMetrics().getFinishedThreads()));
+        graphiteMetricsManager.addMetric(timestampInSeconds, TEST_CONTEXT_NAME, METRIC_MIN_ACTIVE_THREADS,
Integer.toString(getUserMetrics().getMinActiveThreads()));
+        graphiteMetricsManager.addMetric(timestampInSeconds, TEST_CONTEXT_NAME, METRIC_MAX_ACTIVE_THREADS,
Integer.toString(getUserMetrics().getMaxActiveThreads()));
+        graphiteMetricsManager.addMetric(timestampInSeconds, TEST_CONTEXT_NAME, METRIC_MEAN_ACTIVE_THREADS,
Integer.toString(getUserMetrics().getMeanActiveThreads()));
+        graphiteMetricsManager.addMetric(timestampInSeconds, TEST_CONTEXT_NAME, METRIC_STARTED_THREADS,
Integer.toString(getUserMetrics().getStartedThreads()));
+        graphiteMetricsManager.addMetric(timestampInSeconds, TEST_CONTEXT_NAME, METRIC_FINISHED_THREADS,
Integer.toString(getUserMetrics().getFinishedThreads()));
 
         graphiteMetricsManager.writeAndSendMetrics();
     }
@@ -126,17 +152,38 @@ public class GraphiteBackendListenerClie
      * @param metric {@link SamplerMetric}
      */
     private void addMetrics(long timestampInSeconds, String contextName, SamplerMetric metric)
{
-        graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_FAILED_REQUESTS,
Integer.toString(metric.getFailures()));
-        graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_SUCCESSFUL_REQUESTS,
Integer.toString(metric.getSuccesses()));
-        graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_TOTAL_REQUESTS,
Integer.toString(metric.getTotal()));
+        graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_OK_COUNT,
Integer.toString(metric.getSuccesses()));
+        graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_KO_COUNT,
Integer.toString(metric.getFailures()));
+        graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_ALL_COUNT,
Integer.toString(metric.getTotal()));
         // See https://issues.apache.org/bugzilla/show_bug.cgi?id=57350
         if(metric.getTotal() > 0) { 
-            graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_MIN_RESPONSE_TIME,
Double.toString(metric.getMinTime()));
-            graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_MAX_RESPONSE_TIME,
Double.toString(metric.getMaxTime()));
-            for (Map.Entry<String, Float> entry : percentiles.entrySet()) {
-                graphiteMetricsManager.addMetric(timestampInSeconds, contextName, 
-                        entry.getKey(), 
-                        Double.toString(metric.getPercentile(entry.getValue().floatValue())));
           
+            if(metric.getSuccesses()>0) {
+                graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_OK_MIN_RESPONSE_TIME,
Double.toString(metric.getOkMinTime()));
+                graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_OK_MAX_RESPONSE_TIME,
Double.toString(metric.getOkMaxTime()));
+                for (Map.Entry<String, Float> entry : okPercentiles.entrySet()) {
+                    graphiteMetricsManager.addMetric(timestampInSeconds, contextName, 
+                            entry.getKey(), 
+                            Double.toString(metric.getOkPercentile(entry.getValue().floatValue())));
           
+                }
+            } 
+            if(metric.getFailures()>0) {
+                graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_KO_MIN_RESPONSE_TIME,
Double.toString(metric.getKoMinTime()));
+                graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_KO_MAX_RESPONSE_TIME,
Double.toString(metric.getKoMaxTime()));
+                for (Map.Entry<String, Float> entry : koPercentiles.entrySet()) {
+                    graphiteMetricsManager.addMetric(timestampInSeconds, contextName, 
+                            entry.getKey(), 
+                            Double.toString(metric.getKoPercentile(entry.getValue().floatValue())));
           
+                }   
+            }
+            if(metric.getTotal()>0) {
+                graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_ALL_MIN_RESPONSE_TIME,
Double.toString(metric.getAllMinTime()));
+                graphiteMetricsManager.addMetric(timestampInSeconds, contextName, METRIC_ALL_MAX_RESPONSE_TIME,
Double.toString(metric.getAllMaxTime()));
+                for (Map.Entry<String, Float> entry : allPercentiles.entrySet()) {
+                    graphiteMetricsManager.addMetric(timestampInSeconds, contextName, 
+                            entry.getKey(), 
+                            Double.toString(metric.getAllPercentile(entry.getValue().floatValue())));
           
+                }   
+                
             }
         }
     }
@@ -182,15 +229,24 @@ public class GraphiteBackendListenerClie
         rootMetricsPrefix = context.getParameter("rootMetricsPrefix", DEFAULT_METRICS_PREFIX);
         String percentilesAsString = context.getParameter("percentiles", DEFAULT_METRICS_PREFIX);
         String[]  percentilesStringArray = percentilesAsString.split(SEPARATOR);
-        percentiles = new HashMap<String, Float>(percentilesStringArray.length);
+        okPercentiles = new HashMap<String, Float>(percentilesStringArray.length);
+        koPercentiles = new HashMap<String, Float>(percentilesStringArray.length);
+        allPercentiles = new HashMap<String, Float>(percentilesStringArray.length);
         DecimalFormat format = new DecimalFormat("0.##");
         for (int i = 0; i < percentilesStringArray.length; i++) {
             if(!StringUtils.isEmpty(percentilesStringArray[i].trim())) {
                 try {
                     Float percentileValue = Float.parseFloat(percentilesStringArray[i].trim());
-                    percentiles.put(
-                            METRIC_PERCENTILE_PREFIX+AbstractGraphiteMetricsSender.sanitizeString(format.format(percentileValue)),
+                    okPercentiles.put(
+                            METRIC_OK_PERCENTILE_PREFIX+AbstractGraphiteMetricsSender.sanitizeString(format.format(percentileValue)),
+                            percentileValue);
+                    koPercentiles.put(
+                            METRIC_KO_PERCENTILE_PREFIX+AbstractGraphiteMetricsSender.sanitizeString(format.format(percentileValue)),
                             percentileValue);
+                    allPercentiles.put(
+                            METRIC_ALL_PERCENTILE_PREFIX+AbstractGraphiteMetricsSender.sanitizeString(format.format(percentileValue)),
+                            percentileValue);
+
                 } catch(Exception e) {
                     LOGGER.error("Error parsing percentile:'"+percentilesStringArray[i]+"'",
e);
                 }

Modified: jmeter/trunk/xdocs/usermanual/realtime-results.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/usermanual/realtime-results.xml?rev=1664054&r1=1664053&r2=1664054&view=diff
==============================================================================
--- jmeter/trunk/xdocs/usermanual/realtime-results.xml (original)
+++ jmeter/trunk/xdocs/usermanual/realtime-results.xml Wed Mar  4 15:41:53 2015
@@ -38,10 +38,10 @@ This feature provides:
 <li>Live results</li>
 <li>Nice graphs for metrics</li>
 <li>Ability to compare 2 or more load tests</li>
-<li>Having monitoring data as long as JMeter results in the same backend</li>
+<li>Storing monitoring data as long as JMeter results in the same backend</li>
 <li>...</li>
 </ul>
-In this document we will present the configuration setup to be able to graph and historize
the data in 3 different backends:
+In this document we will present the configuration setup to graph and historize the data
in 3 different backends:
 <ul>
 <li>InfluxDB</li>
 <li>CollectD</li>
@@ -59,23 +59,23 @@ In this document we will present the con
                <th>Description</th>
            </tr>
            <tr>
-               <td>&lt;rootMetricsPrefix&gt;.cumulated.minActiveThreads</td>
+               <td>&lt;rootMetricsPrefix&gt;.test.minAT</td>
                <td>Min active threads</td>            
            </tr>
            <tr>
-               <td>&lt;rootMetricsPrefix&gt;.cumulated.maxActiveThreads</td>
+               <td>&lt;rootMetricsPrefix&gt;.test.maxAT</td>
                <td>Max active threads</td>            
            </tr>
            <tr>
-               <td>&lt;rootMetricsPrefix&gt;.cumulated.meanActiveThreads</td>
+               <td>&lt;rootMetricsPrefix&gt;.test.meanAT</td>
                <td>Mean active threads</td>            
            </tr>
            <tr>
-               <td>&lt;rootMetricsPrefix&gt;.cumulated.startedThreads</td>
+               <td>&lt;rootMetricsPrefix&gt;.test.startedT</td>
                <td>Started threads</td>            
            </tr>
            <tr>
-               <td>&lt;rootMetricsPrefix&gt;.cumulated.stoppedThreads</td>
+               <td>&lt;rootMetricsPrefix&gt;.test.endedT</td>
                <td>Finished threads</td>            
            </tr>
     </table>
@@ -88,33 +88,62 @@ In this document we will present the con
                <th>Description</th>
            </tr>
            <tr>
-               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.success</td>
+               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.ok.count</td>
                <td>Number of successful responses for sampler name</td>     
      
            </tr>
            <tr>
-               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.failure</td>
+               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.ok.min</td>
+               <td>Min response time for successful responses of sampler name</td>
+           </tr>
+           <tr>
+               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.ok.max</td>
+               <td>Max response time for successful responses of sampler name</td>
+           </tr>
+           <tr>
+               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.ok.pct&lt;percentileValue&gt;</td>
+               <td>Percentile computed for successful responses of sampler name. You
can input as many percentiles as you want (3 or 4 being a reasonable value).<br/>
+               When percentile contains a comma for example "99.9", dot is sanitized by "_"
leading to 99_9.   
+               By default listener computes percentiles 90%, 95% and 99%</td>     
      
+           </tr>
+           <tr>
+               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.ko.count</td>
                <td>Number of failed responses for sampler name</td>         
  
            </tr>
            <tr>
-               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.total</td>
-               <td>Total number of requests for sampler name</td>           

+               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.ko.min</td>
+               <td>Min response time for failed responses of sampler name</td>
+           </tr>
+           <tr>
+               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.ko.max</td>
+               <td>Max response time for failed responses of sampler name</td>
+           </tr>
+           <tr>
+               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.ko.pct&lt;percentileValue&gt;</td>
+               <td>Percentile computed for failed responses of sampler name. You can
input as many percentiles as you want (3 or 4 being a reasonable value).<br/>
+               When percentile contains a comma for example "99.9", dot is sanitized by "_"
leading to 99_9.   
+               By default listener computes percentiles 90%, 95% and 99%</td>     
      
+           </tr>
+           <tr>
+               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.a.count</td>
+               <td>Number of responses for sampler name</td>            
            </tr>
            <tr>
-               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.min</td>
-               <td>Min response time for sampler name</td>            
+               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.a.min</td>
+               <td>Min response time for responses of sampler name</td>
            </tr>
            <tr>
-               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.max</td>
-               <td>Max response time for sampler name</td>            
+               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.a.max</td>
+               <td>Max response time for responses of sampler name</td>
            </tr>
            <tr>
-               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.percentile&lt;percentileValue&gt;</td>
-               <td>Percentile computed for successful responses of sampler name. You
can input as many percentiles as you want (3 or 4 being a reasonable value).<br/> 
+               <td>&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.a.pct&lt;percentileValue&gt;</td>
+               <td>Percentile computed for responses of sampler name. You can input
as many percentiles as you want (3 or 4 being a reasonable value).<br/>
+               When percentile contains a comma for example "99.9", dot is sanitized by "_"
leading to 99_9.   
                By default listener computes percentiles 90%, 95% and 99%</td>     
      
            </tr>
     </table>
     <p>
-    By default JMeter sends only metrics for all samplers using "__cumulated__" as samplerName.
+    By default JMeter sends only metrics for all samplers using "all" as samplerName.
     </p>
     </subsection>
 </subsection>
@@ -122,7 +151,7 @@ In this document we will present the con
     <p>
     To make JMeter send metrics to backend add a <a href="./component_reference.html#Backend_Listener"
>BackendListener</a> using the GraphiteBackendListenerClient.
     </p>
-    <figure width="1138" height="352" image="backend_listener.png">Graphite configuration</figure>
+    <figure width="902" height="341" image="backend_listener.png">Graphite configuration</figure>
 </subsection>
 
 <subsection name="&sect-num;.2 InfluxDB" anchor="influxdb">
@@ -180,7 +209,7 @@ We will use Grafana in this case.
     Note that grafana has "grafanaDB:true". Also note that here we use root user for simplicity,
it is better to dedicate a special user with less rights.<br/>
     Here is the kind of dashboard that you could obtain:
     </p>
-    <figure width="1912" height="957" image="grafana_dashboard.png">Grafana dashboard</figure>

+    <figure width="1265" height="581" image="grafana_dashboard.png">Grafana dashboard</figure>

     
     </subsection>
 </subsection>



Mime
View raw message