package org.apereo.cas.monitor;
import org.ldaptive.Connection;
import org.ldaptive.pool.PooledConnectionFactory;
import org.ldaptive.pool.Validator;
import java.util.concurrent.ExecutorService;
/**
* Monitors an ldaptive {@link PooledConnectionFactory}.
*
* @author Marvin S. Addison
* @since 4.0.0
*/
public class PooledLdapConnectionFactoryMonitor extends AbstractPoolMonitor {
/** Source of connections to validate. */
private PooledConnectionFactory connectionFactory;
/** Connection validator. */
private Validator<Connection> validator;
/**
* Creates a new instance that monitors the given pooled connection factory.
*
* @param executorService the executor service
* @param maxWait the max wait
* @param factory Connection factory to monitor.
* @param validator Validates connections from the factory.
*/
public PooledLdapConnectionFactoryMonitor(final ExecutorService executorService,
final int maxWait,
final PooledConnectionFactory factory,
final Validator<Connection> validator) {
super(PooledLdapConnectionFactoryMonitor.class.getSimpleName(), executorService, maxWait);
this.connectionFactory = factory;
this.validator = validator;
}
@Override
protected StatusCode checkPool() throws Exception {
if (this.connectionFactory != null && this.validator != null) {
try(Connection conn = this.connectionFactory.getConnection()) {
return this.validator.validate(conn) ? StatusCode.OK : StatusCode.ERROR;
}
}
return StatusCode.UNKNOWN;
}
@Override
protected int getIdleCount() {
return this.connectionFactory.getConnectionPool().availableCount();
}
@Override
protected int getActiveCount() {
return this.connectionFactory.getConnectionPool().activeCount();
}
}