package org.apereo.cas.monitor.config;
import org.apereo.cas.configuration.CasConfigurationProperties;
import org.apereo.cas.configuration.model.core.monitor.MonitorProperties;
import org.apereo.cas.configuration.support.Beans;
import org.apereo.cas.monitor.Monitor;
import org.apereo.cas.monitor.PooledLdapConnectionFactoryMonitor;
import org.ldaptive.pool.PooledConnectionFactory;
import org.ldaptive.pool.SearchValidator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.concurrent.ThreadPoolExecutorFactoryBean;
import java.util.concurrent.ExecutorService;
/**
* This is {@link LdapMonitorConfiguration}.
*
* @author Misagh Moayyed
* @since 5.0.0
*/
@Configuration("ldapMonitorConfiguration")
@EnableConfigurationProperties(CasConfigurationProperties.class)
public class LdapMonitorConfiguration {
@Autowired
private CasConfigurationProperties casProperties;
@Lazy
@Bean
public ThreadPoolExecutorFactoryBean pooledConnectionFactoryMonitorExecutorService() {
return Beans.newThreadPoolExecutorFactoryBean(casProperties.getMonitor().getLdap().getPool());
}
@Autowired
@Bean
public Monitor pooledLdapConnectionFactoryMonitor(@Qualifier("pooledConnectionFactoryMonitorExecutorService") final ExecutorService executor) {
final MonitorProperties.Ldap ldap = casProperties.getMonitor().getLdap();
final PooledConnectionFactory connectionFactory = Beans.newLdaptivePooledConnectionFactory(ldap);
return new PooledLdapConnectionFactoryMonitor(executor, Long.valueOf(ldap.getMaxWait()).intValue(), connectionFactory, new SearchValidator());
}
}