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 0000000000..10eb8a4e7f --- /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 0541d489c4..ac6b833db5 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.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 void clearMetrics() { registry.clear(); } - @Test - public void testMetricsEmittedOnSuccessfulRequest() { + @ParameterizedTest + @ValueSource(strings = {"%s/metrics", "%s/q/metrics"}) + public void testMetricsEmittedOnSuccessfulRequest(String endpoint) { sendSuccessfulRequest(); Map 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 void testMetricsEmittedOnSuccessfulRequest() { }); } - @Test - public void testMetricsEmittedOnFailedRequest() { + @ParameterizedTest + @ValueSource(strings = {"%s/metrics", "%s/q/metrics"}) + public void testMetricsEmittedOnFailedRequest(String endpoint) { sendFailingRequest(); Map 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 6e39a5d096..8d913b11a9 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 void testMetricsAreEmittedWhenRateLimiting() { // 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 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 be61bb79f3..f355eead44 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 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 @@ /** Utils for working with metrics in tests */ public class TestMetricsUtil { - public static Map fetchMetrics(Client client, URI baseManagementUri) { + public static Map 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));