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/25 22:01:03 UTC
svn commit: r1780273 - in
/jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb:
HttpMetricsSender.java InfluxdbBackendListenerClient.java
InfluxdbMetricsSender.java
Author: pmouawad
Date: Wed Jan 25 22:01:03 2017
New Revision: 1780273
URL: http://svn.apache.org/viewvc?rev=1780273&view=rev
Log:
Bug 60590 BackendListener : Add Influxdb BackendListenerClient implementation to JMeter.
Fix corruption of ArrayList due to Multi-thread access
Fix timestamp which was computed too late
Bugzilla Id: 60590
Modified:
jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb/HttpMetricsSender.java
jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb/InfluxdbBackendListenerClient.java
jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb/InfluxdbMetricsSender.java
Modified: jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb/HttpMetricsSender.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb/HttpMetricsSender.java?rev=1780273&r1=1780272&r2=1780273&view=diff
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb/HttpMetricsSender.java (original)
+++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb/HttpMetricsSender.java Wed Jan 25 22:01:03 2017
@@ -56,6 +56,8 @@ import org.apache.log.Logger;
class HttpMetricsSender extends AbstractInfluxdbMetricsSender {
private static final Logger LOG = LoggingManager.getLoggerForClass();
+ private final Object lock = new Object();
+
private List<MetricTuple> metrics = new ArrayList<>();
private HttpPost httpRequest;
@@ -130,7 +132,9 @@ class HttpMetricsSender extends Abstract
@Override
public void addMetric(String mesurement, String tag, String field) {
- metrics.add(new MetricTuple(mesurement, tag, field));
+ synchronized (lock) {
+ metrics.add(new MetricTuple(mesurement, tag, field, System.currentTimeMillis()));
+ }
}
/**
@@ -139,22 +143,26 @@ class HttpMetricsSender extends Abstract
*/
@Override
public void writeAndSendMetrics() {
- if (!metrics.isEmpty()) {
+ List<MetricTuple> tempMetrics = null;
+ synchronized (lock) {
+ tempMetrics = metrics;
+ metrics = new ArrayList<>();
+ }
+ final List<MetricTuple> copyMetrics = tempMetrics;
+ if (!copyMetrics.isEmpty()) {
try {
-
if(httpRequest == null) {
httpRequest = createRequest(url);
}
- StringBuilder sb = new StringBuilder(metrics.size()*35);
- String timestamp = System.currentTimeMillis() + "000000";
- for (MetricTuple metric : metrics) {
+ StringBuilder sb = new StringBuilder(copyMetrics.size()*35);
+ for (MetricTuple metric : copyMetrics) {
// Add TimeStamp in nanosecond from epoch ( default in InfluxDB )
sb.append(metric.measurement)
.append(metric.tag)
.append(" ") //$NON-NLS-1$
.append(metric.field)
.append(" ")
- .append(timestamp)
+ .append(metric.timestamp+"000000")
.append("\n"); //$NON-NLS-1$
}
@@ -174,7 +182,7 @@ class HttpMetricsSender extends Abstract
switch (code) {
case 204:
if(LOG.isDebugEnabled()) {
- LOG.debug("Success, number of metrics written : " + metrics.size());
+ LOG.debug("Success, number of metrics written : " + copyMetrics.size());
}
break;
default:
@@ -199,7 +207,7 @@ class HttpMetricsSender extends Abstract
}
// We drop metrics in all cases
- metrics.clear();
+ copyMetrics.clear();
}
/**
@@ -209,6 +217,7 @@ class HttpMetricsSender extends Abstract
@Override
public void destroy() {
// Give some time to send last metrics before shutting down
+ LOG.info("Destroying ");
try {
lastRequest.get(5, TimeUnit.SECONDS);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
Modified: jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb/InfluxdbBackendListenerClient.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb/InfluxdbBackendListenerClient.java?rev=1780273&r1=1780272&r2=1780273&view=diff
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb/InfluxdbBackendListenerClient.java (original)
+++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb/InfluxdbBackendListenerClient.java Wed Jan 25 22:01:03 2017
@@ -347,6 +347,7 @@ public class InfluxdbBackendListenerClie
// Send last set of data before ending
+ LOGGER.info("Sending last metrics");
sendMetrics();
influxdbMetricsManager.destroy();
Modified: jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb/InfluxdbMetricsSender.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb/InfluxdbMetricsSender.java?rev=1780273&r1=1780272&r2=1780273&view=diff
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb/InfluxdbMetricsSender.java (original)
+++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/backend/influxdb/InfluxdbMetricsSender.java Wed Jan 25 22:01:03 2017
@@ -33,11 +33,12 @@ interface InfluxdbMetricsSender {
String measurement;
String tag;
String field;
-
- MetricTuple(String measurement, String tag, String field) {
+ long timestamp;
+ MetricTuple(String measurement, String tag, String field, long timestamp) {
this.measurement = measurement;
this.tag = tag;
this.field = field;
+ this.timestamp = timestamp;
}
}