From cc736bb3460e25bb929b1ab79fc9163a6fdb1a48 Mon Sep 17 00:00:00 2001 From: Brett Wooldridge Date: Fri, 31 Oct 2014 15:37:25 +0900 Subject: [PATCH] Some additional metrics. --- .../metrics/CodaHaleMetricsTracker.java | 47 +++++++++++++++++-- .../zaxxer/hikari/metrics/CodaHaleShim.java | 9 ++-- .../metrics/CodaHaleMetricsTracker.java | 47 +++++++++++++++++-- .../zaxxer/hikari/metrics/CodaHaleShim.java | 3 ++ 4 files changed, 93 insertions(+), 13 deletions(-) diff --git a/hikaricp-java6/src/main/java/com/zaxxer/hikari/metrics/CodaHaleMetricsTracker.java b/hikaricp-java6/src/main/java/com/zaxxer/hikari/metrics/CodaHaleMetricsTracker.java index 3c632f9d..742543d7 100644 --- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/metrics/CodaHaleMetricsTracker.java +++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/metrics/CodaHaleMetricsTracker.java @@ -16,6 +16,9 @@ package com.zaxxer.hikari.metrics; +import java.util.concurrent.TimeUnit; + +import com.codahale.metrics.CachedGauge; import com.codahale.metrics.Histogram; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.Timer; @@ -28,12 +31,47 @@ public final class CodaHaleMetricsTracker extends MetricsTracker private final Timer connectionObtainTimer; private final Histogram connectionUsage; - public CodaHaleMetricsTracker(final HikariPool pool, final MetricRegistry registry) - { + public CodaHaleMetricsTracker(final HikariPool pool, final MetricRegistry registry) { super(pool); connectionObtainTimer = registry.timer(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "Wait")); connectionUsage = registry.histogram(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "Usage")); + + registry.register(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "TotalConnections"), + new CachedGauge(10, TimeUnit.SECONDS) { + @Override + protected Integer loadValue() + { + return pool.getTotalConnections(); + } + }); + + registry.register(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "IdleConnections"), + new CachedGauge(10, TimeUnit.SECONDS) { + @Override + protected Integer loadValue() + { + return pool.getIdleConnections(); + } + }); + + registry.register(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "ActiveConnections"), + new CachedGauge(10, TimeUnit.SECONDS) { + @Override + protected Integer loadValue() + { + return pool.getActiveConnections(); + } + }); + + registry.register(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "PendingConnections"), + new CachedGauge(10, TimeUnit.SECONDS) { + @Override + protected Integer loadValue() + { + return pool.getThreadsAwaitingConnection(); + } + }); } /** {@inheritDoc} */ @@ -49,7 +87,7 @@ public final class CodaHaleMetricsTracker extends MetricsTracker { connectionUsage.update(PoolUtilities.elapsedTimeMs(bagEntry.lastOpenTime)); } - + public Timer getConnectionAcquisitionTimer() { return connectionObtainTimer; @@ -64,8 +102,7 @@ public final class CodaHaleMetricsTracker extends MetricsTracker { final Timer.Context innerContext; - Context(Timer timer) - { + Context(Timer timer) { innerContext = timer.time(); } diff --git a/hikaricp-java6/src/main/java/com/zaxxer/hikari/metrics/CodaHaleShim.java b/hikaricp-java6/src/main/java/com/zaxxer/hikari/metrics/CodaHaleShim.java index 14f30df9..ea94a2a9 100644 --- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/metrics/CodaHaleShim.java +++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/metrics/CodaHaleShim.java @@ -16,9 +16,6 @@ package com.zaxxer.hikari.metrics; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import javassist.CannotCompileException; import javassist.ClassPool; import javassist.CtClass; @@ -26,7 +23,13 @@ import javassist.CtConstructor; import javassist.LoaderClassPath; import javassist.Modifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** + * This class is used to validate that Codahale metrics is available in the class + * path, or if not to generate a fake "shim" that avoids ClassNotFound exceptions + * in code that depends on (but does not use if not present) Codahale metrics. * * @author Brett Wooldridge */ diff --git a/hikaricp/src/main/java/com/zaxxer/hikari/metrics/CodaHaleMetricsTracker.java b/hikaricp/src/main/java/com/zaxxer/hikari/metrics/CodaHaleMetricsTracker.java index 3c632f9d..742543d7 100644 --- a/hikaricp/src/main/java/com/zaxxer/hikari/metrics/CodaHaleMetricsTracker.java +++ b/hikaricp/src/main/java/com/zaxxer/hikari/metrics/CodaHaleMetricsTracker.java @@ -16,6 +16,9 @@ package com.zaxxer.hikari.metrics; +import java.util.concurrent.TimeUnit; + +import com.codahale.metrics.CachedGauge; import com.codahale.metrics.Histogram; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.Timer; @@ -28,12 +31,47 @@ public final class CodaHaleMetricsTracker extends MetricsTracker private final Timer connectionObtainTimer; private final Histogram connectionUsage; - public CodaHaleMetricsTracker(final HikariPool pool, final MetricRegistry registry) - { + public CodaHaleMetricsTracker(final HikariPool pool, final MetricRegistry registry) { super(pool); connectionObtainTimer = registry.timer(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "Wait")); connectionUsage = registry.histogram(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "Usage")); + + registry.register(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "TotalConnections"), + new CachedGauge(10, TimeUnit.SECONDS) { + @Override + protected Integer loadValue() + { + return pool.getTotalConnections(); + } + }); + + registry.register(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "IdleConnections"), + new CachedGauge(10, TimeUnit.SECONDS) { + @Override + protected Integer loadValue() + { + return pool.getIdleConnections(); + } + }); + + registry.register(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "ActiveConnections"), + new CachedGauge(10, TimeUnit.SECONDS) { + @Override + protected Integer loadValue() + { + return pool.getActiveConnections(); + } + }); + + registry.register(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "PendingConnections"), + new CachedGauge(10, TimeUnit.SECONDS) { + @Override + protected Integer loadValue() + { + return pool.getThreadsAwaitingConnection(); + } + }); } /** {@inheritDoc} */ @@ -49,7 +87,7 @@ public final class CodaHaleMetricsTracker extends MetricsTracker { connectionUsage.update(PoolUtilities.elapsedTimeMs(bagEntry.lastOpenTime)); } - + public Timer getConnectionAcquisitionTimer() { return connectionObtainTimer; @@ -64,8 +102,7 @@ public final class CodaHaleMetricsTracker extends MetricsTracker { final Timer.Context innerContext; - Context(Timer timer) - { + Context(Timer timer) { innerContext = timer.time(); } diff --git a/hikaricp/src/main/java/com/zaxxer/hikari/metrics/CodaHaleShim.java b/hikaricp/src/main/java/com/zaxxer/hikari/metrics/CodaHaleShim.java index 68dfb1e6..ea94a2a9 100644 --- a/hikaricp/src/main/java/com/zaxxer/hikari/metrics/CodaHaleShim.java +++ b/hikaricp/src/main/java/com/zaxxer/hikari/metrics/CodaHaleShim.java @@ -27,6 +27,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** + * This class is used to validate that Codahale metrics is available in the class + * path, or if not to generate a fake "shim" that avoids ClassNotFound exceptions + * in code that depends on (but does not use if not present) Codahale metrics. * * @author Brett Wooldridge */