Some additional metrics.

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

@ -16,6 +16,9 @@
package com.zaxxer.hikari.metrics; package com.zaxxer.hikari.metrics;
import java.util.concurrent.TimeUnit;
import com.codahale.metrics.CachedGauge;
import com.codahale.metrics.Histogram; import com.codahale.metrics.Histogram;
import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Timer; import com.codahale.metrics.Timer;
@ -28,12 +31,47 @@ public final class CodaHaleMetricsTracker extends MetricsTracker
private final Timer connectionObtainTimer; private final Timer connectionObtainTimer;
private final Histogram connectionUsage; private final Histogram connectionUsage;
public CodaHaleMetricsTracker(final HikariPool pool, final MetricRegistry registry) public CodaHaleMetricsTracker(final HikariPool pool, final MetricRegistry registry) {
{
super(pool); super(pool);
connectionObtainTimer = registry.timer(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "Wait")); connectionObtainTimer = registry.timer(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "Wait"));
connectionUsage = registry.histogram(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "Usage")); 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} */ /** {@inheritDoc} */
@ -49,7 +87,7 @@ public final class CodaHaleMetricsTracker extends MetricsTracker
{ {
connectionUsage.update(PoolUtilities.elapsedTimeMs(bagEntry.lastOpenTime)); connectionUsage.update(PoolUtilities.elapsedTimeMs(bagEntry.lastOpenTime));
} }
public Timer getConnectionAcquisitionTimer() public Timer getConnectionAcquisitionTimer()
{ {
return connectionObtainTimer; return connectionObtainTimer;
@ -64,8 +102,7 @@ public final class CodaHaleMetricsTracker extends MetricsTracker
{ {
final Timer.Context innerContext; final Timer.Context innerContext;
Context(Timer timer) Context(Timer timer) {
{
innerContext = timer.time(); innerContext = timer.time();
} }

@ -16,9 +16,6 @@
package com.zaxxer.hikari.metrics; package com.zaxxer.hikari.metrics;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javassist.CannotCompileException; import javassist.CannotCompileException;
import javassist.ClassPool; import javassist.ClassPool;
import javassist.CtClass; import javassist.CtClass;
@ -26,7 +23,13 @@ import javassist.CtConstructor;
import javassist.LoaderClassPath; import javassist.LoaderClassPath;
import javassist.Modifier; 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 * @author Brett Wooldridge
*/ */

@ -16,6 +16,9 @@
package com.zaxxer.hikari.metrics; package com.zaxxer.hikari.metrics;
import java.util.concurrent.TimeUnit;
import com.codahale.metrics.CachedGauge;
import com.codahale.metrics.Histogram; import com.codahale.metrics.Histogram;
import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Timer; import com.codahale.metrics.Timer;
@ -28,12 +31,47 @@ public final class CodaHaleMetricsTracker extends MetricsTracker
private final Timer connectionObtainTimer; private final Timer connectionObtainTimer;
private final Histogram connectionUsage; private final Histogram connectionUsage;
public CodaHaleMetricsTracker(final HikariPool pool, final MetricRegistry registry) public CodaHaleMetricsTracker(final HikariPool pool, final MetricRegistry registry) {
{
super(pool); super(pool);
connectionObtainTimer = registry.timer(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "Wait")); connectionObtainTimer = registry.timer(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "Wait"));
connectionUsage = registry.histogram(MetricRegistry.name(pool.getConfiguration().getPoolName(), "connection", "Usage")); 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} */ /** {@inheritDoc} */
@ -49,7 +87,7 @@ public final class CodaHaleMetricsTracker extends MetricsTracker
{ {
connectionUsage.update(PoolUtilities.elapsedTimeMs(bagEntry.lastOpenTime)); connectionUsage.update(PoolUtilities.elapsedTimeMs(bagEntry.lastOpenTime));
} }
public Timer getConnectionAcquisitionTimer() public Timer getConnectionAcquisitionTimer()
{ {
return connectionObtainTimer; return connectionObtainTimer;
@ -64,8 +102,7 @@ public final class CodaHaleMetricsTracker extends MetricsTracker
{ {
final Timer.Context innerContext; final Timer.Context innerContext;
Context(Timer timer) Context(Timer timer) {
{
innerContext = timer.time(); innerContext = timer.time();
} }

@ -27,6 +27,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; 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 * @author Brett Wooldridge
*/ */

Loading…
Cancel
Save