Skip to content

Commit 8f8cd4d

Browse files
Merge pull request #14 from pmouawad/issue_12
Replace Transport Client by Rest Client
2 parents dcc6efb + a04cf10 commit 8f8cd4d

File tree

2 files changed

+45
-57
lines changed

2 files changed

+45
-57
lines changed

pom.xml

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<junit.platform.version>1.0.0</junit.platform.version>
2020
<org.apache.jmeter.version>3.1</org.apache.jmeter.version>
2121
<org.apache.commons>3.4</org.apache.commons>
22-
<org.elasticsearch.client>5.5.2</org.elasticsearch.client>
22+
<org.elasticsearch.client>6.0.0</org.elasticsearch.client>
2323
</properties>
2424
<dependencies>
2525
<dependency>
@@ -54,12 +54,7 @@
5454
</dependency>
5555
<dependency>
5656
<groupId>org.elasticsearch.client</groupId>
57-
<artifactId>rest</artifactId>
58-
<version>${org.elasticsearch.client}</version>
59-
</dependency>
60-
<dependency>
61-
<groupId>org.elasticsearch.client</groupId>
62-
<artifactId>transport</artifactId>
57+
<artifactId>elasticsearch-rest-high-level-client</artifactId>
6358
<version>${org.elasticsearch.client}</version>
6459
</dependency>
6560
<dependency>
@@ -139,7 +134,7 @@
139134
<plugin>
140135
<groupId>org.apache.maven.plugins</groupId>
141136
<artifactId>maven-shade-plugin</artifactId>
142-
<version>2.4</version>
137+
<version>2.4.1</version>
143138
<executions>
144139
<!-- Run shade goal on package phase -->
145140
<execution>
@@ -148,33 +143,15 @@
148143
<goal>shade</goal>
149144
</goals>
150145
<configuration>
151-
<minimizeJar>true</minimizeJar>
152146
<artifactSet>
153147
<excludes>
154148
<exclude>org.apache.jmeter:*</exclude>
155149
<exclude>commons-codec:*</exclude>
156150
<exclude>commons-logging:*</exclude>
157151
<exclude>org.apache.httpcomponents:*</exclude>
152+
<exclude>net.java.dev.jna:*</exclude>
158153
</excludes>
159154
</artifactSet>
160-
<relocations>
161-
<relocation>
162-
<pattern>org.joda</pattern>
163-
<shadedPattern>net.delirius.dep.org.joda</shadedPattern>
164-
</relocation>
165-
<relocation>
166-
<pattern>org.yaml.snakeyaml</pattern>
167-
<shadedPattern>net.delirius.dep.org.yaml.snakeyaml</shadedPattern>
168-
</relocation>
169-
<relocation>
170-
<pattern>com.fasterxml.jackson</pattern>
171-
<shadedPattern>net.delirius.dep.com.fasterxml.jackson</shadedPattern>
172-
</relocation>
173-
<relocation>
174-
<pattern>org.HdrHistogram</pattern>
175-
<shadedPattern>net.delirius.dep.org.HdrHistogram</shadedPattern>
176-
</relocation>
177-
</relocations>
178155
</configuration>
179156
</execution>
180157
</executions>

src/main/java/net/delirius/jmeter/backendlistener/elasticsearch/ElasticsearchBackend.java

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package net.delirius.jmeter.backendlistener.elasticsearch;
22

3-
import java.net.InetAddress;
3+
import java.io.IOException;
44
import java.text.ParseException;
55
import java.text.SimpleDateFormat;
66
import java.time.LocalDateTime;
@@ -13,20 +13,21 @@
1313

