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
