This is an automated email from the ASF dual-hosted git repository. pmouawad pushed a commit to branch bug_64553 in repository https://gitbox.apache.org/repos/asf/jmeter.git
commit 847a9cecd1f426106b9b5c6d8d13601ca2a202ad Author: pmouawad <p.moua...@ubik-ingenierie.com> AuthorDate: Thu Aug 6 08:28:13 2020 +0200 64553 When using Transaction Controller, send Bytes and Received Bytes are displayed as 0 in the influxdb(BackendListener) --- .../jmeter/visualizers/backend/SamplerMetric.java | 37 ++++++++++++++-------- .../graphite/GraphiteBackendListenerClient.java | 4 +-- .../backend/influxdb/HttpMetricsSender.java | 5 +-- .../influxdb/InfluxdbBackendListenerClient.java | 18 ++++++----- .../backend/SamplerMetricFixedModeTest.java | 10 +++--- .../backend/SamplerMetricTimedModeTest.java | 4 +-- xdocs/changes.xml | 1 + 7 files changed, 46 insertions(+), 33 deletions(-) diff --git a/src/components/src/main/java/org/apache/jmeter/visualizers/backend/SamplerMetric.java b/src/components/src/main/java/org/apache/jmeter/visualizers/backend/SamplerMetric.java index b41d41e..e6ad2f0 100644 --- a/src/components/src/main/java/org/apache/jmeter/visualizers/backend/SamplerMetric.java +++ b/src/components/src/main/java/org/apache/jmeter/visualizers/backend/SamplerMetric.java @@ -99,8 +99,9 @@ public class SamplerMetric { /** * Add a {@link SampleResult} to be used in the statistics * @param result {@link SampleResult} to be used + * @param isCumulated is the overall Sampler Metric */ - public synchronized void add(SampleResult result) { + public synchronized void add(SampleResult result, boolean isCumulated) { if(result.isSuccessful()) { successes+=result.getSampleCount()-result.getErrorCount(); } else { @@ -118,32 +119,40 @@ public class SamplerMetric { }else { koResponsesStats.addValue(time); } - addHits(result); - addNetworkData(result); + addHits(result, isCumulated); + addNetworkData(result, isCumulated); } /** * Increment traffic metrics. A Parent sampler cumulates its children metrics. * @param result SampleResult + * @param isCumulated related to the overall sampler metric */ - private void addNetworkData(SampleResult result) { - if (!TransactionController.isFromTransactionController(result)) { - sentBytes += result.getSentBytes(); - receivedBytes += result.getBytesAsLong(); + private void addNetworkData(SampleResult result, boolean isCumulated) { + if (isCumulated && TransactionController.isFromTransactionController(result) + && result.getSubResults().length == 0) { // Transaction controller without generate parent sampler + return; } + sentBytes += result.getSentBytes(); + receivedBytes += result.getBytesAsLong(); } /** - * Compute hits from res - * @param res {@link SampleResult} + * Compute hits from result + * @param result {@link SampleResult} + * @param isCumulated related to the overall sampler metric */ - private void addHits(SampleResult res) { - SampleResult[] subResults = res.getSubResults(); - if (!TransactionController.isFromTransactionController(res)) { - hits += 1; + private void addHits(SampleResult result, boolean isCumulated) { + if (isCumulated && TransactionController.isFromTransactionController(result) + && result.getSubResults().length == 0) { // Transaction controller without generate parent sampler + return; + } + SampleResult[] subResults = result.getSubResults(); + if (!(TransactionController.isFromTransactionController(result) && subResults.length > 0)) { + hits += result.getSampleCount(); } for (SampleResult subResult : subResults) { - addHits(subResult); + addHits(subResult, isCumulated); } } diff --git a/src/components/src/main/java/org/apache/jmeter/visualizers/backend/graphite/GraphiteBackendListenerClient.java b/src/components/src/main/java/org/apache/jmeter/visualizers/backend/graphite/GraphiteBackendListenerClient.java index 50abbe0..f6bb597 100644 --- a/src/components/src/main/java/org/apache/jmeter/visualizers/backend/graphite/GraphiteBackendListenerClient.java +++ b/src/components/src/main/java/org/apache/jmeter/visualizers/backend/graphite/GraphiteBackendListenerClient.java @@ -285,10 +285,10 @@ public class GraphiteBackendListenerClient extends AbstractBackendListenerClient } if (samplersToFilterMatch) { SamplerMetric samplerMetric = getSamplerMetric(sampleResult.getSampleLabel()); - samplerMetric.add(sampleResult); + samplerMetric.add(sampleResult, false); } } - getSamplerMetric(CUMULATED_METRICS).add(sampleResult); + getSamplerMetric(CUMULATED_METRICS).add(sampleResult, true); } } } diff --git a/src/components/src/main/java/org/apache/jmeter/visualizers/backend/influxdb/HttpMetricsSender.java b/src/components/src/main/java/org/apache/jmeter/visualizers/backend/influxdb/HttpMetricsSender.java index 0b6202e..a40c114 100644 --- a/src/components/src/main/java/org/apache/jmeter/visualizers/backend/influxdb/HttpMetricsSender.java +++ b/src/components/src/main/java/org/apache/jmeter/visualizers/backend/influxdb/HttpMetricsSender.java @@ -185,8 +185,9 @@ class HttpMetricsSender extends AbstractInfluxdbMetricsSender { .append("000000") .append("\n"); //$NON-NLS-1$ } - - httpRequest.setEntity(new StringEntity(sb.toString(), StandardCharsets.UTF_8)); + String data = sb.toString(); + log.debug("Sending to influxdb:{}", data); + httpRequest.setEntity(new StringEntity(data, StandardCharsets.UTF_8)); lastRequest = httpClient.execute(httpRequest, new FutureCallback<HttpResponse>() { @Override public void completed(final HttpResponse response) { diff --git a/src/components/src/main/java/org/apache/jmeter/visualizers/backend/influxdb/InfluxdbBackendListenerClient.java b/src/components/src/main/java/org/apache/jmeter/visualizers/backend/influxdb/InfluxdbBackendListenerClient.java index 02c6dc1..3651c48 100644 --- a/src/components/src/main/java/org/apache/jmeter/visualizers/backend/influxdb/InfluxdbBackendListenerClient.java +++ b/src/components/src/main/java/org/apache/jmeter/visualizers/backend/influxdb/InfluxdbBackendListenerClient.java @@ -177,15 +177,15 @@ public class InfluxdbBackendListenerClient extends AbstractBackendListenerClient // ALL addMetric(transaction, metric.getTotal(), metric.getSentBytes(), metric.getReceivedBytes(), TAG_ALL, metric.getAllMean(), metric.getAllMinTime(), - metric.getAllMaxTime(), allPercentiles.values(), metric::getAllPercentile); + metric.getAllMaxTime(), metric.getHits(), allPercentiles.values(), metric::getAllPercentile); // OK - addMetric(transaction, metric.getSuccesses(), null, null, + addMetric(transaction, metric.getSuccesses(), metric.getSentBytes(), metric.getReceivedBytes(), TAG_OK, metric.getOkMean(), metric.getOkMinTime(), - metric.getOkMaxTime(), okPercentiles.values(), metric::getOkPercentile); + metric.getOkMaxTime(), metric.getHits(), okPercentiles.values(), metric::getOkPercentile); // KO - addMetric(transaction, metric.getFailures(), null, null, + addMetric(transaction, metric.getFailures(), metric.getSentBytes(), metric.getReceivedBytes(), TAG_KO, metric.getKoMean(), metric.getKoMinTime(), - metric.getKoMaxTime(), koPercentiles.values(), metric::getKoPercentile); + metric.getKoMaxTime(), metric.getHits(), koPercentiles.values(), metric::getKoPercentile); metric.getErrors().forEach((err, count) -> addErrorMetric(transaction, err, count)); } @@ -209,14 +209,15 @@ public class InfluxdbBackendListenerClient extends AbstractBackendListenerClient private void addMetric(String transaction, int count, Long sentBytes, Long receivedBytes, String statut, double mean, double minTime, double maxTime, + int hits, Collection<Float> pcts, PercentileProvider percentileProvider) { if (count <= 0) { return; } StringBuilder tag = new StringBuilder(95); tag.append(TAG_APPLICATION).append(applicationName); - tag.append(TAG_STATUS).append(statut); tag.append(TAG_TRANSACTION).append(transaction); + tag.append(TAG_STATUS).append(statut); tag.append(userTag); StringBuilder field = new StringBuilder(80); @@ -230,6 +231,7 @@ public class InfluxdbBackendListenerClient extends AbstractBackendListenerClient if (!Double.isNaN(maxTime)) { field.append(',').append(METRIC_MAX).append(maxTime); } + field.append(',').append(METRIC_HIT).append(hits); if (sentBytes != null) { field.append(',').append(METRIC_SENT_BYTES).append(sentBytes); } @@ -298,10 +300,10 @@ public class InfluxdbBackendListenerClient extends AbstractBackendListenerClient Matcher matcher = samplersToFilter.matcher(sampleResult.getSampleLabel()); if (!summaryOnly && (matcher.find())) { SamplerMetric samplerMetric = getSamplerMetricInfluxdb(sampleResult.getSampleLabel()); - samplerMetric.add(sampleResult); + samplerMetric.add(sampleResult, false); } SamplerMetric cumulatedMetrics = getSamplerMetricInfluxdb(CUMULATED_METRICS); - cumulatedMetrics.add(sampleResult); + cumulatedMetrics.add(sampleResult, true); } } } diff --git a/src/components/src/test/java/org/apache/jmeter/visualizers/backend/SamplerMetricFixedModeTest.java b/src/components/src/test/java/org/apache/jmeter/visualizers/backend/SamplerMetricFixedModeTest.java index 6f479f3..0c25028 100644 --- a/src/components/src/test/java/org/apache/jmeter/visualizers/backend/SamplerMetricFixedModeTest.java +++ b/src/components/src/test/java/org/apache/jmeter/visualizers/backend/SamplerMetricFixedModeTest.java @@ -36,7 +36,7 @@ public class SamplerMetricFixedModeTest { @Test public void checkResetOkAndAllStats() throws Exception { SamplerMetric metric = new SamplerMetric(); - metric.add(createSampleResult(true)); + metric.add(createSampleResult(true), false); assertEquals("Before reset ok.max", DEFAULT_ELAPSED_TIME, metric.getOkMaxTime(), 0.001); assertEquals("Before reset all.max", DEFAULT_ELAPSED_TIME, metric.getAllMaxTime(), 0.001); assertEquals("Before reset failure", 1, metric.getHits(), 0.0); @@ -56,7 +56,7 @@ public class SamplerMetricFixedModeTest { @Test public void checkResetKoAndAllStats() throws Exception { SamplerMetric metric = new SamplerMetric(); - metric.add(createSampleResult(false)); + metric.add(createSampleResult(false), false); assertEquals("Before reset ko.max", DEFAULT_ELAPSED_TIME, metric.getKoMaxTime(), 0.001); assertEquals("Before reset all.max", DEFAULT_ELAPSED_TIME, metric.getAllMaxTime(), 0.001); assertEquals("Before reset failure", 1, metric.getFailures(), 0.0); @@ -76,9 +76,9 @@ public class SamplerMetricFixedModeTest { @Test public void checkErrorsDetailStat() { SamplerMetric metric = new SamplerMetric(); - metric.add(createSampleResult("400", "bad request")); - metric.add(createSampleResult("400", "Bad Request ")); - metric.add(createSampleResult("500", "Internal Server Error")); + metric.add(createSampleResult("400", "bad request"), false); + metric.add(createSampleResult("400", "Bad Request "), false); + metric.add(createSampleResult("500", "Internal Server Error"), false); ErrorMetric error = new ErrorMetric(createSampleResult("400", "Bad request")); assertEquals("Count for '400 - bad request' error ", 2, metric.getErrors().get(error), 0.0); error = new ErrorMetric(createSampleResult("500", "Internal Server Error")); diff --git a/src/components/src/test/java/org/apache/jmeter/visualizers/backend/SamplerMetricTimedModeTest.java b/src/components/src/test/java/org/apache/jmeter/visualizers/backend/SamplerMetricTimedModeTest.java index 82ca45d..ac4573f 100644 --- a/src/components/src/test/java/org/apache/jmeter/visualizers/backend/SamplerMetricTimedModeTest.java +++ b/src/components/src/test/java/org/apache/jmeter/visualizers/backend/SamplerMetricTimedModeTest.java @@ -38,7 +38,7 @@ public class SamplerMetricTimedModeTest { SamplerMetric metric = new SamplerMetric(); - metric.add(createSampleResult(true)); + metric.add(createSampleResult(true), false); assertEquals("Before reset ok.max", DEFAULT_ELAPSED_TIME, metric.getOkMaxTime(), 0.001); assertEquals("Before reset all.max", DEFAULT_ELAPSED_TIME, metric.getAllMaxTime(), 0.001); assertEquals("Before reset failure", 1, metric.getHits(), 0.0); @@ -58,7 +58,7 @@ public class SamplerMetricTimedModeTest { public void checkResetKoAndAllStats() throws Exception { SamplerMetric metric = new SamplerMetric(); - metric.add(createSampleResult(false)); + metric.add(createSampleResult(false), false); assertEquals("Before reset ko.max", DEFAULT_ELAPSED_TIME, metric.getKoMaxTime(), 0.001); assertEquals("Before reset all.max", DEFAULT_ELAPSED_TIME, metric.getAllMaxTime(), 0.001); assertEquals("Before reset failure", 1, metric.getFailures(), 0.0); diff --git a/xdocs/changes.xml b/xdocs/changes.xml index 6d13466..d037c26 100644 --- a/xdocs/changes.xml +++ b/xdocs/changes.xml @@ -166,6 +166,7 @@ Summary <ul> <li><bug>64547</bug>Report/Dashboard: Ensure graphs Response codes per second is not broken by empty response code in SampleResult. Contributed by Ubik Load Pack (https://ubikloadpack.com)</li> <li><bug>64617</bug>HTML report: In graph Response Time Percentiles Over Time 90,95,99th percentile correspond in reality to 0.90, 0.95 and 0.99 percentiles</li> + <li>64553<bug>When using Transaction Controller, send Bytes and Received Bytes are displayed as 0 in the influxdb(BackendListener)</bug></li> </ul> <h3>Documentation</h3>