/*
* oxAuth is available under the MIT License (2008). See http://opensource.org/licenses/MIT for full text.
*
* Copyright (c) 2014, Gluu
*/
package org.xdi.oxauth.service.status.ldap;
import org.gluu.site.ldap.LDAPConnectionProvider;
import org.gluu.site.ldap.persistence.LdapEntryManager;
import org.slf4j.Logger;
import org.xdi.oxauth.service.AppInitializer;
import org.xdi.service.cdi.event.LdapStatusEvent;
import org.xdi.service.cdi.event.Scheduled;
import org.xdi.service.timer.event.TimerEvent;
import org.xdi.service.timer.schedule.TimerSchedule;
import javax.ejb.Asynchronous;
import javax.ejb.DependsOn;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Event;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import javax.inject.Named;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* @author Yuriy Movchan
* @version 0.1, 11/18/2012
*/
@ApplicationScoped
@DependsOn("appInitializer")
@Named
public class LdapStatusTimer {
private final static int DEFAULT_INTERVAL = 60; // 1 minute
@Inject
private Logger log;
@Inject
private Event<TimerEvent> timerEvent;
@Inject
private LdapEntryManager ldapEntryManager;
@Inject @Named(AppInitializer.LDAP_AUTH_ENTRY_MANAGER_NAME)
private List<LdapEntryManager> ldapAuthEntryManagers;
private AtomicBoolean isActive;
public void initTimer() {
log.info("Initializing Ldap Status Timer");
this.isActive = new AtomicBoolean(false);
timerEvent.fire(new TimerEvent(new TimerSchedule(DEFAULT_INTERVAL, DEFAULT_INTERVAL), new LdapStatusEvent(),
Scheduled.Literal.INSTANCE));
}
@Asynchronous
public void process(@Observes @Scheduled LdapStatusEvent ldapStatusEvent) {
if (this.isActive.get()) {
return;
}
if (!this.isActive.compareAndSet(false, true)) {
return;
}
try {
processInt();
} finally {
this.isActive.set(false);
}
}
private void processInt() {
logConnectionProviderStatistic(ldapEntryManager, "connectionProvider", "bindConnectionProvider");
for (int i = 0; i < ldapAuthEntryManagers.size(); i++) {
LdapEntryManager ldapAuthEntryManager = ldapAuthEntryManagers.get(i);
logConnectionProviderStatistic(ldapAuthEntryManager, "authConnectionProvider#" + i, "bindAuthConnectionProvider#" + i);
}
}
public void logConnectionProviderStatistic(LdapEntryManager ldapEntryManager, String connectionProviderName, String bindConnectionProviderName) {
LDAPConnectionProvider ldapConnectionProvider = ldapEntryManager.getLdapOperationService().getConnectionProvider();
LDAPConnectionProvider bindLdapConnectionProvider = ldapEntryManager.getLdapOperationService().getBindConnectionProvider();
if (ldapConnectionProvider == null) {
log.error("{} is empty", connectionProviderName);
} else {
if (ldapConnectionProvider.getConnectionPool() == null) {
log.error("{} is empty", connectionProviderName);
} else {
log.info("{} statistics: {}", connectionProviderName, ldapConnectionProvider.getConnectionPool().getConnectionPoolStatistics());
}
}
if (bindLdapConnectionProvider == null) {
log.error("{} is empty", bindConnectionProviderName);
} else {
if (bindLdapConnectionProvider.getConnectionPool() == null) {
log.error("{} is empty", bindConnectionProviderName);
} else {
log.info("{} statistics: {}", bindConnectionProviderName, bindLdapConnectionProvider.getConnectionPool().getConnectionPoolStatistics());
}
}
}
}