1414
import org.apache.commons.io.IOUtils;
1515
import org.apache.commons.lang.StringUtils;
16+
import org.apache.http.HttpHost;
1617
import org.apache.jmeter.assertions.AssertionResult;
1718
import org.apache.jmeter.config.Arguments;
1819
import org.apache.jmeter.samplers.SampleResult;
1920
import org.apache.jmeter.threads.JMeterContextService;
2021
import org.apache.jmeter.util.JMeterUtils;
2122
import org.apache.jmeter.visualizers.backend.AbstractBackendListenerClient;
2223
import org.apache.jmeter.visualizers.backend.BackendListenerContext;
23-
import org.elasticsearch.action.bulk.BulkRequestBuilder;
24+
import org.elasticsearch.action.bulk.BulkRequest;
2425
import org.elasticsearch.action.bulk.BulkResponse;
25-
import org.elasticsearch.common.settings.Settings;
26-
import org.elasticsearch.common.transport.InetSocketTransportAddress;
26+
import org.elasticsearch.action.index.IndexRequest;
27+
import org.elasticsearch.client.RestClient;
28+
import org.elasticsearch.client.RestHighLevelClient;
2729
import org.elasticsearch.common.unit.TimeValue;
2830
import org.elasticsearch.common.xcontent.XContentType;
29-
import org.elasticsearch.transport.client.PreBuiltTransportClient;
3031
import org.slf4j.Logger;
3132
import org.slf4j.LoggerFactory;
3233

