Some additional metrics.

pull/192/head
Brett Wooldridge 11 years ago
parent 641c39b442
commit cc736bb346

@ -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<Integer>(10, TimeUnit.SECONDS) {
@Override
protected Integer loadValue()
{
return pool.getTotalConnections();
}
});
registry.register(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "IdleConnections"),
new CachedGauge<Integer>(10, TimeUnit.SECONDS) {
@Override
protected Integer loadValue()
{
return pool.getIdleConnections();
}
});
registry.register(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "ActiveConnections"),
new CachedGauge<Integer>(10, TimeUnit.SECONDS) {
@Override
protected Integer loadValue()
{
return pool.getActiveConnections();
}
});
registry.register(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "PendingConnections"),
new CachedGauge<Integer>(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();
}

@ -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
*/

@ -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<Integer>(10, TimeUnit.SECONDS) {
@Override
protected Integer loadValue()
{
return pool.getTotalConnections();
}
});
registry.register(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "IdleConnections"),
new CachedGauge<Integer>(10, TimeUnit.SECONDS) {
@Override
protected Integer loadValue()
{
return pool.getIdleConnections();
}
});
registry.register(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "ActiveConnections"),
new CachedGauge<Integer>(10, TimeUnit.SECONDS) {
@Override
protected Integer loadValue()
{
return pool.getActiveConnections();
}
});
registry.register(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "PendingConnections"),
new CachedGauge<Integer>(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();
}

@ -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
*/

Loading…
Cancel
Save