From 20ff3df5a3f4ad4a7fe8a59e18a0120da8e1d33a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Paulo?= Date: Wed, 29 Jul 2020 17:07:15 -0300 Subject: [PATCH 1/2] Update to specify the charset of response MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In some Operational Systems (Like IBM Z/OS and IBM Z/Unix) the JRE runs with a charset different of UTF-8, those default charsets produce wrong behavior and truncated responses. To avoid this kind of situations I put the specifc charset in the output writer. This create a consistent response between different platforms. Signed-off-by: João Paulo Binda Delboni --- .../main/java/io/prometheus/client/exporter/HTTPServer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/simpleclient_httpserver/src/main/java/io/prometheus/client/exporter/HTTPServer.java b/simpleclient_httpserver/src/main/java/io/prometheus/client/exporter/HTTPServer.java index 2a6c033dd..53a4afef5 100644 --- a/simpleclient_httpserver/src/main/java/io/prometheus/client/exporter/HTTPServer.java +++ b/simpleclient_httpserver/src/main/java/io/prometheus/client/exporter/HTTPServer.java @@ -9,6 +9,7 @@ import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.net.URLDecoder; +import java.nio.charset.Charset; import java.util.List; import java.util.Set; import java.util.HashSet; @@ -61,7 +62,7 @@ public void handle(HttpExchange t) throws IOException { String contextPath = t.getHttpContext().getPath(); ByteArrayOutputStream response = this.response.get(); response.reset(); - OutputStreamWriter osw = new OutputStreamWriter(response); + OutputStreamWriter osw = new OutputStreamWriter(response, Charset.forName("UTF-8")); if ("/-/healthy".equals(contextPath)) { osw.write(HEALTHY_RESPONSE); } else { From 49a19aa5f4cf33f800c2e84e7c26cb7b84b81ff5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Binda=20Delboni?= Date: Fri, 31 Jul 2020 13:32:13 -0300 Subject: [PATCH 2/2] Specify the charset of Graphite Request To prevent problems with encoding in some Operational Systems we set the charset of Graphite Charset. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: João Paulo Binda Delboni --- .../src/main/java/io/prometheus/client/bridge/Graphite.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/simpleclient_graphite_bridge/src/main/java/io/prometheus/client/bridge/Graphite.java b/simpleclient_graphite_bridge/src/main/java/io/prometheus/client/bridge/Graphite.java index 708b025bd..5e292800c 100644 --- a/simpleclient_graphite_bridge/src/main/java/io/prometheus/client/bridge/Graphite.java +++ b/simpleclient_graphite_bridge/src/main/java/io/prometheus/client/bridge/Graphite.java @@ -5,8 +5,10 @@ import java.io.BufferedWriter; import java.io.IOException; +import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; +import java.nio.charset.Charset; import java.util.Collections; import java.util.logging.Level; import java.util.logging.Logger; @@ -50,7 +52,7 @@ public Graphite(String host, int port) { */ public void push(CollectorRegistry registry) throws IOException { Socket s = new Socket(host, port); - BufferedWriter writer = new BufferedWriter(new PrintWriter(s.getOutputStream())); + BufferedWriter writer = new BufferedWriter(new PrintWriter(new OutputStreamWriter(s.getOutputStream(), Charset.forName("UTF-8")))); Matcher m = INVALID_GRAPHITE_CHARS.matcher(""); long now = System.currentTimeMillis() / 1000; for (Collector.MetricFamilySamples metricFamilySamples: Collections.list(registry.metricFamilySamples())) {