@@ -38,34 +39,34 @@
3839
* @source_2: https://github.com/zumo64/ELK_POC
3940
*/
4041
public class ElasticsearchBackend extends AbstractBackendListenerClient {
41-
private static final String BUILD_NUMBER = "BuildNumber";
42+
private static final String BUILD_NUMBER = "BuildNumber";
43+
private static final String ES_SCHEME = "es.scheme";
4244
private static final String ES_HOST = "es.host";
4345
private static final String ES_PORT = "es.transport.port";
4446
private static final String ES_INDEX = "es.index";
4547
private static final String ES_TIMESTAMP = "es.timestamp";
4648
private static final String ES_STATUS_CODE = "es.status.code";
47-
private static final String ES_CLUSTER = "es.cluster";
4849
private static final String ES_BULK_SIZE = "es.bulk.size";
4950
private static final String ES_TIMEOUT_MS = "es.timout.ms";
5051
private static final long DEFAULT_TIMEOUT_MS = 200L;
5152
private static final Logger logger = LoggerFactory.getLogger(ElasticsearchBackend.class);
5253

53-
private PreBuiltTransportClient client;
54+
private RestHighLevelClient client;
5455
private String index;
5556
private int buildNumber;
5657
private int bulkSize;
57-
private BulkRequestBuilder bulkRequest;
58+
private BulkRequest bulkRequest;
5859
private long timeoutMs;
5960

6061
@Override
6162
public Arguments getDefaultParameters() {
6263
Arguments parameters = new Arguments();
64+
parameters.addArgument(ES_SCHEME, "http");
6365
parameters.addArgument(ES_HOST, null);
64-
parameters.addArgument(ES_PORT, "9300");
66+
parameters.addArgument(ES_PORT, "9200");
6567
parameters.addArgument(ES_INDEX, null);
6668
parameters.addArgument(ES_TIMESTAMP, "yyyy-MM-dd'T'HH:mm:ss.SSSZZ");
6769
parameters.addArgument(ES_STATUS_CODE, "531");
68-
parameters.addArgument(ES_CLUSTER, "elasticsearch");
6970
parameters.addArgument(ES_BULK_SIZE, "100");
7071
parameters.addArgument(ES_TIMEOUT_MS, Long.toString(DEFAULT_TIMEOUT_MS));
7172
return parameters;
@@ -80,13 +81,17 @@ public void setupTest(BackendListenerContext context) throws Exception {
8081
this.buildNumber = (JMeterUtils.getProperty(ElasticsearchBackend.BUILD_NUMBER) != null
8182
&& JMeterUtils.getProperty(ElasticsearchBackend.BUILD_NUMBER).trim() != "")
8283
? Integer.parseInt(JMeterUtils.getProperty(ElasticsearchBackend.BUILD_NUMBER)) : 0;
83-
Settings settings = Settings.builder().put("cluster.name", context.getParameter(ES_CLUSTER)).build();
8484
String host = context.getParameter(ES_HOST);
8585
int port = Integer.parseInt(context.getParameter(ES_PORT));
86-
this.client = new PreBuiltTransportClient(settings);
87-
this.client.addTransportAddress(
88-
new InetSocketTransportAddress(InetAddress.getByName(host), port));
89-
this.bulkRequest = this.client.prepareBulk();
86+
this.client = new RestHighLevelClient(
87+
RestClient.builder(
88+
new HttpHost(host, port, context.getParameter(ES_SCHEME, "http")))
89+
.setRequestConfigCallback(requestConfigBuilder ->
90+
requestConfigBuilder
91+
.setConnectTimeout(5000)
92+
.setSocketTimeout((int)timeoutMs))
93+
.setMaxRetryTimeoutMillis(60000));
94+
this.bulkRequest = new BulkRequest().timeout(TimeValue.timeValueMillis(timeoutMs));
9095
super.setupTest(context);
9196
} catch (Exception e) {
9297
throw new IllegalStateException("Unable to setup connectivity to ES", e);
@@ -96,37 +101,43 @@ public void setupTest(BackendListenerContext context) throws Exception {
96101
@Override
97102
public void handleSampleResults(List<SampleResult> results, BackendListenerContext context) {
98103
for(SampleResult sr : results) {
99-
this.bulkRequest.add(this.client.prepareIndex(this.index, "SampleResult").setSource(this.getElasticData(sr, context), XContentType.JSON));
104+
this.bulkRequest.add(
105+
new IndexRequest(this.index, "SampleResult").source(this.getElasticData(sr, context),
106+
XContentType.JSON));
100107
}
101108

102109
if(this.bulkRequest.numberOfActions() >= this.bulkSize) {
103110
try {
104-
BulkResponse bulkResponse = this.bulkRequest.get(TimeValue.timeValueMillis(timeoutMs));
105-
if (bulkResponse.hasFailures()) {
106-
if(logger.isErrorEnabled()) {
107-
logger.error("Failed to write a result on {}: {}",
108-
index, bulkResponse.buildFailureMessage());
109-
}
110-
} else {
111-
logger.debug("Wrote {} results in {}.",
112-
index);
113-
}
111+
sendRequest(bulkRequest);
114112
} catch (Exception e) {
115113
logger.error("Error sending data to ES, data will be lost", e);
116114
} finally {
117-
this.bulkRequest = this.client.prepareBulk();
115+
this.bulkRequest = new BulkRequest().timeout(TimeValue.timeValueMillis(timeoutMs));
118116
}
119117
}
120118
}
121119

122120
@Override
123121
public void teardownTest(BackendListenerContext context) throws Exception {
124122
if(this.bulkRequest.numberOfActions() > 0) {
125-
this.bulkRequest.get();
123+
sendRequest(bulkRequest);
126124
}
127125
IOUtils.closeQuietly(client);
128126
super.teardownTest(context);
129127
}
128+
129+
private void sendRequest(BulkRequest bulkRequest) throws IOException {
130+
BulkResponse bulkResponse = this.client.bulk(bulkRequest);
131+
if (bulkResponse.hasFailures()) {
132+
if(logger.isErrorEnabled()) {
133+
logger.error("Failed to write a result on {}: {}",
134+
index, bulkResponse.buildFailureMessage());
135+
}
136+
} else {
137+
logger.debug("Wrote {} results in {}.",
138+
index);
139+
}
140+
}
130141

131142
public Map<String, Object> getElasticData(SampleResult sr, BackendListenerContext context) {
132143
HashMap<String, Object> jsonObject = new HashMap<>();
@@ -172,7 +183,7 @@ public Map<String, Object> getElasticData(SampleResult sr, BackendListenerContex
172183
//all assertions
173184
AssertionResult[] assertionResults = sr.getAssertionResults();
174185
if(assertionResults != null) {
175-
HashMap<String, Object> [] assertionArray = new HashMap[assertionResults.length];
186+
Map<String, Object>[] assertionArray = new HashMap[assertionResults.length];
176187
Integer i = 0;
177188
for(AssertionResult assertionResult : assertionResults) {
178189
HashMap<String, Object> assertionMap = new HashMap<>();

0 commit comments

Comments
 (0)