Skip to content

Commit 9e715d2

Browse files
committed
Fixing missing types from bulk requests
1 parent 6035ee1 commit 9e715d2

File tree

1 file changed

+44
-4
lines changed

1 file changed

+44
-4
lines changed

src/main/java/io/github/delirius325/jmeter/backendlistener/elasticsearch/ElasticSearchMetricSender.java

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,13 @@
1010
import org.apache.http.HttpStatus;
1111
import org.apache.http.entity.ContentType;
1212
import org.apache.http.nio.entity.NStringEntity;
13+
import org.apache.http.util.EntityUtils;
1314
import org.elasticsearch.client.Request;
1415
import org.elasticsearch.client.RequestOptions;
1516
import org.elasticsearch.client.Response;
1617
import org.elasticsearch.client.RestClient;
18+
import org.json.simple.JSONObject;
19+
import org.json.simple.parser.JSONParser;
1720
import org.slf4j.Logger;
1821
import org.slf4j.LoggerFactory;
1922

@@ -95,16 +98,52 @@ public void createIndex() throws IOException {
9598
logger.info("Index already exists!");
9699
}
97100
}
101+
102+
public int getElasticSearchVersion() {
103+
Request request = new Request("GET", "/" );
104+
int elasticSearchVersion = -1;
105+
try {
106+
Response response = this.client.performRequest(setAuthorizationHeader(request));
107+
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK && logger.isErrorEnabled()) {
108+
logger.error("Unable to perform request to ElasticSearch engine", this.esIndex);
109+
}else {
110+
String responseBody = EntityUtils.toString(response.getEntity());
111+
JSONParser parser = new JSONParser();
112+
JSONObject elasticSearchConfig = (JSONObject) parser.parse(responseBody);
113+
JSONObject version = (JSONObject)elasticSearchConfig.get("version");
114+
String elasticVersion = version.get("number").toString();
115+
elasticSearchVersion = Integer.parseInt(elasticVersion.split("\\.")[0]);
116+
117+
}
118+
} catch (Exception e) {
119+
if (logger.isErrorEnabled()) {
120+
logger.error("Exception" + e);
121+
logger.error("ElasticSearch Backend Listener was unable to perform request to the ElasticSearch engine. Check your JMeter console for more info.");
122+
}
123+
}
124+
return elasticSearchVersion;
125+
}
126+
98127

99128
/**
100129
* This method sends the ElasticSearch documents for each document present in the list (metricList). All is being
101130
* sent through the low-level ElasticSearch REST Client.
102131
*/
103132
public void sendRequest() {
104-
Request request = new Request("POST", "/" + this.esIndex + "/_bulk");
105-
StringBuilder bulkRequestBody = new StringBuilder();
106-
String actionMetaData = String.format(SEND_BULK_REQUEST, this.esIndex);
107-
133+
int elasticSearchVersionPrefix = getElasticSearchVersion();
134+
logger.info("Elastic Search version : " + Integer.toString(elasticSearchVersionPrefix));
135+
Request request;
136+
StringBuilder bulkRequestBody = new StringBuilder();
137+
String actionMetaData;
138+
if(elasticSearchVersionPrefix < 7) {
139+
request = new Request("POST", "/" + this.esIndex + "/SampleResult/_bulk");
140+
actionMetaData = String.format(SEND_BULK_REQUEST, this.esIndex, "SampleResult");
141+
}
142+
else {
143+
request = new Request("POST", "/" + this.esIndex + "/_bulk");
144+
actionMetaData = String.format(SEND_BULK_REQUEST, this.esIndex);
145+
}
146+
108147
for (String metric : this.metricList) {
109148
bulkRequestBody.append(actionMetaData);
110149
bulkRequestBody.append(metric);
@@ -123,6 +162,7 @@ public void sendRequest() {
123162
} catch (Exception e) {
124163
if (logger.isErrorEnabled()) {
125164
logger.error("Exception" + e);
165+
logger.error("Elastic Search Request End Point: " + request.getEndpoint());
126166
logger.error("ElasticSearch Backend Listener was unable to perform request to the ElasticSearch engine. Check your JMeter console for more info.");
127167
}
128168
}

0 commit comments

Comments
 (0)