From 1e8813764b11e282a954926bedf1c9891a7c8811 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Mon, 13 Nov 2023 16:00:50 +0100 Subject: [PATCH 1/2] use length of bytearray after unicode conversion --- .../metrics/PrometheusExporterServerImpl.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporterServerImpl.java b/plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporterServerImpl.java index b5ac137dadd2..26463ac7fcfc 100644 --- a/plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporterServerImpl.java +++ b/plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporterServerImpl.java @@ -28,6 +28,7 @@ import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; +import java.nio.charset.StandardCharsets; import java.util.Arrays; public class PrometheusExporterServerImpl extends ManagerBase implements PrometheusExporterServer, Configurable { @@ -57,11 +58,21 @@ public void handle(final HttpExchange httpExchange) throws IOException { response = prometheusExporter.getMetrics(); responseCode = 200; } + byte[] bytesToOutput = response.getBytes(StandardCharsets.UTF_8); httpExchange.getResponseHeaders().set("content-type", "text/plain"); - httpExchange.sendResponseHeaders(responseCode, response.length()); + httpExchange.sendResponseHeaders(responseCode, bytesToOutput.length); final OutputStream os = httpExchange.getResponseBody(); - os.write(response.getBytes()); - os.close(); + try { + os.write(bytesToOutput); + } catch (IOException e) { + LOG.error(String.format("could not export Prometheus data due to %s", e.getLocalizedMessage())); + if (LOG.isDebugEnabled()) { + LOG.debug("Error during Prometheus export: ", e); + } + os.write("The system could not export Prometheus due to an internal error. Contact your operator to learn about the reason.".getBytes()); + } finally { + os.close(); + } } } From cab7dd4d9c9ddefa0f001cbb36fd987a70570c3e Mon Sep 17 00:00:00 2001 From: dahn Date: Tue, 14 Nov 2023 10:27:26 +0100 Subject: [PATCH 2/2] added suggestion from @havengit in #8203 --- .../apache/cloudstack/metrics/PrometheusExporterServerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporterServerImpl.java b/plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporterServerImpl.java index 26463ac7fcfc..cc3b7d556538 100644 --- a/plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporterServerImpl.java +++ b/plugins/integrations/prometheus/src/main/java/org/apache/cloudstack/metrics/PrometheusExporterServerImpl.java @@ -59,7 +59,7 @@ public void handle(final HttpExchange httpExchange) throws IOException { responseCode = 200; } byte[] bytesToOutput = response.getBytes(StandardCharsets.UTF_8); - httpExchange.getResponseHeaders().set("content-type", "text/plain"); + httpExchange.getResponseHeaders().set("content-type", "text/plain; charset=UTF-8"); httpExchange.sendResponseHeaders(responseCode, bytesToOutput.length); final OutputStream os = httpExchange.getResponseBody(); try {