1010import org .apache .http .HttpStatus ;
1111import org .apache .http .entity .ContentType ;
1212import org .apache .http .nio .entity .NStringEntity ;
13+ import org .apache .http .util .EntityUtils ;
1314import org .elasticsearch .client .Request ;
1415import org .elasticsearch .client .RequestOptions ;
1516import org .elasticsearch .client .Response ;
1617import org .elasticsearch .client .RestClient ;
18+ import org .json .simple .JSONObject ;
19+ import org .json .simple .parser .JSONParser ;
1720import org .slf4j .Logger ;
1821import 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