Author: rmannibucau Date: Mon Aug 12 10:57:22 2013 New Revision: 1513101 URL: http://svn.apache.org/r1513101 Log: adding session listener to monitor sessions
Added: commons/sandbox/monitoring/trunk/src/site/markdown/web.md - copied, changed from r1513099, commons/sandbox/monitoring/trunk/src/site/markdown/reporting.md commons/sandbox/monitoring/trunk/web/src/main/java/org/apache/commons/monitoring/web/session/ commons/sandbox/monitoring/trunk/web/src/main/java/org/apache/commons/monitoring/web/session/MonitoringSessionListener.java Modified: commons/sandbox/monitoring/trunk/src/site/site.xml Copied: commons/sandbox/monitoring/trunk/src/site/markdown/web.md (from r1513099, commons/sandbox/monitoring/trunk/src/site/markdown/reporting.md) URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/site/markdown/web.md?p2=commons/sandbox/monitoring/trunk/src/site/markdown/web.md&p1=commons/sandbox/monitoring/trunk/src/site/markdown/reporting.md&r1=1513099&r2=1513101&rev=1513101&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/site/markdown/reporting.md (original) +++ commons/sandbox/monitoring/trunk/src/site/markdown/web.md Mon Aug 12 10:57:22 2013 @@ -16,69 +16,36 @@ KIND, either express or implied. See th specific language governing permissions and limitations under the License. --> -## Reporting module +## Web module -Reporting module provides a lightweight GUI to visualize monitoring information. +Reporting module provides web listener to monitor servlet containers. ## Installation -### The webapp -commons-monitoring-reporting is available as a webapp (.war) so you can just drop it in your servlet container. +Add commons-monitoring-web to your webapp. -Note 1: commons-monitoring-core is not provided and should be in the container. -Note 2: if you use commons-monitoring-jdbc put it in the container too. +## Monitor requests -### Embeded in your web application +Simply add the filter `org.apache.commons.monitoring.web.servlet.MonitoringFilter`: -Just adding commons-monitoring-reporting jar (classifier `classes` if you use maven) in your application -you can embed it. You'll need to update your web.xml to declare the monitoring filter: + <filter> + <filter-name>monitoring-request</filter-name> + <filter-class>org.apache.commons.monitoring.web.servlet.MonitoringFilter</filter-class> + </filter> + <filter-mapping> + <filter-name>monitoring-request</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> - <web-app xmlns="http://java.sun.com/xml/ns/javaee" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" - version="2.5"> +## Monitor sessions - <listener> - <listener-class>org.apache.commons.monitoring.reporting.web.listener.MonitoringListener</listener-class> - </listener> +Simply add the listener `org.apache.commons.monitoring.web.servlet.MonitoringFilter`: - <filter> - <filter-name>Monitoring</filter-name> - <filter-class>org.apache.commons.monitoring.reporting.web.MonitoringController</filter-class> - <init-param> <!-- should match your filter mapping base --> - <param-name>monitoring-mapping</param-name> - <param-value>/monitoring/</param-value> - </init-param> - </filter> + <listener> + <listener-class>org.apache.commons.monitoring.web.servlet.MonitoringFilter</listener-class> + </listener> - <filter-mapping> - <filter-name>Monitoring</filter-name> - <url-pattern>/monitoring/*</url-pattern> - </filter-mapping> - </web-app> +## Accessing results -## Usage - -Once started you'll arrive on the home page which should look like: - - - -By default you have three activated plugins: - -* Report: view to work with counter data -* JMX: access to MBeans (read attribute, invoke operations) -* JVM: basic measure of CPU and used heap memory - -### Report - - - -### JMX - - - - -### JVM - - +If you installed the reporting webapp you should be able to get the result under the report tab. \ No newline at end of file Modified: commons/sandbox/monitoring/trunk/src/site/site.xml URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/site/site.xml?rev=1513101&r1=1513100&r2=1513101&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/site/site.xml (original) +++ commons/sandbox/monitoring/trunk/src/site/site.xml Mon Aug 12 10:57:22 2013 @@ -51,6 +51,7 @@ <item name="Reporting" href="/reporting.html"/> <item name="Plugins" href="/plugins.html"/> <item name="JTA" href="/jta.html"/> + <item name="Web" href="/web.html"/> </menu> </body> </project> Added: commons/sandbox/monitoring/trunk/web/src/main/java/org/apache/commons/monitoring/web/session/MonitoringSessionListener.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/web/src/main/java/org/apache/commons/monitoring/web/session/MonitoringSessionListener.java?rev=1513101&view=auto ============================================================================== --- commons/sandbox/monitoring/trunk/web/src/main/java/org/apache/commons/monitoring/web/session/MonitoringSessionListener.java (added) +++ commons/sandbox/monitoring/trunk/web/src/main/java/org/apache/commons/monitoring/web/session/MonitoringSessionListener.java Mon Aug 12 10:57:22 2013 @@ -0,0 +1,52 @@ +/* + * 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.commons.monitoring.web.session; + +import org.apache.commons.monitoring.Role; +import org.apache.commons.monitoring.counters.Counter; +import org.apache.commons.monitoring.counters.Unit; +import org.apache.commons.monitoring.repositories.Repository; +import org.apache.commons.monitoring.stopwatches.StopWatch; + +import javax.servlet.http.HttpSessionEvent; +import javax.servlet.http.HttpSessionListener; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class MonitoringSessionListener implements HttpSessionListener { + private final Map<String, StopWatch> watches = new ConcurrentHashMap<String, StopWatch>(); + + private final Counter counter; + + public MonitoringSessionListener() { + counter = Repository.INSTANCE.getCounter(new Counter.Key(new Role("session", Unit.UNARY), "session")); + } + + @Override + public void sessionCreated(final HttpSessionEvent httpSessionEvent) { + final StopWatch watch = Repository.INSTANCE.start(counter); + watches.put(httpSessionEvent.getSession().getId(), watch); + } + + @Override + public void sessionDestroyed(final HttpSessionEvent httpSessionEvent) { + final StopWatch watch = watches.remove(httpSessionEvent.getSession().getId()); + if (watch != null) { + watch.stop(); + } + } +}