From 36f0bb0eb7ffa78e58e47272dd177ad3aba49ea3 Mon Sep 17 00:00:00 2001 From: Florian Hussonnois Date: Tue, 2 Mar 2021 17:48:06 +0100 Subject: [PATCH] fix(server): fix Kafka Streams metric values should be returned with content-type text/plain (#125) Resolves: #125 --- .../streamthoughts/azkarra/http/ExchangeHelper.java | 11 +++++++++++ .../http/handler/StreamsGetMetricsHandler.java | 6 +++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/azkarra-server/src/main/java/io/streamthoughts/azkarra/http/ExchangeHelper.java b/azkarra-server/src/main/java/io/streamthoughts/azkarra/http/ExchangeHelper.java index 6498f9e9..3ea8b67d 100644 --- a/azkarra-server/src/main/java/io/streamthoughts/azkarra/http/ExchangeHelper.java +++ b/azkarra-server/src/main/java/io/streamthoughts/azkarra/http/ExchangeHelper.java @@ -28,6 +28,7 @@ import io.undertow.util.Headers; import io.undertow.util.StatusCodes; +import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.util.Deque; import java.util.Map; @@ -126,6 +127,16 @@ public static void sendJsonResponseWithCode(final HttpServerExchange exchange, exchange.getResponseSender().send(JSON.serialize(response), StandardCharsets.UTF_8); } + public static void sendTextValue(final HttpServerExchange exchange, final Object value) { + final String s = value instanceof Double ? + new BigDecimal(value.toString()).stripTrailingZeros().toPlainString() + : value.toString(); + exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain"); + exchange + .setStatusCode(200) + .getResponseSender().send(s, StandardCharsets.UTF_8); + } + private static Optional getFirst(final String name, final Map> parameters) { Deque parameter = parameters.get(name); diff --git a/azkarra-server/src/main/java/io/streamthoughts/azkarra/http/handler/StreamsGetMetricsHandler.java b/azkarra-server/src/main/java/io/streamthoughts/azkarra/http/handler/StreamsGetMetricsHandler.java index 35217a1c..4271fa4b 100644 --- a/azkarra-server/src/main/java/io/streamthoughts/azkarra/http/handler/StreamsGetMetricsHandler.java +++ b/azkarra-server/src/main/java/io/streamthoughts/azkarra/http/handler/StreamsGetMetricsHandler.java @@ -45,6 +45,7 @@ import static io.streamthoughts.azkarra.http.ExchangeHelper.getOptionalQueryParam; import static io.streamthoughts.azkarra.http.ExchangeHelper.getQueryParam; import static io.streamthoughts.azkarra.http.ExchangeHelper.sendJsonResponse; +import static io.streamthoughts.azkarra.http.ExchangeHelper.sendTextValue; import static io.streamthoughts.azkarra.http.utils.Constants.HTTP_QUERY_PARAM_FILTER_EMPTY; import static io.streamthoughts.azkarra.http.utils.Constants.HTTP_QUERY_PARAM_FORMAT; import static io.streamthoughts.azkarra.http.utils.Constants.HTTP_QUERY_PARAM_FORMAT_VALUE_PROMETHEUS; @@ -111,9 +112,8 @@ public void handleRequest(final HttpServerExchange exchange) { throw new MetricNotFoundException("{group=\"" + group.get() + "\"}"); } - boolean extractValue = exchange.getRelativePath().endsWith("/value"); - if (name.isPresent() && extractValue) { - sendJsonResponse(exchange, metric.get().value()); + if (name.isPresent() && exchange.getRelativePath().endsWith("/value")) { + sendTextValue(exchange, metric.get().value()); } else { sendJsonResponse(exchange, groupSet); }