package com.hwlcn.ldap.ldap.sdk; import java.io.Serializable; import java.util.concurrent.atomic.AtomicLong; import com.hwlcn.core.annotation.Mutable; import com.hwlcn.core.annotation.ThreadSafety; import com.hwlcn.ldap.util.ThreadSafetyLevel; @Mutable() @ThreadSafety(level=ThreadSafetyLevel.MOSTLY_THREADSAFE) public final class LDAPConnectionPoolStatistics implements Serializable { private static final long serialVersionUID = 1493039391352814874L; private final AtomicLong numConnectionsClosedDefunct; private final AtomicLong numConnectionsClosedExpired; private final AtomicLong numConnectionsClosedUnneeded; private final AtomicLong numFailedCheckouts; private final AtomicLong numFailedConnectionAttempts; private final AtomicLong numReleasedValid; private final AtomicLong numSuccessfulCheckouts; private final AtomicLong numSuccessfulCheckoutsAfterWait; private final AtomicLong numSuccessfulCheckoutsNewConnection; private final AtomicLong numSuccessfulCheckoutsWithoutWait; private final AtomicLong numSuccessfulConnectionAttempts; private final AbstractConnectionPool pool; public LDAPConnectionPoolStatistics(final AbstractConnectionPool pool) { this.pool = pool; numSuccessfulConnectionAttempts = new AtomicLong(0L); numFailedConnectionAttempts = new AtomicLong(0L); numConnectionsClosedDefunct = new AtomicLong(0L); numConnectionsClosedExpired = new AtomicLong(0L); numConnectionsClosedUnneeded = new AtomicLong(0L); numSuccessfulCheckouts = new AtomicLong(0L); numSuccessfulCheckoutsAfterWait = new AtomicLong(0L); numSuccessfulCheckoutsNewConnection = new AtomicLong(0L); numSuccessfulCheckoutsWithoutWait = new AtomicLong(0L); numFailedCheckouts = new AtomicLong(0L); numReleasedValid = new AtomicLong(0L); } public void reset() { numSuccessfulConnectionAttempts.set(0L); numFailedConnectionAttempts.set(0L); numConnectionsClosedDefunct.set(0L); numConnectionsClosedExpired.set(0L); numConnectionsClosedUnneeded.set(0L); numSuccessfulCheckouts.set(0L); numSuccessfulCheckoutsAfterWait.set(0L); numSuccessfulCheckoutsNewConnection.set(0L); numSuccessfulCheckoutsWithoutWait.set(0L); numFailedCheckouts.set(0L); numReleasedValid.set(0L); } public long getNumSuccessfulConnectionAttempts() { return numSuccessfulConnectionAttempts.get(); } void incrementNumSuccessfulConnectionAttempts() { numSuccessfulConnectionAttempts.incrementAndGet(); } public long getNumFailedConnectionAttempts() { return numFailedConnectionAttempts.get(); } void incrementNumFailedConnectionAttempts() { numFailedConnectionAttempts.incrementAndGet(); } public long getNumConnectionsClosedDefunct() { return numConnectionsClosedDefunct.get(); } void incrementNumConnectionsClosedDefunct() { numConnectionsClosedDefunct.incrementAndGet(); } public long getNumConnectionsClosedExpired() { return numConnectionsClosedExpired.get(); } void incrementNumConnectionsClosedExpired() { numConnectionsClosedExpired.incrementAndGet(); } public long getNumConnectionsClosedUnneeded() { return numConnectionsClosedUnneeded.get(); } void incrementNumConnectionsClosedUnneeded() { numConnectionsClosedUnneeded.incrementAndGet(); } public long getNumSuccessfulCheckouts() { return numSuccessfulCheckouts.get(); } public long getNumSuccessfulCheckoutsWithoutWaiting() { return numSuccessfulCheckoutsWithoutWait.get(); } public long getNumSuccessfulCheckoutsAfterWaiting() { return numSuccessfulCheckoutsAfterWait.get(); } public long getNumSuccessfulCheckoutsNewConnection() { return numSuccessfulCheckoutsNewConnection.get(); } void incrementNumSuccessfulCheckoutsWithoutWaiting() { numSuccessfulCheckouts.incrementAndGet(); numSuccessfulCheckoutsWithoutWait.incrementAndGet(); } void incrementNumSuccessfulCheckoutsAfterWaiting() { numSuccessfulCheckouts.incrementAndGet(); numSuccessfulCheckoutsAfterWait.incrementAndGet(); } void incrementNumSuccessfulCheckoutsNewConnection() { numSuccessfulCheckouts.incrementAndGet(); numSuccessfulCheckoutsNewConnection.incrementAndGet(); } public long getNumFailedCheckouts() { return numFailedCheckouts.get(); } void incrementNumFailedCheckouts() { numFailedCheckouts.incrementAndGet(); } public long getNumReleasedValid() { return numReleasedValid.get(); } void incrementNumReleasedValid() { numReleasedValid.incrementAndGet(); } public int getNumAvailableConnections() { return pool.getCurrentAvailableConnections(); } public int getMaximumAvailableConnections() { return pool.getMaximumAvailableConnections(); } @Override() public String toString() { final StringBuilder buffer = new StringBuilder(); toString(buffer); return buffer.toString(); } public void toString(final StringBuilder buffer) { final long availableConns = pool.getCurrentAvailableConnections(); final long maxConns = pool.getMaximumAvailableConnections(); final long successfulConns = numSuccessfulConnectionAttempts.get(); final long failedConns = numFailedConnectionAttempts.get(); final long connsClosedDefunct = numConnectionsClosedDefunct.get(); final long connsClosedExpired = numConnectionsClosedExpired.get(); final long connsClosedUnneeded = numConnectionsClosedUnneeded.get(); final long successfulCheckouts = numSuccessfulCheckouts.get(); final long failedCheckouts = numFailedCheckouts.get(); final long releasedValid = numReleasedValid.get(); buffer.append("LDAPConnectionPoolStatistics(numAvailableConnections="); buffer.append(availableConns); buffer.append(", maxAvailableConnections="); buffer.append(maxConns); buffer.append(", numSuccessfulConnectionAttempts="); buffer.append(successfulConns); buffer.append(", numFailedConnectionAttempts="); buffer.append(failedConns); buffer.append(", numConnectionsClosedDefunct="); buffer.append(connsClosedDefunct); buffer.append(", numConnectionsClosedExpired="); buffer.append(connsClosedExpired); buffer.append(", numConnectionsClosedUnneeded="); buffer.append(connsClosedUnneeded); buffer.append(", numSuccessfulCheckouts="); buffer.append(successfulCheckouts); buffer.append(", numFailedCheckouts="); buffer.append(failedCheckouts); buffer.append(", numReleasedValid="); buffer.append(releasedValid); buffer.append(')'); } }