This is an automated email from the ASF dual-hosted git repository.

adutra pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git


The following commit(s) were added to refs/heads/main by this push:
     new 0570e5a4 Reinstate legacy management endpoints (#782)
0570e5a4 is described below

commit 0570e5a4ffaf32508848d188875139a800c30e21
Author: Alexandre Dutra <[email protected]>
AuthorDate: Wed Jan 15 16:38:32 2025 +0100

    Reinstate legacy management endpoints (#782)
    
    This PR puts back the legacy endpoints /healthcheck and /metrics on the 
management port.
---
 .../quarkus/legacy/LegacyManagementEndpoints.java  | 35 ++++++++++++++++++++++
 .../quarkus/TimedApplicationEventListenerTest.java | 17 ++++++-----
 .../quarkus/ratelimiter/RateLimiterFilterTest.java |  2 +-
 .../service/quarkus/test/TestMetricsUtil.java      |  9 ++++--
 4 files changed, 53 insertions(+), 10 deletions(-)

diff --git 
a/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/legacy/LegacyManagementEndpoints.java
 
b/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/legacy/LegacyManagementEndpoints.java
new file mode 100644
index 00000000..10eb8a4e
--- /dev/null
+++ 
b/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/legacy/LegacyManagementEndpoints.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.polaris.service.quarkus.legacy;
+
+import io.quarkus.vertx.http.ManagementInterface;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.event.Observes;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+@ApplicationScoped
+public class LegacyManagementEndpoints {
+
+  public void registerLegacyManagementRoutes(
+      @Observes ManagementInterface mi,
+      @ConfigProperty(name = "quarkus.management.root-path") String rootPath) {
+    mi.router().get("/metrics").handler(rc -> rc.reroute(rootPath + 
"/metrics"));
+    mi.router().get("/healthcheck").handler(rc -> rc.reroute(rootPath + 
"/health"));
+  }
+}
diff --git 
a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/TimedApplicationEventListenerTest.java
 
b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/TimedApplicationEventListenerTest.java
index 0541d489..ac6b833d 100644
--- 
a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/TimedApplicationEventListenerTest.java
+++ 
b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/TimedApplicationEventListenerTest.java
@@ -40,10 +40,11 @@ import org.hawkular.agent.prometheus.types.Summary;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInfo;
 import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 @QuarkusTest
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
@@ -80,11 +81,12 @@ public class TimedApplicationEventListenerTest {
     registry.clear();
   }
 
-  @Test
-  public void testMetricsEmittedOnSuccessfulRequest() {
+  @ParameterizedTest
+  @ValueSource(strings = {"%s/metrics", "%s/q/metrics"})
+  public void testMetricsEmittedOnSuccessfulRequest(String endpoint) {
     sendSuccessfulRequest();
     Map<String, MetricFamily> allMetrics =
-        TestMetricsUtil.fetchMetrics(fixture.client, 
testEnv.baseManagementUri());
+        TestMetricsUtil.fetchMetrics(fixture.client, 
testEnv.baseManagementUri(), endpoint);
     assertThat(allMetrics).containsKey(METRIC_NAME);
     assertThat(allMetrics.get(METRIC_NAME).getMetrics())
         .satisfiesOnlyOnce(
@@ -105,11 +107,12 @@ public class TimedApplicationEventListenerTest {
             });
   }
 
-  @Test
-  public void testMetricsEmittedOnFailedRequest() {
+  @ParameterizedTest
+  @ValueSource(strings = {"%s/metrics", "%s/q/metrics"})
+  public void testMetricsEmittedOnFailedRequest(String endpoint) {
     sendFailingRequest();
     Map<String, MetricFamily> allMetrics =
-        TestMetricsUtil.fetchMetrics(fixture.client, 
testEnv.baseManagementUri());
+        TestMetricsUtil.fetchMetrics(fixture.client, 
testEnv.baseManagementUri(), endpoint);
     assertThat(allMetrics).containsKey(METRIC_NAME);
     assertThat(allMetrics.get(METRIC_NAME).getMetrics())
         .satisfiesOnlyOnce(
diff --git 
a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/ratelimiter/RateLimiterFilterTest.java
 
b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/ratelimiter/RateLimiterFilterTest.java
index 6e39a5d0..8d913b11 100644
--- 
a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/ratelimiter/RateLimiterFilterTest.java
+++ 
b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/ratelimiter/RateLimiterFilterTest.java
@@ -144,7 +144,7 @@ public class RateLimiterFilterTest {
     // 
polaris_principal_roles_listPrincipalRoles_seconds_count{application="Polaris",class="org.apache.polaris.service.admin.api.PolarisPrincipalRolesApi",environment="prod",exception="none",method="listPrincipalRoles"}
 50.0
 
     Map<String, MetricFamily> metrics =
-        TestMetricsUtil.fetchMetrics(fixture.client, 
testEnv.baseManagementUri());
+        TestMetricsUtil.fetchMetrics(fixture.client, 
testEnv.baseManagementUri(), "%s/q/metrics");
 
     assertThat(metrics)
         .isNotEmpty()
diff --git 
a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/test/TestMetricsUtil.java
 
b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/test/TestMetricsUtil.java
index be61bb79..f355eead 100644
--- 
a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/test/TestMetricsUtil.java
+++ 
b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/test/TestMetricsUtil.java
@@ -22,6 +22,7 @@ import static 
org.assertj.core.api.AssertionsForClassTypes.assertThat;
 
 import jakarta.ws.rs.client.Client;
 import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.Status;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.net.URI;
@@ -35,9 +36,13 @@ import 
org.hawkular.agent.prometheus.walkers.CollectorPrometheusMetricsWalker;
 /** Utils for working with metrics in tests */
 public class TestMetricsUtil {
 
-  public static Map<String, MetricFamily> fetchMetrics(Client client, URI 
baseManagementUri) {
+  public static Map<String, MetricFamily> fetchMetrics(
+      Client client, URI baseManagementUri, String endpointPath) {
     Response response =
-        client.target(String.format("%s/q/metrics", 
baseManagementUri)).request().get();
+        client.target(String.format(endpointPath, 
baseManagementUri)).request().get();
+    if (response.getStatus() == Status.MOVED_PERMANENTLY.getStatusCode()) {
+      response = client.target(response.getLocation()).request().get();
+    }
     assertThat(response).returns(Response.Status.OK.getStatusCode(), 
Response::getStatus);
     String body = response.readEntity(String.class);
     InputStream inputStream = new 
ByteArrayInputStream(body.getBytes(StandardCharsets.UTF_8));

Reply via email to