You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/11/27 13:48:11 UTC
svn commit: r1039663 - in /james/server/trunk:
netty-socket/src/main/java/org/apache/james/socket/
pop3server/src/main/java/org/apache/james/pop3server/jmx/
smtpserver/src/main/java/org/apache/james/smtpserver/
smtpserver/src/main/java/org/apache/james...
Author: norman
Date: Sat Nov 27 12:48:10 2010
New Revision: 1039663
URL: http://svn.apache.org/viewvc?rev=1039663&view=rev
Log:
Expose handler stats for SMTP and POP3. See JAMES-1057
Added:
james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerResultJMXMonitor.java
- copied, changed from r1039642, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerResultJMXMonitor.java
james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerStats.java
james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractConnectHandlerResultJMXMonitor.java
james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractLineHandlerResultJMXMonitor.java
james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/CommandHandlerStatsMBean.java
james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/ConnectHandlerStats.java
james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/HandlerStatsMBean.java
james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/LineHandlerStats.java
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/CommandHandlerResultJMXMonitor.java
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/ConnectHandlerResultJMXMonitor.java
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/LineHandlerResultJMXMonitor.java
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStats.java
james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStatsMBean.java
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/CommandHandlerResultJMXMonitor.java
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/ConnectHandlerResultJMXMonitor.java
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookResultJMXMonitor.java
- copied, changed from r1039642, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookResultJMXMonitor.java
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStats.java
- copied, changed from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStats.java
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStatsMBean.java
- copied, changed from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStatsMBean.java
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/LineHandlerResultJMXMonitor.java
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStats.java
- copied, changed from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStats.java
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStatsMBean.java
- copied, changed from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStatsMBean.java
Removed:
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerResultJMXMonitor.java
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStats.java
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStatsMBean.java
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookResultJMXMonitor.java
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStats.java
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStatsMBean.java
Copied: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerResultJMXMonitor.java (from r1039642, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerResultJMXMonitor.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerResultJMXMonitor.java?p2=james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerResultJMXMonitor.java&p1=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerResultJMXMonitor.java&r1=1039642&r2=1039663&rev=1039663&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerResultJMXMonitor.java (original)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -16,30 +16,27 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.smtpserver;
+package org.apache.james.socket;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.james.protocols.api.CommandHandler;
+import org.apache.james.protocols.api.CommandHandlerResultHandler;
import org.apache.james.protocols.api.ExtensibleHandler;
import org.apache.james.protocols.api.ProtocolSession;
import org.apache.james.protocols.api.Response;
-import org.apache.james.protocols.api.CommandHandlerResultHandler;
import org.apache.james.protocols.api.WiringException;
-import org.apache.james.protocols.smtp.SMTPResponse;
-import org.apache.james.protocols.smtp.SMTPSession;
/**
* Expose JMX statistics for {@link CommandHandler}
*
*/
-public class CommandHandlerResultJMXMonitor implements CommandHandlerResultHandler<SMTPResponse, SMTPSession>, ExtensibleHandler {
+public abstract class AbstractCommandHandlerResultJMXMonitor<R extends Response, S extends ProtocolSession> implements CommandHandlerResultHandler<R, S>, ExtensibleHandler {
- private Map<String, CommandHandlerStats> cStats = new HashMap<String, CommandHandlerStats>();
+ private Map<String, AbstractCommandHandlerStats<R>> cStats = new HashMap<String, AbstractCommandHandlerStats<R>>();
@@ -47,9 +44,9 @@ public class CommandHandlerResultJMXMoni
* (non-Javadoc)
* @see org.apache.james.protocols.api.CommanHandlerResultHandler#onResponse(org.apache.james.protocols.api.ProtocolSession, org.apache.james.protocols.api.Response, long, org.apache.james.protocols.api.CommandHandler)
*/
- public Response onResponse(ProtocolSession session, SMTPResponse response, long executionTime, CommandHandler<SMTPSession> handler) {
+ public Response onResponse(ProtocolSession session, R response, long executionTime, CommandHandler<S> handler) {
String name = handler.getClass().getName();
- CommandHandlerStats stats = cStats.get(name);
+ AbstractCommandHandlerStats<R> stats = cStats.get(name);
if (stats != null) {
stats.increment(response);
}
@@ -79,8 +76,7 @@ public class CommandHandlerResultJMXMoni
if (equals(c) == false) {
String cName = c.getClass().getName();
try {
- Collection<String> col = c.getImplCommands();
- cStats.put(cName, new CommandHandlerStats(cName, col.toArray(new String[col.size()])));
+ cStats.put(cName, createCommandHandlerStats(c));
} catch (Exception e) {
throw new WiringException("Unable to wire Hooks", e);
}
@@ -88,5 +84,7 @@ public class CommandHandlerResultJMXMoni
}
}
}
+
+ protected abstract AbstractCommandHandlerStats<R> createCommandHandlerStats(CommandHandler<S> handler) throws Exception;
}
Added: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerStats.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerStats.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerStats.java (added)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractCommandHandlerStats.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,115 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.socket;
+
+import java.lang.management.ManagementFactory;
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MBeanRegistrationException;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectName;
+import javax.management.StandardMBean;
+
+import org.apache.james.lifecycle.Disposable;
+import org.apache.james.protocols.api.CommandHandler;
+import org.apache.james.protocols.api.Response;
+
+/**
+ * Expose statistics for {@link CommandHandler} via JMX
+ *
+ */
+public abstract class AbstractCommandHandlerStats<R extends Response> extends StandardMBean implements CommandHandlerStatsMBean, Disposable {
+
+ private AtomicLong all = new AtomicLong(0);
+ private AtomicLong disconnect = new AtomicLong();
+
+ private String name;
+ private String handlerName;
+ private MBeanServer mbeanserver;
+ private String[] commands;
+
+ public AbstractCommandHandlerStats(Class<?> jmxClass, String jmxPath, String handlerName, String[] commands) throws NotCompliantMBeanException, MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException {
+ super(jmxClass);
+ this.handlerName = handlerName;
+ this.commands = commands;
+
+ name = jmxPath + ",handler=commandhandler,commandhandler=" + handlerName;
+ mbeanserver = ManagementFactory.getPlatformMBeanServer();
+ ObjectName baseObjectName = new ObjectName(name);
+ mbeanserver.registerMBean(this, baseObjectName);
+ }
+
+
+ public void increment(R response) {
+ if (response.isEndSession()) {
+ disconnect.incrementAndGet();
+ }
+
+ all.incrementAndGet();
+ incrementStats(response);
+ }
+
+ protected abstract void incrementStats(R response);
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.smtpserver.CommandHandlerStatsMBean#getAll()
+ */
+ public long getAll() {
+ return all.get();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.smtpserver.CommandHandlerStatsMBean#getName()
+ */
+ public String getName() {
+ return handlerName;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.lifecycle.Disposable#dispose()
+ */
+ public void dispose() {
+ try {
+ mbeanserver.unregisterMBean(new ObjectName(name));
+ } catch (Exception e) {
+ // ignore here;
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.smtpserver.CommandHandlerStatsMBean#getCommands()
+ */
+ public String[] getCommands() {
+ return commands;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.socket.HandlerStatsMBean#getDisconnect()
+ */
+ public long getDisconnect() {
+ return disconnect.get();
+ }
+}
Added: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractConnectHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractConnectHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractConnectHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractConnectHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,98 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.socket;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.protocols.api.ConnectHandler;
+import org.apache.james.protocols.api.ConnectHandlerResultHandler;
+import org.apache.james.protocols.api.ExtensibleHandler;
+import org.apache.james.protocols.api.ProtocolSession;
+import org.apache.james.protocols.api.WiringException;
+
+public abstract class AbstractConnectHandlerResultJMXMonitor<S extends ProtocolSession> implements ConnectHandlerResultHandler<S>, ExtensibleHandler, Configurable{
+
+ private Map<String, ConnectHandlerStats> cStats = new HashMap<String, ConnectHandlerStats>();
+ private String jmxPath;
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.protocols.api.ConnectHandlerResultHandler#onResponse(org.apache.james.protocols.api.ProtocolSession, boolean, long, org.apache.james.protocols.api.ConnectHandler)
+ */
+ public boolean onResponse(ProtocolSession session, boolean response, long executionTime, ConnectHandler<S> handler) {
+ cStats.get(handler.getClass().getName()).increment(response);
+ return response;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.protocols.api.ExtensibleHandler#getMarkerInterfaces()
+ */
+ public List<Class<?>> getMarkerInterfaces() {
+ List<Class<?>> marker = new ArrayList<Class<?>>();
+ marker.add(ConnectHandler.class);
+
+ return marker;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.protocols.api.ExtensibleHandler#wireExtensions(java.lang.Class, java.util.List)
+ */
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ public void wireExtensions(Class<?> interfaceName, List<?> extension) throws WiringException {
+ if (interfaceName.equals(ConnectHandler.class)) {
+ // add stats for all hooks
+ for (int i = 0; i < extension.size(); i++ ) {
+ ConnectHandler c = (ConnectHandler) extension.get(i);
+ if (equals(c) == false) {
+ String cName = c.getClass().getName();
+ try {
+ cStats.put(cName, new ConnectHandlerStats(jmxPath, cName));
+ } catch (Exception e) {
+ throw new WiringException("Unable to wire Hooks", e);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Return the default JMXPath to use if none is configured
+ *
+ * @return defaultJMXPath
+ */
+ protected abstract String getDefaultJMXPath();
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.lifecycle.Configurable#configure(org.apache.commons.configuration.HierarchicalConfiguration)
+ */
+ public void configure(HierarchicalConfiguration config) throws ConfigurationException {
+ this.jmxPath = config.getString("jmxPath", getDefaultJMXPath());
+ }
+
+
+}
Added: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractLineHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractLineHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractLineHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/AbstractLineHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,98 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.socket;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.protocols.api.ExtensibleHandler;
+import org.apache.james.protocols.api.LineHandler;
+import org.apache.james.protocols.api.LineHandlerResultHandler;
+import org.apache.james.protocols.api.ProtocolSession;
+import org.apache.james.protocols.api.WiringException;
+
+public abstract class AbstractLineHandlerResultJMXMonitor<S extends ProtocolSession> implements LineHandlerResultHandler<S>, ExtensibleHandler, Configurable{
+
+ private Map<String, LineHandlerStats> lStats = new HashMap<String, LineHandlerStats>();
+ private String jmxPath;
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.protocols.api.LineHandlerResultHandler#onResponse(org.apache.james.protocols.api.ProtocolSession, boolean, long, org.apache.james.protocols.api.LineHandler)
+ */
+ public boolean onResponse(ProtocolSession session, boolean response, long executionTime, LineHandler<S> handler) {
+ lStats.get(handler.getClass().getName()).increment(response);
+ return response;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.protocols.api.ExtensibleHandler#getMarkerInterfaces()
+ */
+ public List<Class<?>> getMarkerInterfaces() {
+ List<Class<?>> marker = new ArrayList<Class<?>>();
+ marker.add(LineHandler.class);
+ return marker;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.protocols.api.ExtensibleHandler#wireExtensions(java.lang.Class, java.util.List)
+ */
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ public void wireExtensions(Class<?> interfaceName, List<?> extension) throws WiringException {
+
+ if (interfaceName.equals(LineHandler.class)) {
+ // add stats for all hooks
+ for (int i = 0; i < extension.size(); i++ ) {
+ LineHandler c = (LineHandler) extension.get(i);
+ if (equals(c) == false) {
+ String cName = c.getClass().getName();
+ try {
+ lStats.put(cName, new LineHandlerStats(jmxPath, cName));
+ } catch (Exception e) {
+ throw new WiringException("Unable to wire Hooks", e);
+ }
+ }
+ }
+ }
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.lifecycle.Configurable#configure(org.apache.commons.configuration.HierarchicalConfiguration)
+ */
+ public void configure(HierarchicalConfiguration config) throws ConfigurationException {
+ this.jmxPath = config.getString("jmxPath", getDefaultJMXPath());
+
+ }
+
+ /**
+ * Return default JMX Path if none is configured
+ *
+ * @return defaultJMXPath
+ */
+ protected abstract String getDefaultJMXPath();
+}
Added: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/CommandHandlerStatsMBean.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/CommandHandlerStatsMBean.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/CommandHandlerStatsMBean.java (added)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/CommandHandlerStatsMBean.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,37 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.socket;
+
+import org.apache.james.socket.HandlerStatsMBean;
+
+
+/**
+ * JMX MBean for CommandHandler
+ *
+ */
+public interface CommandHandlerStatsMBean extends HandlerStatsMBean{
+
+
+ /**
+ * Return all implemented commands by this handler
+ *
+ * @return commands
+ */
+ public String[] getCommands();
+}
Added: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/ConnectHandlerStats.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/ConnectHandlerStats.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/ConnectHandlerStats.java (added)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/ConnectHandlerStats.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,95 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.socket;
+
+import java.lang.management.ManagementFactory;
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MBeanRegistrationException;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectName;
+import javax.management.StandardMBean;
+
+import org.apache.james.lifecycle.Disposable;
+
+public class ConnectHandlerStats extends StandardMBean implements HandlerStatsMBean, Disposable{
+
+ private String name;
+ private String handlerName;
+ private MBeanServer mbeanserver;
+ private AtomicLong disconnect = new AtomicLong(0);
+ private AtomicLong all = new AtomicLong(0);
+
+ public ConnectHandlerStats(String jmxPath, String handlerName) throws NotCompliantMBeanException, MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException {
+ super(HandlerStatsMBean.class);
+ this.handlerName = handlerName;
+
+ this.name = jmxPath + ",handler=connecthandler,connecthandler=" + handlerName;
+ mbeanserver = ManagementFactory.getPlatformMBeanServer();
+ ObjectName baseObjectName = new ObjectName(name);
+ mbeanserver.registerMBean(this, baseObjectName);
+ }
+
+ public void increment(boolean result) {
+ if (result) {
+ disconnect .incrementAndGet();
+ }
+ all.incrementAndGet();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.socket.HandlerStatsMBean#getAll()
+ */
+ public long getAll() {
+ return all.get();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.socket.HandlerStatsMBean#getName()
+ */
+ public String getName() {
+ return handlerName;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.socket.HandlerStatsMBean#getDisconnect()
+ */
+ public long getDisconnect() {
+ return disconnect.get();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.lifecycle.Disposable#dispose()
+ */
+ public void dispose() {
+ try {
+ mbeanserver.unregisterMBean(new ObjectName(name));
+ } catch (Exception e) {
+ // ignore here;
+ }
+ }
+
+}
Added: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/HandlerStatsMBean.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/HandlerStatsMBean.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/HandlerStatsMBean.java (added)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/HandlerStatsMBean.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,47 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.socket;
+
+public interface HandlerStatsMBean {
+
+
+ /**
+ * Return the count of all processed transactions by the handler
+ *
+ * @return all
+ */
+ public long getAll();
+
+ /**
+ * Return the name of the handler
+ *
+ * @return name
+ */
+ public String getName();
+
+
+
+ /**
+ * Return how often the Handler issued a disconnect
+ *
+ * @return disconnect
+ */
+ public long getDisconnect();
+
+}
Added: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/LineHandlerStats.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/LineHandlerStats.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/LineHandlerStats.java (added)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/LineHandlerStats.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,95 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.socket;
+
+import java.lang.management.ManagementFactory;
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MBeanRegistrationException;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectName;
+import javax.management.StandardMBean;
+
+import org.apache.james.lifecycle.Disposable;
+
+public class LineHandlerStats extends StandardMBean implements HandlerStatsMBean, Disposable{
+
+ private String name;
+ private String handlerName;
+ private MBeanServer mbeanserver;
+ private AtomicLong disconnect = new AtomicLong(0);
+ private AtomicLong all = new AtomicLong(0);
+
+ public LineHandlerStats(String jmxPath, String handlerName) throws NotCompliantMBeanException, MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException {
+ super(HandlerStatsMBean.class);
+ this.handlerName = handlerName;
+
+ this.name = jmxPath + ",handler=linehandler,linehandler=" + handlerName;
+ mbeanserver = ManagementFactory.getPlatformMBeanServer();
+ ObjectName baseObjectName = new ObjectName(name);
+ mbeanserver.registerMBean(this, baseObjectName);
+ }
+
+ public void increment(boolean result) {
+ if (result) {
+ disconnect .incrementAndGet();
+ }
+ all.incrementAndGet();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.socket.HandlerStatsMBean#getAll()
+ */
+ public long getAll() {
+ return all.get();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.socket.HandlerStatsMBean#getName()
+ */
+ public String getName() {
+ return handlerName;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.socket.HandlerStatsMBean#getDisconnect()
+ */
+ public long getDisconnect() {
+ return disconnect.get();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.lifecycle.Disposable#dispose()
+ */
+ public void dispose() {
+ try {
+ mbeanserver.unregisterMBean(new ObjectName(name));
+ } catch (Exception e) {
+ // ignore here;
+ }
+ }
+
+}
Added: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/CommandHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/CommandHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/CommandHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/CommandHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,60 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.pop3server.jmx;
+
+import java.util.Collection;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.pop3server.POP3Response;
+import org.apache.james.pop3server.POP3Session;
+import org.apache.james.protocols.api.CommandHandler;
+import org.apache.james.socket.AbstractCommandHandlerResultJMXMonitor;
+import org.apache.james.socket.AbstractCommandHandlerStats;
+
+/**
+ * Gather JMX stats for {@link CommandHandler}
+ *
+ */
+public class CommandHandlerResultJMXMonitor extends AbstractCommandHandlerResultJMXMonitor<POP3Response, POP3Session> implements Configurable{
+
+ private String jmxPath;
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.socket.AbstractCommandHandlerResultJMXMonitor#createCommandHandlerStats(org.apache.james.protocols.api.CommandHandler)
+ */
+ protected AbstractCommandHandlerStats<POP3Response> createCommandHandlerStats(CommandHandler<POP3Session> handler) throws Exception {
+ Collection<String> col = handler.getImplCommands();
+ String cName = handler.getClass().getName();
+
+ return new POP3CommandHandlerStats(jmxPath, cName, col.toArray(new String[col.size()]));
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.lifecycle.Configurable#configure(org.apache.commons.configuration.HierarchicalConfiguration)
+ */
+ public void configure(HierarchicalConfiguration config) throws ConfigurationException {
+ this.jmxPath = config.getString("jmxPath", "org.apache.james:type=server,name=pop3server");
+ }
+}
Added: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/ConnectHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/ConnectHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/ConnectHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/ConnectHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,34 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.pop3server.jmx;
+
+import org.apache.james.pop3server.POP3Session;
+import org.apache.james.socket.AbstractConnectHandlerResultJMXMonitor;
+
+public class ConnectHandlerResultJMXMonitor extends AbstractConnectHandlerResultJMXMonitor<POP3Session>{
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.socket.AbstractConnectHandlerResultJMXMonitor#getDefaultJMXPath()
+ */
+ protected String getDefaultJMXPath() {
+ return "org.apache.james:type=server,name=pop3server";
+ }
+
+}
Added: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/LineHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/LineHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/LineHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/LineHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,31 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.pop3server.jmx;
+
+import org.apache.james.pop3server.POP3Session;
+import org.apache.james.socket.AbstractLineHandlerResultJMXMonitor;
+
+public class LineHandlerResultJMXMonitor extends AbstractLineHandlerResultJMXMonitor<POP3Session>{
+
+ @Override
+ protected String getDefaultJMXPath() {
+ return "org.apache.james:type=server,name=pop3server";
+ }
+
+}
Added: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStats.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStats.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStats.java (added)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStats.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,69 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.pop3server.jmx;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.MBeanRegistrationException;
+import javax.management.MalformedObjectNameException;
+import javax.management.NotCompliantMBeanException;
+
+import org.apache.james.pop3server.POP3Response;
+import org.apache.james.socket.AbstractCommandHandlerStats;
+
+public class POP3CommandHandlerStats extends AbstractCommandHandlerStats<POP3Response> implements POP3CommandHandlerStatsMBean{
+
+ private AtomicLong error = new AtomicLong(0);
+ private AtomicLong ok = new AtomicLong(0);
+
+ public POP3CommandHandlerStats(String jmxPath, String handlerName, String[] commands) throws NotCompliantMBeanException, MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException {
+ super(POP3CommandHandlerStatsMBean.class, jmxPath, handlerName, commands);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.socket.AbstractCommandHandlerStats#incrementStats(org.apache.james.protocols.api.Response)
+ */
+ protected void incrementStats(POP3Response response) {
+ String code = response.getRetCode();
+ if (POP3Response.OK_RESPONSE.equals(code)) {
+ ok.incrementAndGet();
+ } else if (POP3Response.ERR_RESPONSE.equals(code)) {
+ error.incrementAndGet();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.pop3server.jmx.POP3CommandHandlerStatsMBean#getError()
+ */
+ public long getError() {
+ return error.get();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.pop3server.jmx.POP3CommandHandlerStatsMBean#getOk()
+ */
+ public long getOk() {
+ return ok.get();
+ }
+
+}
Added: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStatsMBean.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStatsMBean.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStatsMBean.java (added)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStatsMBean.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,41 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.pop3server.jmx;
+
+import org.apache.james.socket.CommandHandlerStatsMBean;
+
+public interface POP3CommandHandlerStatsMBean extends CommandHandlerStatsMBean{
+
+ /**
+ * Return the count of errors returned by the handler
+ *
+ * @return error
+ */
+ public long getError();
+
+
+
+ /**
+ * Return the count of successful handling returned by the handler
+ *
+ * @return tempCount
+ */
+ public long getOk();
+
+}
Added: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/CommandHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/CommandHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/CommandHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/CommandHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,62 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.smtpserver.jmx;
+
+import java.util.Collection;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.protocols.api.CommandHandler;
+import org.apache.james.protocols.smtp.SMTPResponse;
+import org.apache.james.protocols.smtp.SMTPSession;
+import org.apache.james.socket.AbstractCommandHandlerResultJMXMonitor;
+import org.apache.james.socket.AbstractCommandHandlerStats;
+
+/**
+ * Expose JMX statistics for {@link CommandHandler}
+ *
+ */
+public class CommandHandlerResultJMXMonitor extends AbstractCommandHandlerResultJMXMonitor<SMTPResponse, SMTPSession> implements Configurable {
+
+ private String jmxPath;
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.socket.AbstractCommandHandlerResultJMXMonitor#createCommandHandlerStats(org.apache.james.protocols.api.CommandHandler)
+ */
+ protected AbstractCommandHandlerStats<SMTPResponse> createCommandHandlerStats(CommandHandler<SMTPSession> handler) throws Exception{
+ Collection<String> col = handler.getImplCommands();
+ String cName = handler.getClass().getName();
+
+ return new SMTPCommandHandlerStats(jmxPath, cName, col.toArray(new String[col.size()]));
+ }
+
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.lifecycle.Configurable#configure(org.apache.commons.configuration.HierarchicalConfiguration)
+ */
+ public void configure(HierarchicalConfiguration config) throws ConfigurationException {
+ this.jmxPath = config.getString("jmxPath", "org.apache.james:type=server,name=smtpserver");
+ }
+
+}
Added: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/ConnectHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/ConnectHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/ConnectHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/ConnectHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,35 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.smtpserver.jmx;
+
+import org.apache.james.protocols.smtp.SMTPSession;
+import org.apache.james.socket.AbstractConnectHandlerResultJMXMonitor;
+
+public class ConnectHandlerResultJMXMonitor extends AbstractConnectHandlerResultJMXMonitor<SMTPSession>{
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.socket.AbstractConnectHandlerResultJMXMonitor#getDefaultJMXPath()
+ */
+ protected String getDefaultJMXPath() {
+ return "org.apache.james:type=server,name=smtpserver";
+ }
+
+}
Copied: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookResultJMXMonitor.java (from r1039642, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookResultJMXMonitor.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookResultJMXMonitor.java?p2=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookResultJMXMonitor.java&p1=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookResultJMXMonitor.java&r1=1039642&r2=1039663&rev=1039663&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookResultJMXMonitor.java (original)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.smtpserver;
+package org.apache.james.smtpserver.jmx;
import java.util.ArrayList;
import java.util.HashMap;
Copied: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStats.java (from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStats.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStats.java?p2=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStats.java&p1=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStats.java&r1=1036079&r2=1039663&rev=1039663&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStats.java (original)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStats.java Sat Nov 27 12:48:10 2010
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.smtpserver;
+package org.apache.james.smtpserver.jmx;
import java.lang.management.ManagementFactory;
import java.util.concurrent.atomic.AtomicLong;
Copied: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStatsMBean.java (from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStatsMBean.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStatsMBean.java?p2=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStatsMBean.java&p1=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStatsMBean.java&r1=1036079&r2=1039663&rev=1039663&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/HookStatsMBean.java (original)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/HookStatsMBean.java Sat Nov 27 12:48:10 2010
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.smtpserver;
+package org.apache.james.smtpserver.jmx;
/**
Added: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/LineHandlerResultJMXMonitor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/LineHandlerResultJMXMonitor.java?rev=1039663&view=auto
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/LineHandlerResultJMXMonitor.java (added)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/LineHandlerResultJMXMonitor.java Sat Nov 27 12:48:10 2010
@@ -0,0 +1,35 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.smtpserver.jmx;
+
+import org.apache.james.protocols.smtp.SMTPSession;
+import org.apache.james.socket.AbstractLineHandlerResultJMXMonitor;
+
+public class LineHandlerResultJMXMonitor extends AbstractLineHandlerResultJMXMonitor<SMTPSession>{
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.socket.AbstractLineHandlerResultJMXMonitor#getDefaultJMXPath()
+ */
+ protected String getDefaultJMXPath() {
+ return "org.apache.james:type=server,name=smtpserver";
+ }
+
+}
Copied: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStats.java (from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStats.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStats.java?p2=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStats.java&p1=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStats.java&r1=1036079&r2=1039663&rev=1039663&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStats.java (original)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStats.java Sat Nov 27 12:48:10 2010
@@ -16,66 +16,34 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.smtpserver;
+package org.apache.james.smtpserver.jmx;
-import java.lang.management.ManagementFactory;
import java.util.concurrent.atomic.AtomicLong;
import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
-import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
-import javax.management.ObjectName;
-import javax.management.StandardMBean;
import org.apache.james.lifecycle.Disposable;
import org.apache.james.protocols.api.CommandHandler;
import org.apache.james.protocols.smtp.SMTPResponse;
+import org.apache.james.socket.AbstractCommandHandlerStats;
/**
* Expose statistics for {@link CommandHandler} via JMX
*
*/
-public class CommandHandlerStats extends StandardMBean implements CommandHandlerStatsMBean, Disposable {
+public class SMTPCommandHandlerStats extends AbstractCommandHandlerStats<SMTPResponse> implements SMTPCommandHandlerStatsMBean, Disposable {
private AtomicLong temp = new AtomicLong(0);
private AtomicLong perm = new AtomicLong(0);
private AtomicLong ok = new AtomicLong(0);
- private AtomicLong all = new AtomicLong(0);
-
- private String name;
- private String handlerName;
- private MBeanServer mbeanserver;
- private String[] commands;
-
- public CommandHandlerStats(String handlerName, String[] commands) throws NotCompliantMBeanException, MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException {
- super(CommandHandlerStatsMBean.class);
- this.handlerName = handlerName;
- this.commands = commands;
-
- name = "org.apache.james:type=server,name=smtpserver,handler=commandhandler,commandhandler=" + handlerName;
- mbeanserver = ManagementFactory.getPlatformMBeanServer();
- ObjectName baseObjectName = new ObjectName(name);
- mbeanserver.registerMBean(this, baseObjectName);
- }
-
- public void increment(SMTPResponse response) {
- try {
- String code = response.getRetCode();
- char c = code.charAt(0) ;
- if (c == '5') {
- perm.incrementAndGet();
- } else if (c == '4') {
- temp.incrementAndGet();
- } else if ( c == '2' || c == '3') {
- ok.incrementAndGet();
- }
- all.incrementAndGet();
- } catch (NumberFormatException e) {
- // should never happen
- }
+
+ public SMTPCommandHandlerStats(String jmxPath, String handlerName, String[] commands) throws NotCompliantMBeanException, MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException {
+ super(SMTPCommandHandlerStatsMBean.class, jmxPath, handlerName, commands);
}
+
/*
* (non-Javadoc)
@@ -101,39 +69,26 @@ public class CommandHandlerStats extends
return ok.get();
}
- /*
- * (non-Javadoc)
- * @see org.apache.james.smtpserver.CommandHandlerStatsMBean#getAll()
- */
- public long getAll() {
- return all.get();
- }
-
- /*
- * (non-Javadoc)
- * @see org.apache.james.smtpserver.CommandHandlerStatsMBean#getName()
- */
- public String getName() {
- return handlerName;
- }
/*
* (non-Javadoc)
- * @see org.apache.james.lifecycle.Disposable#dispose()
+ * @see org.apache.james.socket.AbstractCommandHandlerStats#incrementStats(org.apache.james.protocols.api.Response)
*/
- public void dispose() {
+ protected void incrementStats(SMTPResponse response) {
try {
- mbeanserver.unregisterMBean(new ObjectName(name));
- } catch (Exception e) {
- // ignore here;
- }
+ String code = response.getRetCode();
+ char c = code.charAt(0) ;
+ if (c == '5') {
+ perm.incrementAndGet();
+ } else if (c == '4') {
+ temp.incrementAndGet();
+ } else if ( c == '2' || c == '3') {
+ ok.incrementAndGet();
+ }
+
+ } catch (NumberFormatException e) {
+ // should never happen
+ }
}
- /*
- * (non-Javadoc)
- * @see org.apache.james.smtpserver.CommandHandlerStatsMBean#getCommands()
- */
- public String[] getCommands() {
- return commands;
- }
}
Copied: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStatsMBean.java (from r1036079, james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStatsMBean.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStatsMBean.java?p2=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStatsMBean.java&p1=james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStatsMBean.java&r1=1036079&r2=1039663&rev=1039663&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/CommandHandlerStatsMBean.java (original)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStatsMBean.java Sat Nov 27 12:48:10 2010
@@ -16,14 +16,16 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.smtpserver;
+package org.apache.james.smtpserver.jmx;
+
+import org.apache.james.socket.CommandHandlerStatsMBean;
/**
* JMX MBean for CommandHandler
*
*/
-public interface CommandHandlerStatsMBean {
+public interface SMTPCommandHandlerStatsMBean extends CommandHandlerStatsMBean{
/**
* Return the count of temporary errors returned by the handler
@@ -39,31 +41,13 @@ public interface CommandHandlerStatsMBea
*/
public long getPermantError();
+
+
/**
* Return the count of successful handling returned by the handler
*
* @return tempCount
*/
public long getOk();
-
- /**
- * Return the count of all processed transactions by the handler
- *
- * @return all
- */
- public long getAll();
-
- /**
- * Return the name of the handler
- *
- * @return name
- */
- public String getName();
-
- /**
- * Return all implemented commands by this handler
- *
- * @return commands
- */
- public String[] getCommands();
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org