From cf454f163898232aabd9f9bafb38da0949255df1 Mon Sep 17 00:00:00 2001 From: Linus Brimstedt Date: Mon, 19 Oct 2020 15:55:05 +0200 Subject: [PATCH] fix: Send host header so connections can work over proxies / load balancers (solves #33) --- .../ElasticSearchMetricSender.java | 19 +++++++++++-------- .../ElasticsearchBackendClient.java | 8 +++++--- ...stElasticSearchBackendHTTPsConnection.java | 2 +- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/github/delirius325/jmeter/backendlistener/elasticsearch/ElasticSearchMetricSender.java b/src/main/java/io/github/delirius325/jmeter/backendlistener/elasticsearch/ElasticSearchMetricSender.java index bbeecaa..0bb0579 100644 --- a/src/main/java/io/github/delirius325/jmeter/backendlistener/elasticsearch/ElasticSearchMetricSender.java +++ b/src/main/java/io/github/delirius325/jmeter/backendlistener/elasticsearch/ElasticSearchMetricSender.java @@ -23,18 +23,20 @@ public class ElasticSearchMetricSender { private static final Logger logger = LoggerFactory.getLogger(ElasticSearchMetricSender.class); private RestClient client; private String esIndex; + private String host; private List metricList; private String authUser; private String authPwd; private String awsEndpoint; - public ElasticSearchMetricSender(RestClient cli, String index, String user, String pwd, String endpoint) { + public ElasticSearchMetricSender(RestClient cli, String host, String index, String user, String pwd, String endpoint) { this.client = cli; this.esIndex = index; this.metricList = new LinkedList(); this.authUser = user.trim(); this.authPwd = pwd.trim(); this.awsEndpoint = endpoint; + this.host = host; } /** @@ -73,15 +75,16 @@ public void addToList(String metric) { /** * This method sets the Basic Authorization header to requests */ - private Request setAuthorizationHeader(Request request) { + private Request setHeaders(Request request) { + RequestOptions.Builder options = request.getOptions().toBuilder(); if (this.awsEndpoint.equals("") && !this.authPwd.equals("")) { String encodedCredentials = Base64.getEncoder() .encodeToString((this.authUser + ":" + this.authPwd).getBytes()); - RequestOptions.Builder options = request.getOptions().toBuilder(); options.addHeader("Authorization", "Basic " + encodedCredentials); - request.setOptions(options); - + } + options.addHeader("Host", host); + request.setOptions(options); return request; } @@ -90,7 +93,7 @@ private Request setAuthorizationHeader(Request request) { */ public void createIndex() { try { - this.client.performRequest(setAuthorizationHeader(new Request("PUT", "/" + this.esIndex))); + this.client.performRequest(setHeaders(new Request("PUT", "/" + this.esIndex))); } catch (IOException e) { logger.info("Index already exists!"); } @@ -100,7 +103,7 @@ public int getElasticSearchVersion() { Request request = new Request("GET", "/" ); int elasticSearchVersion = -1; try { - Response response = this.client.performRequest(setAuthorizationHeader(request)); + Response response = this.client.performRequest(setHeaders(request)); if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK && logger.isErrorEnabled()) { logger.error("Unable to perform request to ElasticSearch engine for index {}. Response status: {}", this.esIndex, response.getStatusLine().toString()); @@ -149,7 +152,7 @@ public void sendRequest(int elasticSearchVersionPrefix) { try { - Response response = this.client.performRequest(setAuthorizationHeader(request)); + Response response = this.client.performRequest(setHeaders(request)); if (logger.isErrorEnabled()) { if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { diff --git a/src/main/java/io/github/delirius325/jmeter/backendlistener/elasticsearch/ElasticsearchBackendClient.java b/src/main/java/io/github/delirius325/jmeter/backendlistener/elasticsearch/ElasticsearchBackendClient.java index 2fe23ee..a4bed0a 100644 --- a/src/main/java/io/github/delirius325/jmeter/backendlistener/elasticsearch/ElasticsearchBackendClient.java +++ b/src/main/java/io/github/delirius325/jmeter/backendlistener/elasticsearch/ElasticsearchBackendClient.java @@ -7,7 +7,6 @@ import org.apache.commons.io.FilenameUtils; import org.apache.http.HttpHost; import org.apache.http.HttpRequestInterceptor; -import org.apache.jmeter.JMeter; import org.apache.jmeter.config.Arguments; import org.apache.jmeter.samplers.SampleResult; import org.apache.jmeter.util.JMeterUtils; @@ -119,7 +118,8 @@ public void setupTest(BackendListenerContext context) throws Exception { public void onFailure(Node node) { logger.error("Error with node: " + node.toString()); } - }).build(); + }) + .build(); } else { AWS4Signer signer = new AWS4Signer(); signer.setServiceName(SERVICE_NAME); @@ -133,7 +133,9 @@ public void onFailure(Node node) { convertParameterToSet(context, ES_SAMPLE_FILTER, this.filters); convertParameterToSet(context, ES_FIELDS, this.fields); - this.sender = new ElasticSearchMetricSender(client, context.getParameter(ES_INDEX).toLowerCase(), + this.sender = new ElasticSearchMetricSender(client, + context.getParameter(ES_HOST), + context.getParameter(ES_INDEX).toLowerCase(), context.getParameter(ES_AUTH_USER), context.getParameter(ES_AUTH_PWD), context.getParameter(ES_AWS_ENDPOINT)); this.sender.createIndex(); diff --git a/src/test/java/io/github/delirius325/jmeter/backendlistener/elasticsearch/TestElasticSearchBackendHTTPsConnection.java b/src/test/java/io/github/delirius325/jmeter/backendlistener/elasticsearch/TestElasticSearchBackendHTTPsConnection.java index 11eadeb..607dfce 100644 --- a/src/test/java/io/github/delirius325/jmeter/backendlistener/elasticsearch/TestElasticSearchBackendHTTPsConnection.java +++ b/src/test/java/io/github/delirius325/jmeter/backendlistener/elasticsearch/TestElasticSearchBackendHTTPsConnection.java @@ -47,7 +47,7 @@ public void onFailure(Node node) { System.err.println("Error with node: " + node.toString()); } }).setMaxRetryTimeoutMillis(60000).build(); - sender = new ElasticSearchMetricSender(client, "test_" + sdf.format(new Date()), "logstashTest", + sender = new ElasticSearchMetricSender(client, "", "test_" + sdf.format(new Date()), "logstashTest", "logstashTest", ""); }