You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by rm...@apache.org on 2013/10/15 11:15:57 UTC

svn commit: r1532257 - in /commons/sandbox/monitoring/trunk: src/site/markdown/ web/src/main/java/org/apache/commons/monitoring/web/registration/ web/src/main/java/org/apache/commons/monitoring/web/session/ web/src/main/resources/META-INF/ web/src/main...

Author: rmannibucau
Date: Tue Oct 15 09:15:56 2013
New Revision: 1532257

URL: http://svn.apache.org/r1532257
Log:
making web monitoring automatic in a servlet 3 container (but still configurable) + fixing role name of session monitoring (to distinguish between apps

Added:
    commons/sandbox/monitoring/trunk/web/src/main/java/org/apache/commons/monitoring/web/registration/
    commons/sandbox/monitoring/trunk/web/src/main/java/org/apache/commons/monitoring/web/registration/WebMonitoringInitializer.java
    commons/sandbox/monitoring/trunk/web/src/main/resources/META-INF/
    commons/sandbox/monitoring/trunk/web/src/main/resources/META-INF/services/
    commons/sandbox/monitoring/trunk/web/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer
Modified:
    commons/sandbox/monitoring/trunk/src/site/markdown/jta.md
    commons/sandbox/monitoring/trunk/src/site/markdown/web.md
    commons/sandbox/monitoring/trunk/web/src/main/java/org/apache/commons/monitoring/web/session/MonitoringSessionListener.java

Modified: commons/sandbox/monitoring/trunk/src/site/markdown/jta.md
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/site/markdown/jta.md?rev=1532257&r1=1532256&r2=1532257&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/site/markdown/jta.md (original)
+++ commons/sandbox/monitoring/trunk/src/site/markdown/jta.md Tue Oct 15 09:15:56 2013
@@ -35,6 +35,7 @@ to add `commons-monitoring-web` to your 
     </web-app>
 
 Note: you can register it manually using `org.apache.commons.monitoring.gauges.Gauge$LoaderHelper` or `org.apache.commons.monitoring.repositories.Repository#addGauge`.
+Note 2: in a servlet 3 container it is done automatically if `org.apache.commons.monitoring.web.activated` is true (by default)
 
 Then you need to add on the beans which can be enrolled in transactions you want to monitor the annotation
 `org.apache.commons.monitoring.jta.JTAMonitored` (CDI beans) or the interceptor `org.apache.commons.monitoring.jta.JTAInterceptor`

Modified: commons/sandbox/monitoring/trunk/src/site/markdown/web.md
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/site/markdown/web.md?rev=1532257&r1=1532256&r2=1532257&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/site/markdown/web.md (original)
+++ commons/sandbox/monitoring/trunk/src/site/markdown/web.md Tue Oct 15 09:15:56 2013
@@ -37,14 +37,19 @@ Simply add the filter `org.apache.common
         <url-pattern>/*</url-pattern>
     </filter-mapping>
 
+Note: in a servlet 3 container you can simply configure `org.apache.commons.monitoring.web.monitored-urls` to the
+servlet pattern you want to match. If you want to register the `MonitoringFilter` yourself just set the
+init parameter `org.apache.commons.monitoring.web.activated` to false.
+
 ## Monitor sessions
 
 Simply add the listener `org.apache.commons.monitoring.web.servlet.MonitoringFilter`:
 
     <listener>
-      <listener-class>org.apache.commons.monitoring.web.servlet.MonitoringFilter</listener-class>
+      <listener-class>org.apache.commons.monitoring.web.session.MonitoringSessionListener</listener-class>
     </listener>
 
+Note: in a servlet 3 container and if `org.apache.commons.monitoring.web.activated` is not set to false it is added by default.
 
 ## Accessing results
 

Added: commons/sandbox/monitoring/trunk/web/src/main/java/org/apache/commons/monitoring/web/registration/WebMonitoringInitializer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/web/src/main/java/org/apache/commons/monitoring/web/registration/WebMonitoringInitializer.java?rev=1532257&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/web/src/main/java/org/apache/commons/monitoring/web/registration/WebMonitoringInitializer.java (added)
+++ commons/sandbox/monitoring/trunk/web/src/main/java/org/apache/commons/monitoring/web/registration/WebMonitoringInitializer.java Tue Oct 15 09:15:56 2013
@@ -0,0 +1,48 @@
+/*
+ * 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.registration;
+
+import org.apache.commons.monitoring.configuration.Configuration;
+import org.apache.commons.monitoring.web.discovery.GaugeDiscoveryListener;
+import org.apache.commons.monitoring.web.servlet.MonitoringFilter;
+import org.apache.commons.monitoring.web.session.MonitoringSessionListener;
+
+import javax.servlet.DispatcherType;
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import java.util.EnumSet;
+import java.util.Set;
+
+public class WebMonitoringInitializer implements ServletContainerInitializer {
+    @Override
+    public void onStartup(final Set<Class<?>> classes, final ServletContext ctx) throws ServletException {
+        final String activated = ctx.getInitParameter(Configuration.COMMONS_MONITORING_PREFIX + "web.activated");
+        if ("false".equalsIgnoreCase(activated)) {
+            return;
+        }
+
+        ctx.addListener(GaugeDiscoveryListener.class);
+        ctx.addListener(MonitoringSessionListener.class);
+
+        String monitoredUrls = ctx.getInitParameter(Configuration.COMMONS_MONITORING_PREFIX + "web.monitored-urls");
+        if (monitoredUrls == null) {
+            monitoredUrls = "/*";
+        }
+        ctx.addFilter("monitoring-filter", MonitoringFilter.class).addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, monitoredUrls);
+    }
+}

Modified: 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=1532257&r1=1532256&r2=1532257&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/web/src/main/java/org/apache/commons/monitoring/web/session/MonitoringSessionListener.java (original)
+++ commons/sandbox/monitoring/trunk/web/src/main/java/org/apache/commons/monitoring/web/session/MonitoringSessionListener.java Tue Oct 15 09:15:56 2013
@@ -22,19 +22,17 @@ import org.apache.commons.monitoring.cou
 import org.apache.commons.monitoring.repositories.Repository;
 import org.apache.commons.monitoring.stopwatches.StopWatch;
 
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
 import javax.servlet.http.HttpSessionEvent;
 import javax.servlet.http.HttpSessionListener;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
-public class MonitoringSessionListener implements HttpSessionListener {
+public class MonitoringSessionListener implements HttpSessionListener, ServletContextListener {
     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"));
-    }
+    private Counter counter;
 
     @Override
     public void sessionCreated(final HttpSessionEvent httpSessionEvent) {
@@ -49,4 +47,18 @@ public class MonitoringSessionListener i
             watch.stop();
         }
     }
+
+    @Override
+    public void contextInitialized(final ServletContextEvent sce) {
+        String contextPath = sce.getServletContext().getContextPath();
+        if (contextPath == null || contextPath.isEmpty()) {
+            contextPath = "/";
+        }
+        counter = Repository.INSTANCE.getCounter(new Counter.Key(new Role("sessions-" + contextPath, Unit.UNARY), "session"));
+    }
+
+    @Override
+    public void contextDestroyed(final ServletContextEvent sce) {
+        // no-op
+    }
 }

Added: commons/sandbox/monitoring/trunk/web/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/web/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer?rev=1532257&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/web/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer (added)
+++ commons/sandbox/monitoring/trunk/web/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer Tue Oct 15 09:15:56 2013
@@ -0,0 +1 @@
+org.apache.commons.monitoring.web.registration.WebMonitoringInitializer