diff --git a/cwms-data-api/src/main/java/cwms/cda/CdaMetricsContextListener.java b/cwms-data-api/src/main/java/cwms/cda/CdaMetricsContextListener.java index b78120f9b4..19657e7663 100644 --- a/cwms-data-api/src/main/java/cwms/cda/CdaMetricsContextListener.java +++ b/cwms-data-api/src/main/java/cwms/cda/CdaMetricsContextListener.java @@ -5,8 +5,8 @@ import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.servlets.MetricsServlet; -import io.prometheus.client.CollectorRegistry; -import io.prometheus.client.dropwizard.DropwizardExports; +import io.prometheus.metrics.instrumentation.dropwizard.DropwizardExports; +import io.prometheus.metrics.model.registry.PrometheusRegistry; @WebListener public class CdaMetricsContextListener extends MetricsServlet.ContextListener { @@ -14,7 +14,9 @@ public class CdaMetricsContextListener extends MetricsServlet.ContextListener { public static final MetricRegistry METRIC_REGISTRY = new MetricRegistry(); static { - CollectorRegistry.defaultRegistry.register(new DropwizardExports(METRIC_REGISTRY)); + DropwizardExports.builder() + .dropwizardRegistry(METRIC_REGISTRY) + .register(PrometheusRegistry.defaultRegistry); } @Override diff --git a/cwms-data-api/src/main/webapp/WEB-INF/web.xml b/cwms-data-api/src/main/webapp/WEB-INF/web.xml index 576b7f4201..6b434b56d3 100644 --- a/cwms-data-api/src/main/webapp/WEB-INF/web.xml +++ b/cwms-data-api/src/main/webapp/WEB-INF/web.xml @@ -11,7 +11,7 @@ metrics-prometheus - io.prometheus.client.exporter.MetricsServlet + io.prometheus.metrics.exporter.servlet.javax.PrometheusMetricsServlet metrics-prometheus diff --git a/cwms-data-api/src/test/java/cwms/cda/CdaMetricsContextListenerTest.java b/cwms-data-api/src/test/java/cwms/cda/CdaMetricsContextListenerTest.java new file mode 100644 index 0000000000..d85354ac01 --- /dev/null +++ b/cwms-data-api/src/test/java/cwms/cda/CdaMetricsContextListenerTest.java @@ -0,0 +1,34 @@ +package cwms.cda; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.codahale.metrics.MetricRegistry; +import io.prometheus.metrics.instrumentation.dropwizard.DropwizardExports; +import io.prometheus.metrics.model.registry.PrometheusRegistry; +import io.prometheus.metrics.model.snapshots.CounterSnapshot; +import io.prometheus.metrics.model.snapshots.MetricSnapshots; +import org.junit.jupiter.api.Test; + +class CdaMetricsContextListenerTest { + + @Test + void webXmlServletClassIsOnClasspath() { + assertDoesNotThrow(() -> Class.forName( + "io.prometheus.metrics.exporter.servlet.javax.PrometheusMetricsServlet")); + } + + @Test + void codahaleCounterIsExportedToPrometheusRegistry() { + MetricRegistry codaHale = new MetricRegistry(); + PrometheusRegistry prom = new PrometheusRegistry(); + DropwizardExports.builder().dropwizardRegistry(codaHale).register(prom); + + codaHale.counter("cda_test_counter").inc(7); + + MetricSnapshots snapshots = prom.scrape(); + CounterSnapshot snapshot = (CounterSnapshot) snapshots.iterator().next(); + assertEquals("cda_test_counter", snapshot.getMetadata().getPrometheusName()); + assertEquals(7.0, snapshot.getDataPoints().get(0).getValue()); + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 84852b593e..e3b69e203d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,7 +16,7 @@ swagger-core = "2.2.23" jackson = "2.17.1" geojson-jackson = "1.14" dropwizard = "4.2.12" -dropwizard_prometheus = "0.15.0" +prometheus_client = "1.6.1" owasp = "20220608.1" java-ee = "8.0.1" cwms-tomcat-auth = "1.1.0" @@ -73,8 +73,8 @@ javalin-openapi = { module = "io.javalin:javalin-openapi", version.ref = "javali swagger-core = { module = "io.swagger.core.v3:swagger-core", version.ref = "swagger-core" } metrics-core = { module = "io.dropwizard.metrics:metrics-core", version.ref = "dropwizard" } metrics-servlets = { module = "io.dropwizard.metrics:metrics-servlets", version.ref = "dropwizard" } -metrics-prometheus-client = { module = "io.prometheus:simpleclient_dropwizard", version.ref = "dropwizard_prometheus" } -metrics-prometheus-servlets = { module = "io.prometheus:simpleclient_servlet", version.ref = "dropwizard_prometheus" } +metrics-prometheus-client = { module = "io.prometheus:prometheus-metrics-instrumentation-dropwizard", version.ref = "prometheus_client" } +metrics-prometheus-servlets = { module = "io.prometheus:prometheus-metrics-exporter-servlet-javax", version.ref = "prometheus_client" } password4j = { module = "com.password4j:password4j", version = "1.8.4" }