10
10
import org .apache .http .HttpStatus ;
11
11
import org .apache .http .entity .ContentType ;
12
12
import org .apache .http .nio .entity .NStringEntity ;
13
+ import org .apache .http .util .EntityUtils ;
13
14
import org .elasticsearch .client .Request ;
14
15
import org .elasticsearch .client .RequestOptions ;
15
16
import org .elasticsearch .client .Response ;
16
17
import org .elasticsearch .client .RestClient ;
18
+ import org .json .simple .JSONObject ;
19
+ import org .json .simple .parser .JSONParser ;
17
20
import org .slf4j .Logger ;
18
21
import org .slf4j .LoggerFactory ;
19
22
@@ -95,16 +98,51 @@ public void createIndex() throws IOException {
95
98
logger .info ("Index already exists!" );
96
99
}
97
100
}
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
+
98
127
99
128
/**
100
129
* This method sends the ElasticSearch documents for each document present in the list (metricList). All is being
101
130
* sent through the low-level ElasticSearch REST Client.
102
131
*/
103
- 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
-
132
+ public void sendRequest (int elasticSearchVersionPrefix ) {
133
+ logger .info ("Elastic Search version : " + Integer .toString (elasticSearchVersionPrefix ));
134
+ Request request ;
135
+ StringBuilder bulkRequestBody = new StringBuilder ();
136
+ String actionMetaData ;
137
+ if (elasticSearchVersionPrefix < 7 ) {
138
+ request = new Request ("POST" , "/" + this .esIndex + "/SampleResult/_bulk" );
139
+ actionMetaData = String .format (SEND_BULK_REQUEST , this .esIndex , "SampleResult" );
140
+ }
141
+ else {
142
+ request = new Request ("POST" , "/" + this .esIndex + "/_bulk" );
143
+ actionMetaData = String .format (SEND_BULK_REQUEST , this .esIndex );
144
+ }
145
+
108
146
for (String metric : this .metricList ) {
109
147
bulkRequestBody .append (actionMetaData );
110
148
bulkRequestBody .append (metric );
@@ -123,6 +161,7 @@ public void sendRequest() {
123
161
} catch (Exception e ) {
124
162
if (logger .isErrorEnabled ()) {
125
163
logger .error ("Exception" + e );
164
+ logger .error ("Elastic Search Request End Point: " + request .getEndpoint ());
126
165
logger .error ("ElasticSearch Backend Listener was unable to perform request to the ElasticSearch engine. Check your JMeter console for more info." );
127
166
}
128
167
}
0 commit comments