Wicket Metrics

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/4dbf8eb9
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/4dbf8eb9
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/4dbf8eb9

Branch: refs/heads/master
Commit: 4dbf8eb9829550d4bb26623dc314e7c8e8ec6116
Parents: 6b23ce4
Author: Tobias Soloschenko <[email protected]>
Authored: Thu Mar 10 11:40:39 2016 +0100
Committer: Tobias Soloschenko <[email protected]>
Committed: Wed Mar 16 17:55:08 2016 +0100

----------------------------------------------------------------------
 README                                          |  2 +
 pom.xml                                         | 19 +++++
 wicket-metrics/pom.xml                          | 45 ++++++++++++
 .../apache/wicket/metrics/WicketMetrics.java    | 76 ++++++++++++++++++++
 .../metrics/aspects/ApplicationAspect.java      | 24 +++++++
 .../wicket/metrics/aspects/PageAspect.java      | 25 +++++++
 .../src/main/resources/META-INF/aop.xml         |  8 +++
 7 files changed, 199 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/4dbf8eb9/README
----------------------------------------------------------------------
diff --git a/README b/README
index 436937c..45663f7 100644
--- a/README
+++ b/README
@@ -75,6 +75,7 @@ You will find the source code here:
            |-- wicket-spring
            |-- wicket-util
            |-- wicket-user-guide
