This is my existing JAX-RS resource class
package tools.descartes.teastore.webui.rest;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
/**
* Rest endpoint for the store cart.
*
* @author Simon
*/
@Path("ready")
@Produces({ "application/json" })
public class ReadyRest {
/**
* This methods checks, if the service is ready.
*
* @return True, if recommender is ready; false, if not.
*/
@GET
@Path("isready")
public Response isReady() {
return Response.ok(true).build();
}
@GET
@Path("/prometheus") // http://localhost:8080/tools.descartes.teastore.webui/rest/ready/prometheus
@Produces(MediaType.TEXT_PLAIN)
public Response getMetrics() {
String metrics = MetricsExporter.getMetrics();
return Response.ok(metrics).build();
}
}
and I am able to reach the URL at http://localhost:8080/tools.descartes.teastore.webui/rest/ready/prometheus with the following web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">
<display-name>Descartes TeaStore Web UI</display-name>
<welcome-file-list>
<welcome-file>index</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>webuirest</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>tools.descartes.teastore.webui.rest</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>webuirest</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<env-entry>
<env-entry-name>servicePort</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>8080</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>registryURL</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>http://localhost:8080/tools.descartes.teastore.registry/rest/services/</env-entry-value>
</env-entry>
<error-page>
<location>/error</location>
</error-page>
<filter>
<filter-name>TrackingFilter</filter-name>
<filter-class>tools.descartes.teastore.registryclient.rest.TrackingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TrackingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<absolute-ordering/>
</web-app>
I would like to add another JAX-RS resource and reach the metrics also at the url http://localhost:8080/tools.descartes.teastore.webui/rest/ready/prometheusactuator/prometheus
How can I do it??
I try to modify the xml adding
<servlet>
<servlet-name>prometheusMetrics</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>tools.descartes.teastore.webui.rest</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>prometheusMetrics</servlet-name>
<url-pattern>/actuator/*</url-pattern>
</servlet-mapping>
and adding a new JAX-RS resource class with:
@Path("/actuator/prometheus")
public class PrometheusMetricsEndpoint {
@GET
@Produces(MediaType.TEXT_PLAIN)
public Response getMetrics() {
String metrics = MetricsExporter.getMetrics();
return Response.ok(metrics).build();
}
}