package perf.client;
import io.reactivex.netty.metrics.HttpClientMetricEventsListener;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.LongAdder;
/**
* @author Nitesh Kant
*/
public class ConnectionPoolMetricListener extends HttpClientMetricEventsListener {
private LongAdder inUseCount = new LongAdder();
private LongAdder idleCount = new LongAdder();
private LongAdder totalConnections = new LongAdder();
private LongAdder pendingAcquire = new LongAdder();
private LongAdder pendingRelease = new LongAdder();
@Override
protected void onPoolReleaseFailed(long duration, TimeUnit timeUnit, Throwable throwable) {
pendingRelease.decrement();
}
@Override
protected void onPoolReleaseSuccess(long duration, TimeUnit timeUnit) {
pendingRelease.decrement();
idleCount.increment();
inUseCount.decrement();
}
@Override
protected void onPooledConnectionReuse(long duration, TimeUnit timeUnit) {
idleCount.decrement();
}
@Override
protected void onPoolReleaseStart() {
pendingRelease.increment();
}
@Override
protected void onPoolAcquireStart() {
pendingAcquire.increment();
}
@Override
protected void onPoolAcquireFailed(long duration, TimeUnit timeUnit, Throwable throwable) {
pendingAcquire.decrement();
}
@Override
protected void onPoolAcquireSuccess(long duration, TimeUnit timeUnit) {
pendingAcquire.decrement();
inUseCount.increment();
}
@Override
protected void onConnectionCloseSuccess(long duration, TimeUnit timeUnit) {
totalConnections.decrement();
}
@Override
protected void onConnectSuccess(long duration, TimeUnit timeUnit) {
totalConnections.increment();
}
public long getInUseCount() {
return inUseCount.longValue();
}
public long getIdleCount() {
return idleCount.longValue();
}
public long getTotalConnections() {
return totalConnections.longValue();
}
public long getPendingAcquire() {
return pendingAcquire.longValue();
}
public long getPendingRelease() {
return pendingRelease.longValue();
}
}