+           |-- wicket-metrics
            `-- wicket-velocity
            
 
@@ -117,6 +118,7 @@ Here is a list of projects in this distribution and what 
they do.
  - wicket-eclipse-settings: specifies Eclipse settings for a uniform 
development environment.
    Most notably the formatting rules;
  - wicket-user-guide: the user guide of wicket
+ - wicket-metrics: collects data of a running wicket application
 
 Getting started
 ---------------

http://git-wip-us.apache.org/repos/asf/wicket/blob/4dbf8eb9/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index ff784f4..f4f84a1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -114,6 +114,7 @@
                <module>wicket-bean-validation</module>
                <module>wicket-cdi-1.1</module>
                <module>wicket-user-guide</module>
+               <module>wicket-metrics</module>
        </modules>
        <properties>
                <!-- Encoding -->
@@ -141,6 +142,8 @@
                <objenesis.version>2.2</objenesis.version>
                <!-- do not increase the version - wicket-user-guide requires 
2.2.4 -->
                <grails.version>2.2.4</grails.version>
+               <aspectj.version>1.8.8</aspectj.version>
+               <metrics.version>3.1.2</metrics.version>
        </properties>
        <dependencyManagement>
                <dependencies>
@@ -403,6 +406,12 @@
                                <type>jar</type>
                        </dependency>
                        <dependency>
+                               <groupId>org.apache.wicket</groupId>
+                               <artifactId>wicket-metrics</artifactId>
+                               <version>8.0.0-SNAPSHOT</version>
+                               <type>jar</type>
+                       </dependency>
+                       <dependency>
                                
<groupId>org.apache.wicket.experimental.wicket7</groupId>
                                <artifactId>wicket-atmosphere</artifactId>
                                <version>0.24-SNAPSHOT</version>
@@ -536,6 +545,16 @@
                                        </exclusion>
                                </exclusions>
                        </dependency>
+                       <dependency>
+                               <groupId>org.aspectj</groupId>
+                               <artifactId>aspectjrt</artifactId>
+                               <version>${aspectj.version}</version>
+                       </dependency>
+                       <dependency>
+                               <groupId>io.dropwizard.metrics</groupId>
+                               <artifactId>metrics-core</artifactId>
+                               <version>${metrics.version}</version>
+                       </dependency>
                </dependencies>
        </dependencyManagement>
        <dependencies>

http://git-wip-us.apache.org/repos/asf/wicket/blob/4dbf8eb9/wicket-metrics/pom.xml
----------------------------------------------------------------------
diff --git a/wicket-metrics/pom.xml b/wicket-metrics/pom.xml
new file mode 100644
index 0000000..4ed79f1
--- /dev/null
+++ b/wicket-metrics/pom.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.apache.wicket</groupId>
+               <artifactId>wicket-parent</artifactId>
+               <version>8.0.0-SNAPSHOT</version>
+               <relativePath>../pom.xml</relativePath>
+       </parent>
+       <artifactId>wicket-metrics</artifactId>
+       <packaging>jar</packaging>
+       <name>Wicket Metrics</name>
+       <description>
+               Wicket’s implementation to show metric information
+               about web applications build on the web framework.
+       </description>
+       <dependencies>
+               <dependency>
+                       <groupId>org.aspectj</groupId>
+                       <artifactId>aspectjrt</artifactId>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>io.dropwizard.metrics</groupId>
+                       <artifactId>metrics-core</artifactId>
+               </dependency>
+       </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/wicket/blob/4dbf8eb9/wicket-metrics/src/main/java/org/apache/wicket/metrics/WicketMetrics.java
----------------------------------------------------------------------
diff --git 
a/wicket-metrics/src/main/java/org/apache/wicket/metrics/WicketMetrics.java 
b/wicket-metrics/src/main/java/org/apache/wicket/metrics/WicketMetrics.java
new file mode 100644
index 0000000..26314f0
--- /dev/null
+++ b/wicket-metrics/src/main/java/org/apache/wicket/metrics/WicketMetrics.java
@@ -0,0 +1,76 @@
+package org.apache.wicket.metrics;
+
+import com.codahale.metrics.JmxReporter;
+import com.codahale.metrics.MetricRegistry;
+
+/**
+ * Base aspect provides access to the metric registry
+ * 
+ * @author Tobias Soloschenko
+ *
+ */
+public class WicketMetrics
+{
+
+       private static MetricRegistry metricRegistry;
+
+       private static boolean enabled = true;
+
+       private static final String JMX_PREFIX = "ApacheWicket/";
+
+       /**
+        * Gets the metric registry
+        * 
+        * @return the metric registry
+        */
+       public static MetricRegistry getMetricRegistry()
+       {
+               if (metricRegistry == null)
+               {
+                       metricRegistry = new MetricRegistry();
+               }
+               return metricRegistry;
+       }
+
+
+       /**
+        * Marks the meter with the given name
+        * 
+        * @param name
+        *            the name of the meter to be marked
+        */
+       protected void mark(String name)
+       {
+               if (WicketMetrics.enabled)
+               {
+                       getMetricRegistry().meter(JMX_PREFIX + name).mark();
+               }
+       }
+
+       /**
+        * Starts the jmx reporter
+        */
+       public static void startJmxReporter()
+       {
+               JmxReporter.forRegistry(getMetricRegistry()).build().start();
+       }
+
+       /**
+        * Stops the jmx reporter
+        */
+       public static void stopJmxReporter()
+       {
+               JmxReporter.forRegistry(getMetricRegistry()).build().stop();
+       }
+
+       /**
+        * If the metrics should be enabled
+        * 
+        * @param enabled
+        *            if the metrics should be enabled
+        */
+       public static void setEnabled(boolean enabled)
+       {
+               WicketMetrics.enabled = enabled;
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/4dbf8eb9/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/ApplicationAspect.java
----------------------------------------------------------------------
diff --git 
a/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/ApplicationAspect.java
 
b/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/ApplicationAspect.java
new file mode 100644
index 0000000..2f56e50
--- /dev/null
+++ 
b/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/ApplicationAspect.java
@@ -0,0 +1,24 @@
+package org.apache.wicket.metrics.aspects;
+
+import org.apache.wicket.metrics.WicketMetrics;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+
+/**
+ * Aspect to handle basic web application information
+ * 
+ * @author Tobias Soloschenko
+ */
+@Aspect
+public class ApplicationAspect extends WicketMetrics
+{
+
+       /**
+        * Collects data how often a request has been made against the web app
+        */
+       @Before("call(* 
org.apache.wicket.protocol.http.WicketFilter.processRequest(..))")
+       public void beforeRequestProcessed()
+       {
+               mark("core/application/request");
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/4dbf8eb9/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/PageAspect.java
----------------------------------------------------------------------
diff --git 
a/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/PageAspect.java
 
b/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/PageAspect.java
new file mode 100644
index 0000000..4e85a36
--- /dev/null
+++ 
b/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/PageAspect.java
@@ -0,0 +1,25 @@
+package org.apache.wicket.metrics.aspects;
+
+import org.apache.wicket.metrics.WicketMetrics;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+
+/**
+ * Collects basic information about pages
+ * 
+ * @author Tobias Soloschenko
+ *
+ */
+@Aspect
+public class PageAspect extends WicketMetrics
+{
+
+       /**
+        * Collects data how often a pages has been rendered
+        */
+       @Before("target(org.apache.wicket.Page+) && call(* onRender(..))")
+       public void beforeRequestProcessed()
+       {
+               mark("core/page/render");
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/4dbf8eb9/wicket-metrics/src/main/resources/META-INF/aop.xml
----------------------------------------------------------------------
diff --git a/wicket-metrics/src/main/resources/META-INF/aop.xml 
b/wicket-metrics/src/main/resources/META-INF/aop.xml
new file mode 100644
index 0000000..ba00763
--- /dev/null
+++ b/wicket-metrics/src/main/resources/META-INF/aop.xml
@@ -0,0 +1,8 @@
+<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" 
"http://www.eclipse.org/aspectj/dtd/aspectj.dtd";>
+<aspectj>
+    <!-- <weaver options="-debug -showWeaveInfo -verbose"/> -->
+    <aspects>
+               <aspect 
name="org.apache.wicket.metrics.aspects.ApplicationAspect" />
+               <aspect name="org.apache.wicket.metrics.aspects.PageAspect" />
+    </aspects>
+</aspectj>
\ No newline at end of file

Reply via email to