package com.javamonitor.openfire.mbeans;
import static org.jivesoftware.openfire.spi.ConnectionManagerImpl.EXECUTOR_FILTER_NAME;
import java.util.concurrent.ThreadPoolExecutor;
//import org.apache.mina.common.ExecutorThreadModel;
import org.apache.mina.filter.executor.ExecutorFilter;
import org.apache.mina.management.MINAStatCollector;
import org.apache.mina.transport.socket.SocketAcceptor;
//import org.apache.mina.transport.socket.nio.SocketAcceptor;
/**
* A core thread pool mbean implementation.
*
* @author Guus der Kinderen, guus.der.kinderen@gmail.com
*/
public class CoreThreadPool implements CoreThreadPoolMBean {
private final ThreadPoolExecutor executor;
// TODO: replace with IoServiceMBean after updating MINA.
private MINAStatCollector mina;
/**
* Create a new thread pool monitor mbean, giving it the pool to attach to.
*
* @param acceptor
* The pool to attach to.
*/
public CoreThreadPool(final SocketAcceptor acceptor) {
if (acceptor == null) {
throw new NullPointerException("acceptor is null");
}
//ExecutorThreadModel threadModel = (ExecutorThreadModel) acceptor.getDefaultConfig().getThreadModel();
//this.executor = (ThreadPoolExecutor) threadModel.getExecutor();
final ExecutorFilter executorFilter = (ExecutorFilter) acceptor.getFilterChain().get(EXECUTOR_FILTER_NAME);
this.executor = (ThreadPoolExecutor) executorFilter.getExecutor();
this.mina = new MINAStatCollector(acceptor);
}
/**
* Start collecting statistics from this pool.
*/
public void start() {
mina.start();
}
/**
* Stop collecting statistics from this pool.
*/
public void stop() {
mina.stop();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getActiveCount()
*/
public int getActiveCount() {
return executor.getActiveCount();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getCompletedTaskCount()
*/
public long getCompletedTaskCount() {
return executor.getCompletedTaskCount();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getCorePoolSize()
*/
public int getCorePoolSize() {
return executor.getCorePoolSize();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getLargestPoolSize()
*/
public int getLargestPoolSize() {
return executor.getLargestPoolSize();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getMaximumPoolSize()
*/
public int getMaximumPoolSize() {
return executor.getMaximumPoolSize();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getPoolSize()
*/
public int getPoolSize() {
return executor.getPoolSize();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getQueueSize()
*/
public int getQueueSize() {
return executor.getQueue().size();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getTaskCount()
*/
public long getTaskCount() {
return executor.getTaskCount();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getMinaBytesRead()
*/
public long getMinaBytesRead() {
return mina.getBytesRead();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getMinaBytesWritten()
*/
public long getMinaBytesWritten() {
return mina.getBytesWritten();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getMinaMsgRead()
*/
public long getMinaMsgRead() {
return mina.getMsgRead();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getMinaMsgWritten()
*/
public long getMinaMsgWritten() {
return mina.getMsgWritten();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getMinaQueuedEvents()
*/
public long getMinaQueuedEvents() {
return mina.getQueuedEvents();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getMinaScheduledWrites()
*/
public long getMinaScheduledWrites() {
return mina.getScheduledWrites();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getMinaSessionCount()
*/
public long getMinaSessionCount() {
return mina.getSessionCount();
}
/**
* @see com.javamonitor.openfire.mbeans.CoreThreadPoolMBean#getMinaTotalProcessedSessions()
*/
public long getMinaTotalProcessedSessions() {
return mina.getTotalProcessedSessions();
}
}