You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by eo...@apache.org on 2024/03/18 06:40:50 UTC
(bookkeeper) branch master updated: Issue 2161: set metrics endpoint content-type (#4208)
This is an automated email from the ASF dual-hosted git repository.
eolivelli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
The following commit(s) were added to refs/heads/master by this push:
new 382184e71a Issue 2161: set metrics endpoint content-type (#4208)
382184e71a is described below
commit 382184e71a02c122c4eb88495d10b4895dc9578e
Author: Tom Jorissen <To...@cegeka.com>
AuthorDate: Mon Mar 18 07:40:44 2024 +0100
Issue 2161: set metrics endpoint content-type (#4208)
* fix: set metrics endpoint content-type when bookie http server is enabled
* fix: checkstyle
* fix: use existing prometheus content type constant
* chore: use minimal dependency / license fixes
* Revert "chore: use minimal dependency / license fixes"
This reverts commit 7daf8bec6d18f3d467398a39c012871e2fc059aa.
* Revert "fix: use existing prometheus content type constant"
This reverts commit c265c493ac3b7a55dd34c970a1ac8380bd0e8623.
---
.../apache/bookkeeper/http/service/HttpServiceResponse.java | 10 ++++++++++
.../org/apache/bookkeeper/http/vertx/VertxAbstractHandler.java | 4 ++++
.../apache/bookkeeper/server/http/service/MetricsService.java | 3 +++
.../bookkeeper/server/http/service/MetricsServiceTest.java | 6 ++++++
4 files changed, 23 insertions(+)
diff --git a/bookkeeper-http/http-server/src/main/java/org/apache/bookkeeper/http/service/HttpServiceResponse.java b/bookkeeper-http/http-server/src/main/java/org/apache/bookkeeper/http/service/HttpServiceResponse.java
index eb300a0eff..75b2a6a775 100644
--- a/bookkeeper-http/http-server/src/main/java/org/apache/bookkeeper/http/service/HttpServiceResponse.java
+++ b/bookkeeper-http/http-server/src/main/java/org/apache/bookkeeper/http/service/HttpServiceResponse.java
@@ -28,6 +28,7 @@ import org.apache.bookkeeper.http.HttpServer;
*/
public class HttpServiceResponse {
private String body;
+ private String contentType;
private HttpServer.StatusCode code = HttpServer.StatusCode.OK;
public HttpServiceResponse() {}
@@ -41,6 +42,10 @@ public class HttpServiceResponse {
return body;
}
+ public String getContentType() {
+ return contentType;
+ }
+
public int getStatusCode() {
return code.getValue();
}
@@ -50,6 +55,11 @@ public class HttpServiceResponse {
return this;
}
+ public HttpServiceResponse setContentType(String contentType) {
+ this.contentType = contentType;
+ return this;
+ }
+
public HttpServiceResponse setCode(HttpServer.StatusCode code) {
this.code = code;
return this;
diff --git a/bookkeeper-http/vertx-http-server/src/main/java/org/apache/bookkeeper/http/vertx/VertxAbstractHandler.java b/bookkeeper-http/vertx-http-server/src/main/java/org/apache/bookkeeper/http/vertx/VertxAbstractHandler.java
index 16c5ffc04b..9c595511f6 100644
--- a/bookkeeper-http/vertx-http-server/src/main/java/org/apache/bookkeeper/http/vertx/VertxAbstractHandler.java
+++ b/bookkeeper-http/vertx-http-server/src/main/java/org/apache/bookkeeper/http/vertx/VertxAbstractHandler.java
@@ -20,6 +20,7 @@
*/
package org.apache.bookkeeper.http.vertx;
+import io.netty.handler.codec.http.HttpHeaderNames;
import io.vertx.core.Handler;
import io.vertx.core.http.HttpMethod;
import io.vertx.core.http.HttpServerRequest;
@@ -56,6 +57,9 @@ public abstract class VertxAbstractHandler implements Handler<RoutingContext> {
response = new ErrorHttpService().handle(request);
}
httpResponse.setStatusCode(response.getStatusCode());
+ if (response.getContentType() != null) {
+ httpResponse.putHeader(HttpHeaderNames.CONTENT_TYPE, response.getContentType());
+ }
httpResponse.end(response.getBody());
}
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/http/service/MetricsService.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/http/service/MetricsService.java
index 0d62ca9daf..d3d57f72fa 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/http/service/MetricsService.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/server/http/service/MetricsService.java
@@ -35,6 +35,8 @@ import org.apache.bookkeeper.stats.StatsProvider;
*/
public class MetricsService implements HttpEndpointService {
+ public static final String PROMETHEUS_CONTENT_TYPE_004 = "text/plain; version=0.0.4; charset=utf-8";
+
private final ServerConfiguration conf;
private final StatsProvider statsProvider;
@@ -65,6 +67,7 @@ public class MetricsService implements HttpEndpointService {
statsProvider.writeAllMetrics(writer);
writer.flush();
response.setCode(StatusCode.OK);
+ response.setContentType(PROMETHEUS_CONTENT_TYPE_004);
response.setBody(writer.getBuffer().toString());
} catch (UnsupportedOperationException uoe) {
response.setCode(StatusCode.INTERNAL_ERROR);
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/http/service/MetricsServiceTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/http/service/MetricsServiceTest.java
index 3f5e63d60b..c46dfe2997 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/http/service/MetricsServiceTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/server/http/service/MetricsServiceTest.java
@@ -19,6 +19,7 @@
package org.apache.bookkeeper.server.http.service;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.CALLS_REAL_METHODS;
import static org.mockito.Mockito.doAnswer;
@@ -55,6 +56,7 @@ public class MetricsServiceTest {
HttpServiceRequest request = new HttpServiceRequest().setMethod(Method.PUT);
HttpServiceResponse response = service.handle(request);
assertEquals(StatusCode.FORBIDDEN.getValue(), response.getStatusCode());
+ assertNull(response.getContentType());
assertEquals(
"PUT is forbidden. Should be GET method",
response.getBody());
@@ -66,6 +68,7 @@ public class MetricsServiceTest {
HttpServiceRequest request = new HttpServiceRequest().setMethod(Method.GET);
HttpServiceResponse response = service.handle(request);
assertEquals(StatusCode.INTERNAL_ERROR.getValue(), response.getStatusCode());
+ assertNull(response.getContentType());
assertEquals(
"Stats provider is not enabled. Please enable it by set statsProviderClass"
+ " on bookie configuration",
@@ -86,6 +89,7 @@ public class MetricsServiceTest {
HttpServiceResponse response = service.handle(request);
assertEquals(StatusCode.OK.getValue(), response.getStatusCode());
+ assertEquals(MetricsService.PROMETHEUS_CONTENT_TYPE_004, response.getContentType());
assertEquals(content, response.getBody());
}
@@ -98,6 +102,7 @@ public class MetricsServiceTest {
HttpServiceResponse response = service.handle(request);
assertEquals(StatusCode.INTERNAL_ERROR.getValue(), response.getStatusCode());
+ assertNull(response.getContentType());
assertEquals("Exceptions are thrown when exporting metrics : write-metrics-exception",
response.getBody());
}
@@ -111,6 +116,7 @@ public class MetricsServiceTest {
HttpServiceResponse response = service.handle(request);
assertEquals(StatusCode.INTERNAL_ERROR.getValue(), response.getStatusCode());
+ assertNull(response.getContentType());
assertEquals("Currently stats provider doesn't support exporting metrics in http service",
response.getBody());
}