diff --git a/src/main/java/com/zaxxer/hikari/metrics/prometheus/PrometheusMetricsTracker.java b/src/main/java/com/zaxxer/hikari/metrics/prometheus/PrometheusMetricsTracker.java index e31569b97..4a427114c 100644 --- a/src/main/java/com/zaxxer/hikari/metrics/prometheus/PrometheusMetricsTracker.java +++ b/src/main/java/com/zaxxer/hikari/metrics/prometheus/PrometheusMetricsTracker.java @@ -17,93 +17,76 @@ package com.zaxxer.hikari.metrics.prometheus; import com.zaxxer.hikari.metrics.IMetricsTracker; - import io.prometheus.client.Collector; import io.prometheus.client.CollectorRegistry; import io.prometheus.client.Counter; import io.prometheus.client.Summary; +import java.util.concurrent.TimeUnit; class PrometheusMetricsTracker implements IMetricsTracker { - private final Counter.Child connectionTimeoutCounter; - private final Summary.Child elapsedAcquiredSummary; - private final Summary.Child elapsedBorrowedSummary; - private final Summary.Child elapsedCreationSummary; - - private final Counter ctCounter; - private final Summary eaSummary; - private final Summary ebSummary; - private final Summary ecSummary; - + private static final Counter CONNECTION_TIMEOUT_COUNTER = Counter.build() + .name("hikaricp_connection_timeout_total") + .labelNames("pool") + .help("Connection timeout total count") + .register(); + private static final Summary ELAPSED_ACQUIRED_SUMMARY = Summary.build() + .name("hikaricp_connection_acquired_nanos") + .labelNames("pool") + .help("Connection acquired time (ns)") + .register(); + private static final Summary ELAPSED_BORROWED_SUMMARY = Summary.build() + .name("hikaricp_connection_usage_millis") + .labelNames("pool") + .help("Connection usage (ms)") + .register(); + private static final Summary ELAPSED_CREATION_SUMMARY = Summary.build() + .name("hikaricp_connection_creation_millis") + .labelNames("pool") + .help("Connection creation (ms)") + .register(); + + private final Counter.Child connectionTimeoutCounterChild; + private final Summary.Child elapsedAcquiredSummaryChild; + private final Summary.Child elapsedBorrowedSummaryChild; + private final Summary.Child elapsedCreationSummaryChild; private final Collector collector; - private final CollectorRegistry registry; - PrometheusMetricsTracker(String poolName, Collector collector, CollectorRegistry registry) - { + PrometheusMetricsTracker(String poolName, Collector collector) { this.collector = collector; - this.registry = registry; - - ctCounter = Counter.build() - .name("hikaricp_connection_timeout_count") - .labelNames("pool") - .help("Connection timeout count") - .register(registry); - - this.connectionTimeoutCounter = ctCounter.labels(poolName); - - eaSummary = Summary.build() - .name("hikaricp_connection_acquired_nanos") - .labelNames("pool") - .help("Connection acquired time (ns)") - .register(registry); - this.elapsedAcquiredSummary = eaSummary.labels(poolName); - - ebSummary = Summary.build() - .name("hikaricp_connection_usage_millis") - .labelNames("pool") - .help("Connection usage (ms)") - .register(registry); - this.elapsedBorrowedSummary = ebSummary.labels(poolName); - - ecSummary = Summary.build() - .name("hikaricp_connection_creation_millis") - .labelNames("pool") - .help("Connection creation (ms)") - .register(registry); - this.elapsedCreationSummary = ecSummary.labels(poolName); + this.connectionTimeoutCounterChild = CONNECTION_TIMEOUT_COUNTER.labels(poolName); + this.elapsedAcquiredSummaryChild = ELAPSED_ACQUIRED_SUMMARY.labels(poolName); + this.elapsedBorrowedSummaryChild = ELAPSED_BORROWED_SUMMARY.labels(poolName); + this.elapsedCreationSummaryChild = ELAPSED_CREATION_SUMMARY.labels(poolName); } @Override public void close() { - registry.unregister(ctCounter); - registry.unregister(eaSummary); - registry.unregister(ebSummary); - registry.unregister(ecSummary); - registry.unregister(collector); + CollectorRegistry.defaultRegistry.unregister(collector); } @Override public void recordConnectionAcquiredNanos(long elapsedAcquiredNanos) { - elapsedAcquiredSummary.observe(elapsedAcquiredNanos); + elapsedAcquiredSummaryChild.observe(elapsedAcquiredNanos); } @Override public void recordConnectionUsageMillis(long elapsedBorrowedMillis) { - elapsedBorrowedSummary.observe(elapsedBorrowedMillis); + elapsedBorrowedSummaryChild.observe(elapsedBorrowedMillis); } @Override public void recordConnectionCreatedMillis(long connectionCreatedMillis) { - elapsedCreationSummary.observe(connectionCreatedMillis); + elapsedCreationSummaryChild.observe(connectionCreatedMillis); } @Override public void recordConnectionTimeout() { - connectionTimeoutCounter.inc(); + connectionTimeoutCounterChild.inc(); } } diff --git a/src/main/java/com/zaxxer/hikari/metrics/prometheus/PrometheusMetricsTrackerFactory.java b/src/main/java/com/zaxxer/hikari/metrics/prometheus/PrometheusMetricsTrackerFactory.java index 1b18e8e5e..62e418120 100644 --- a/src/main/java/com/zaxxer/hikari/metrics/prometheus/PrometheusMetricsTrackerFactory.java +++ b/src/main/java/com/zaxxer/hikari/metrics/prometheus/PrometheusMetricsTrackerFactory.java @@ -19,9 +19,7 @@ import com.zaxxer.hikari.metrics.IMetricsTracker; import com.zaxxer.hikari.metrics.MetricsTrackerFactory; import com.zaxxer.hikari.metrics.PoolStats; - import io.prometheus.client.Collector; -import io.prometheus.client.CollectorRegistry; /** *
{@code
@@ -31,20 +29,9 @@
  */
 public class PrometheusMetricsTrackerFactory implements MetricsTrackerFactory
 {
-
-   private final CollectorRegistry registry;
-
-   public PrometheusMetricsTrackerFactory() {
-     this(CollectorRegistry.defaultRegistry);
-   }
-
-   public PrometheusMetricsTrackerFactory(CollectorRegistry registry) {
-      this.registry = registry;
-   }
-
    @Override
    public IMetricsTracker create(String poolName, PoolStats poolStats) {
-      Collector collector = new HikariCPCollector(poolName, poolStats).register(registry);
-      return new PrometheusMetricsTracker(poolName, collector, registry);
+      Collector collector = new HikariCPCollector(poolName, poolStats).register();
+      return new PrometheusMetricsTracker(poolName, collector);
    }
 }
diff --git a/src/test/java/com/zaxxer/hikari/metrics/prometheus/HikariCPCollectorTest.java b/src/test/java/com/zaxxer/hikari/metrics/prometheus/HikariCPCollectorTest.java
index 43be0672d..63746a3d5 100644
--- a/src/test/java/com/zaxxer/hikari/metrics/prometheus/HikariCPCollectorTest.java
+++ b/src/test/java/com/zaxxer/hikari/metrics/prometheus/HikariCPCollectorTest.java
@@ -19,16 +19,17 @@
 import static com.zaxxer.hikari.pool.TestElf.newHikariConfig;
 import static com.zaxxer.hikari.util.UtilityElf.quietlySleep;
 import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.nullValue;
 import static org.junit.Assert.assertThat;
 
+import java.sql.Connection;
+
+import org.junit.Test;
+
 import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
 import com.zaxxer.hikari.mocks.StubConnection;
-import io.prometheus.client.CollectorRegistry;
-import org.junit.Test;
 
-import java.sql.Connection;
+import io.prometheus.client.CollectorRegistry;
 
 public class HikariCPCollectorTest {
    @Test
@@ -116,32 +117,10 @@ public void connectionClosed() throws Exception {
       }
    }
 
-   @Test
-   public void checkRegistry() {
-      HikariConfig config = newHikariConfig();
-      config.setMinimumIdle(0);
-      CollectorRegistry customRegistry = new CollectorRegistry();
-      config.setMetricsTrackerFactory(new PrometheusMetricsTrackerFactory(customRegistry));
-      config.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource");
-
-      StubConnection.slowCreate = true;
-      try (HikariDataSource ds = new HikariDataSource(config)) {
-         assertThat(getValue("hikaricp_active_connections", "checkRegistry", customRegistry), is(0.0));
-         assertThat(getValue("hikaricp_active_connections", "checkRegistry"), is(nullValue()));
-      }
-      finally {
-         StubConnection.slowCreate = false;
-      }
-   }
-
-   private Double getValue(String name, String poolName) {
-     return this.getValue(name, poolName, CollectorRegistry.defaultRegistry);
-   }
-
-   private Double getValue(String name, String poolName, CollectorRegistry registry) {
+   private double getValue(String name, String poolName) {
       String[] labelNames = {"pool"};
       String[] labelValues = {poolName};
-      return registry.getSampleValue(name, labelNames, labelValues);
+      return CollectorRegistry.defaultRegistry.getSampleValue(name, labelNames, labelValues);
    }
 
 }
diff --git a/src/test/java/com/zaxxer/hikari/metrics/prometheus/PrometheusMetricsTrackerTest.java b/src/test/java/com/zaxxer/hikari/metrics/prometheus/PrometheusMetricsTrackerTest.java
index 39c537dab..da634cc95 100644
--- a/src/test/java/com/zaxxer/hikari/metrics/prometheus/PrometheusMetricsTrackerTest.java
+++ b/src/test/java/com/zaxxer/hikari/metrics/prometheus/PrometheusMetricsTrackerTest.java
@@ -19,17 +19,18 @@
 import static com.zaxxer.hikari.pool.TestElf.newHikariConfig;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.nullValue;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
+import java.sql.Connection;
+import java.sql.SQLTransientConnectionException;
+
+import org.junit.Test;
+
 import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
-import io.prometheus.client.CollectorRegistry;
-import org.junit.Test;
 
-import java.sql.Connection;
-import java.sql.SQLTransientConnectionException;
+import io.prometheus.client.CollectorRegistry;
 
 public class PrometheusMetricsTrackerTest {
 
@@ -46,7 +47,7 @@ public void recordConnectionTimeout() throws Exception {
 
       try (HikariDataSource hikariDataSource = new HikariDataSource(config)) {
          try (Connection connection1 = hikariDataSource.getConnection();
-              Connection connection2 = hikariDataSource.getConnection()) {
+            Connection connection2 = hikariDataSource.getConnection()) {
             try (Connection connection3 = hikariDataSource.getConnection()) {
             }
             catch (SQLTransientConnectionException ignored) {
@@ -54,7 +55,7 @@ public void recordConnectionTimeout() throws Exception {
          }
 
          assertThat(CollectorRegistry.defaultRegistry.getSampleValue(
-            "hikaricp_connection_timeout_count",
+            "hikaricp_connection_timeout_total",
             labelNames,
             labelValues), is(1.0));
          assertThat(CollectorRegistry.defaultRegistry.getSampleValue(
@@ -77,26 +78,37 @@ public void recordConnectionTimeout() throws Exception {
    }
 
    @Test
-   public void testThatTheProperRegistryIsUsed() throws Exception {
+   public void testMultiplePoolName() throws Exception {
+      String[] labelNames = {"pool"};
+
       HikariConfig config = newHikariConfig();
-      CollectorRegistry customRegistry = new CollectorRegistry();
-      config.setMetricsTrackerFactory(new PrometheusMetricsTrackerFactory(customRegistry));
+      config.setMetricsTrackerFactory(new PrometheusMetricsTrackerFactory());
+      config.setPoolName("first");
       config.setJdbcUrl("jdbc:h2:mem:");
       config.setMaximumPoolSize(2);
       config.setConnectionTimeout(250);
+      String[] labelValues1 = {config.getPoolName()};
 
-      String[] labelNames = {"pool"};
-      String[] labelValues = {config.getPoolName()};
-
-      try (HikariDataSource hikariDataSource = new HikariDataSource(config)) {
-         assertThat(customRegistry.getSampleValue(
-            "hikaricp_connection_timeout_count",
+      try (HikariDataSource ignored = new HikariDataSource(config)) {
+         assertThat(CollectorRegistry.defaultRegistry.getSampleValue(
+            "hikaricp_connection_timeout_total",
             labelNames,
-            labelValues), is(0.0));
+            labelValues1), is(0.0));
+      }
+
+      HikariConfig config2 = newHikariConfig();
+      config2.setMetricsTrackerFactory(new PrometheusMetricsTrackerFactory());
+      config2.setPoolName("second");
+      config2.setJdbcUrl("jdbc:h2:mem:");
+      config2.setMaximumPoolSize(4);
+      config2.setConnectionTimeout(250);
+      String[] labelValues2 = {config2.getPoolName()};
+
+      try (HikariDataSource ignored = new HikariDataSource(config2)) {
          assertThat(CollectorRegistry.defaultRegistry.getSampleValue(
-             "hikaricp_connection_usage_millis_sum",
-             labelNames,
-             labelValues), is(nullValue()));
+            "hikaricp_connection_timeout_total",
+            labelNames,
+            labelValues2), is(0.0));
       }
    }
 }