You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ts...@apache.org on 2016/03/29 18:24:46 UTC
wicket git commit: wicket-metrics - refactoring of application lookup
Repository: wicket
Updated Branches:
refs/heads/master b708e2b47 -> 410815450
wicket-metrics - refactoring of application lookup
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/41081545
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/41081545
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/41081545
Branch: refs/heads/master
Commit: 41081545066bcf1504a920b177bd915bc474c8c1
Parents: b708e2b
Author: Tobias Soloschenko <ts...@apache.org>
Authored: Tue Mar 29 18:20:46 2016 +0200
Committer: Tobias Soloschenko <ts...@apache.org>
Committed: Tue Mar 29 18:20:46 2016 +0200
----------------------------------------------------------------------
.../apache/wicket/metrics/WicketMetrics.java | 174 +++++++------------
.../wicket/metrics/WicketMetricsSettings.java | 17 +-
.../metrics/aspects/WicketFilterInitAspect.java | 47 +++++
.../aspects/WicketFilterRequestCycleAspect.java | 48 -----
.../WicketFilterRequestCycleUrlAspect.java | 64 -------
.../request/WicketFilterRequestCycleAspect.java | 48 +++++
.../WicketFilterRequestCycleUrlAspect.java | 64 +++++++
.../session/SessionCountListenerAspect.java | 4 +-
.../main/resources/wicket-metrics.template.xml | 8 +-
.../src/docs/guide/monitoring/monitoring_1.gdoc | 31 ++--
.../src/docs/guide/monitoring/monitoring_4.gdoc | 9 +-
11 files changed, 262 insertions(+), 252 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/41081545/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/WicketMetrics.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/WicketMetrics.java b/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/WicketMetrics.java
index dd22f6c..3a01dab 100644
--- a/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/WicketMetrics.java
+++ b/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/WicketMetrics.java
@@ -18,6 +18,7 @@ package org.apache.wicket.metrics;
import org.apache.wicket.Application;
import org.apache.wicket.MetaDataKey;
+import org.apache.wicket.WicketRuntimeException;
import org.aspectj.lang.ProceedingJoinPoint;
import com.codahale.metrics.Counter;
@@ -33,28 +34,12 @@ import com.codahale.metrics.Timer.Context;
public class WicketMetrics
{
- private static final String APPLICATION_NAME_PROPERTY = "wicket.metrics.applicationName";
-
- private static final String METRICS_STATIC_REGISTRATION = "wicket.metrics.staticRegistration";
/**
- * if the application has been resolved
+ * The name of the filter the metrics are going to collect of
*/
- private static boolean applicationResolved;
+ private static String filterName;
- /**
- * The application
- */
- private static Application application;
-
- /**
- * Fall back if the application couldn't be resolved the registry is stored static
- */
- private static MetricRegistry metricRegistry;
-
- /**
- * Fall back if the application couldn't be resolved the settings are stored static
- */
- private static WicketMetricsSettings wicketMetricsSettings;
+ private static final String APPLICATION_ERROR = "The application couldn't be resolved, please ensure to apply \"<aspect name=\"org.apache.wicket.metrics.aspects.WicketFilterInitAspect\" />\" to your aspects";
/** The key for metrics registry **/
public static final MetaDataKey<MetricRegistry> METRIC_REGISTRY = new MetaDataKey<MetricRegistry>()
@@ -115,7 +100,7 @@ public class WicketMetrics
.time();
try
{
- return joinPoint.proceed();
+ return proceedSilent(joinPoint);
}
finally
{
@@ -124,7 +109,21 @@ public class WicketMetrics
}
else
{
- return joinPoint.proceed();
+ return proceedSilent(joinPoint);
+ }
+ }
+
+ /**
+ * Stops the context quietly
+ *
+ * @param context
+ * the context to stop
+ */
+ public void stopQuietly(Context context)
+ {
+ if (context != null)
+ {
+ context.stop();
}
}
@@ -145,7 +144,7 @@ public class WicketMetrics
}
/**
- * Creates a histogram of the given arguments
+ * Creates a count of the given arguments
*
* @param name
* the name of the meter to be marked
@@ -158,7 +157,7 @@ public class WicketMetrics
* @return the result of the proceeded join point
* @throws Throwable
*/
- public Object counter(String name, ProceedingJoinPoint joinPoint,
+ public Object count(String name, ProceedingJoinPoint joinPoint,
CounterOperation counterOperation, Long value) throws Throwable
{
WicketMetricsSettings settings = getSettings();
@@ -177,11 +176,7 @@ public class WicketMetrics
counter.dec(value);
}
}
- if (joinPoint != null)
- {
- return joinPoint.proceed();
- }
- return null;
+ return proceedSilent(joinPoint);
}
@@ -204,25 +199,21 @@ public class WicketMetrics
{
registry.meter(settings.getPrefix() + name + renderClassName(joinPoint)).mark();
}
- if (joinPoint != null)
- {
- return joinPoint.proceed();
- }
- return null;
+ return proceedSilent(joinPoint);
}
/**
- * Stops the context quietly
+ * Proceed the join point silent
*
- * @param context
- * the context to stop
+ * @param joinPoint
+ * the join point to proceed
+ * @return the result of the proceeded join point
+ * @throws Throwable
+ * if the invocation throws an error
*/
- public void stopQuietly(Context context)
+ private Object proceedSilent(ProceedingJoinPoint joinPoint) throws Throwable
{
- if (context != null)
- {
- context.stop();
- }
+ return joinPoint != null ? joinPoint.proceed() : null;
}
/**
@@ -245,29 +236,18 @@ public class WicketMetrics
*/
public static synchronized MetricRegistry getMetricRegistry()
{
- if (!applicationResolved)
+ Application application = Application.get(getFilterName());
+ if (application == null)
{
- application = getApplication();
- applicationResolved = true;
+ throw new WicketRuntimeException(APPLICATION_ERROR);
}
- if (application != null && System.getProperty(METRICS_STATIC_REGISTRATION) == null)
+ MetricRegistry metricRegistry = application.getMetaData(METRIC_REGISTRY);
+ if (metricRegistry == null)
{
- MetricRegistry metricRegistry = application.getMetaData(METRIC_REGISTRY);
- if (metricRegistry == null)
- {
- metricRegistry = new MetricRegistry();
- application.setMetaData(METRIC_REGISTRY, metricRegistry);
- }
- return metricRegistry;
- }
- else
- {
- if (WicketMetrics.metricRegistry == null)
- {
- WicketMetrics.metricRegistry = new MetricRegistry();
- }
- return WicketMetrics.metricRegistry;
+ metricRegistry = new MetricRegistry();
+ application.setMetaData(METRIC_REGISTRY, metricRegistry);
}
+ return metricRegistry;
}
/**
@@ -277,77 +257,39 @@ public class WicketMetrics
*/
public static synchronized WicketMetricsSettings getSettings()
{
- if (!applicationResolved)
- {
- application = getApplication();
- applicationResolved = true;
- }
- if (application != null && System.getProperty(METRICS_STATIC_REGISTRATION) == null)
- {
- WicketMetricsSettings wicketMetricsSettings = application.getMetaData(METRIC_SETTINGS);
- if (wicketMetricsSettings == null)
- {
- wicketMetricsSettings = new WicketMetricsSettings();
- application.setMetaData(METRIC_SETTINGS, wicketMetricsSettings);
- }
- return wicketMetricsSettings;
- }
- else
+ Application application = Application.get(getFilterName());
+ if (application == null)
{
- if (wicketMetricsSettings == null)
- {
- wicketMetricsSettings = new WicketMetricsSettings();
- }
- return wicketMetricsSettings;
+ throw new WicketRuntimeException(APPLICATION_ERROR);
}
- }
-
- /**
- * Gets the application. First it tries to resolve the application with Application.get(String)
- * - the String is resolved by the system property "wicket.applicationName". If the application
- * can't be found by the corresponding name a Application.get() will be invoked to resolve it.
- *
- *
- * @return the application or null if the application can't be resolved via get() or get(String)
- */
- private static Application getApplication()
- {
- Application application = getApplicationBySystemProperty();
- if (application == null)
+ WicketMetricsSettings wicketMetricsSettings = application.getMetaData(METRIC_SETTINGS);
+ if (wicketMetricsSettings == null)
{
- application = getApplicationFromThreadLocal();
+ wicketMetricsSettings = new WicketMetricsSettings();
+ wicketMetricsSettings.setPrefix(getFilterName());
+ application.setMetaData(METRIC_SETTINGS, wicketMetricsSettings);
}
- return application;
+ return wicketMetricsSettings;
}
/**
- * Gets the application from thread local
+ * Gets the filter name the application should be resolved with
*
- * @return the application or null if not available
+ * @return the filter name
*/
- private static Application getApplicationFromThreadLocal()
+ public static String getFilterName()
{
- Application application = null;
- if (Application.exists())
- {
- application = Application.get();
- }
- return application;
+ return filterName;
}
/**
- * Gets the application by the system property wicket.applicationName
+ * Sets the filter name the application should be resolved with
*
- * @return the application or null if not available
+ * @param filterName
+ * the filter name
*/
- private static Application getApplicationBySystemProperty()
+ public static void setFilterName(String filterName)
{
- Application application = null;
- String applicatioName = System.getProperty(APPLICATION_NAME_PROPERTY);
- if (applicatioName != null)
- {
- application = Application.get(applicatioName);
- }
- return application;
+ WicketMetrics.filterName = filterName;
}
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/41081545/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/WicketMetricsSettings.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/WicketMetricsSettings.java b/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/WicketMetricsSettings.java
index 37d5980..c5d3aab 100644
--- a/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/WicketMetricsSettings.java
+++ b/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/WicketMetricsSettings.java
@@ -30,7 +30,7 @@ public class WicketMetricsSettings
private boolean enabled = true;
- private String prefix = "ApacheWicket/";
+ private String prefix = "application/";
/**
* If the metrics should be enabled
@@ -64,6 +64,21 @@ public class WicketMetricsSettings
}
/**
+ * Sets the prefix to be used for the statistics
+ *
+ * @param prefix
+ * the prefix to be used
+ */
+ public void setPrefix(String prefix)
+ {
+ if (!prefix.endsWith("/"))
+ {
+ prefix = prefix + "/";
+ }
+ this.prefix = prefix;
+ }
+
+ /**
* Starts the jmx reporter
*/
public void startJmxReporter()
http://git-wip-us.apache.org/repos/asf/wicket/blob/41081545/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/WicketFilterInitAspect.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/WicketFilterInitAspect.java b/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/WicketFilterInitAspect.java
new file mode 100644
index 0000000..6970616
--- /dev/null
+++ b/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/WicketFilterInitAspect.java
@@ -0,0 +1,47 @@
+package org.apache.wicket.metrics.aspects;
+
+import javax.servlet.FilterConfig;
+
+import org.apache.wicket.metrics.WicketMetrics;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+
+/**
+ * This aspect applies the application to wicket metrics
+ *
+ * @author Tobias Soloschenko
+ *
+ */
+@Aspect
+public class WicketFilterInitAspect
+{
+
+ /**
+ * Gets the filter name during the initialization
+ *
+ * @param joinPoint
+ * the join point to be proceed
+ * @return the proceeded outcome of the join point
+ * @throws Throwable
+ * if something went wrong
+ */
+ @Around("execution(* org.apache.wicket.protocol.http.WicketFilter.init(..))")
+ public Object aroundInit(ProceedingJoinPoint joinPoint) throws Throwable
+ {
+ Object[] args = joinPoint.getArgs();
+ String filterName = null;
+ if (args.length == 2)
+ {
+ FilterConfig filterConfig = (FilterConfig)args[1];
+ filterName = filterConfig.getFilterName();
+ }
+ else
+ {
+ FilterConfig filterConfig = (FilterConfig)args[0];
+ filterName = filterConfig.getFilterName();
+ }
+ WicketMetrics.setFilterName(filterName);
+ return joinPoint.proceed();
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/41081545/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/WicketFilterRequestCycleAspect.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/WicketFilterRequestCycleAspect.java b/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/WicketFilterRequestCycleAspect.java
deleted file mode 100644
index c19af45..0000000
--- a/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/WicketFilterRequestCycleAspect.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * 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.wicket.metrics.aspects;
-
-import org.apache.wicket.metrics.WicketMetrics;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-
-/**
- * Aspect to handle basic web application information
- *
- * @author Tobias Soloschenko
- */
-@Aspect
-public class WicketFilterRequestCycleAspect extends WicketMetrics
-{
-
- /**
- * Collects the time how long a request took to be processed
- *
- * @param joinPoint
- * the joinPoint to be proceed
- * @return returns the boolean of the processRequest method
- *
- * @throws Throwable
- * might occur while invoking process request
- */
- @Around("execution(* org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(..))")
- public Object aroundRequestProcessed(ProceedingJoinPoint joinPoint) throws Throwable
- {
- return measureTime("core/application/requestCycle", joinPoint);
- }
-}
http://git-wip-us.apache.org/repos/asf/wicket/blob/41081545/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/WicketFilterRequestCycleUrlAspect.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/WicketFilterRequestCycleUrlAspect.java b/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/WicketFilterRequestCycleUrlAspect.java
deleted file mode 100644
index 3cf633e..0000000
--- a/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/WicketFilterRequestCycleUrlAspect.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.wicket.metrics.aspects;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.wicket.metrics.WicketMetrics;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-
-/**
- * Aspect to measure request url time
- *
- * @author Tobias Soloschenko
- */
-@Aspect
-public class WicketFilterRequestCycleUrlAspect extends WicketMetrics
-{
- /**
- * Collects data how often a request has been made against the webapp and counts the time how
- * long the request took. Measures the information with the request url
- *
- * @param joinPoint
- * the joinPoint to be proceed
- * @return returns the boolean of the processRequest method
- *
- * @throws Throwable
- * might occur while invoking process request
- */
- @Around("execution(* org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(..))")
- public Object aroundRequestProcessedWithURL(ProceedingJoinPoint joinPoint) throws Throwable
- {
- Object[] args = joinPoint.getArgs();
- if (args.length >= 3)
- {
- Object requestAsObject = args[2];
- if (requestAsObject != null && requestAsObject instanceof HttpServletRequest)
- {
- HttpServletRequest httpServletRequest = (HttpServletRequest)requestAsObject;
- String requestUrl = httpServletRequest.getRequestURL().toString();
- String replacedUrl = requestUrl.replace('/', '_');
- replacedUrl = replacedUrl.replace('.', '_');
- replacedUrl = replacedUrl.replaceAll(";jsessionid=.*?(?=\\?|$)", "");
- return measureTime("core/application/request/" + replacedUrl, joinPoint, false);
- }
- }
- return joinPoint.proceed();
- }
-}
http://git-wip-us.apache.org/repos/asf/wicket/blob/41081545/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/request/WicketFilterRequestCycleAspect.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/request/WicketFilterRequestCycleAspect.java b/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/request/WicketFilterRequestCycleAspect.java
new file mode 100644
index 0000000..d1dd252
--- /dev/null
+++ b/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/request/WicketFilterRequestCycleAspect.java
@@ -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.wicket.metrics.aspects.request;
+
+import org.apache.wicket.metrics.WicketMetrics;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+
+/**
+ * Aspect to handle basic web application information
+ *
+ * @author Tobias Soloschenko
+ */
+@Aspect
+public class WicketFilterRequestCycleAspect extends WicketMetrics
+{
+
+ /**
+ * Collects the time how long a request took to be processed
+ *
+ * @param joinPoint
+ * the joinPoint to be proceed
+ * @return returns the boolean of the processRequest method
+ *
+ * @throws Throwable
+ * might occur while invoking process request
+ */
+ @Around("execution(* org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(..))")
+ public Object aroundRequestProcessed(ProceedingJoinPoint joinPoint) throws Throwable
+ {
+ return measureTime("core/application/requestCycle", joinPoint);
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/41081545/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/request/WicketFilterRequestCycleUrlAspect.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/request/WicketFilterRequestCycleUrlAspect.java b/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/request/WicketFilterRequestCycleUrlAspect.java
new file mode 100644
index 0000000..f60b4c8
--- /dev/null
+++ b/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/request/WicketFilterRequestCycleUrlAspect.java
@@ -0,0 +1,64 @@
+/*
+ * 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.wicket.metrics.aspects.request;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.wicket.metrics.WicketMetrics;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+
+/**
+ * Aspect to measure request url time
+ *
+ * @author Tobias Soloschenko
+ */
+@Aspect
+public class WicketFilterRequestCycleUrlAspect extends WicketMetrics
+{
+ /**
+ * Collects data how often a request has been made against the webapp and counts the time how
+ * long the request took. Measures the information with the request url
+ *
+ * @param joinPoint
+ * the joinPoint to be proceed
+ * @return returns the boolean of the processRequest method
+ *
+ * @throws Throwable
+ * might occur while invoking process request
+ */
+ @Around("execution(* org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(..))")
+ public Object aroundRequestProcessedWithURL(ProceedingJoinPoint joinPoint) throws Throwable
+ {
+ Object[] args = joinPoint.getArgs();
+ if (args.length >= 3)
+ {
+ Object requestAsObject = args[2];
+ if (requestAsObject != null && requestAsObject instanceof HttpServletRequest)
+ {
+ HttpServletRequest httpServletRequest = (HttpServletRequest)requestAsObject;
+ String requestUrl = httpServletRequest.getRequestURL().toString();
+ String replacedUrl = requestUrl.replace('/', '_');
+ replacedUrl = replacedUrl.replace('.', '_');
+ replacedUrl = replacedUrl.replaceAll(";jsessionid=.*?(?=\\?|$)", "");
+ return measureTime("core/application/request/" + replacedUrl, joinPoint, false);
+ }
+ }
+ return joinPoint.proceed();
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/41081545/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/session/SessionCountListenerAspect.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/session/SessionCountListenerAspect.java b/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/session/SessionCountListenerAspect.java
index 7dc8f04..e8a5c36 100644
--- a/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/session/SessionCountListenerAspect.java
+++ b/wicket-experimental/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/session/SessionCountListenerAspect.java
@@ -44,7 +44,7 @@ public class SessionCountListenerAspect extends WicketMetrics
public Object aroundInc(ProceedingJoinPoint joinPoint) throws Throwable
{
Object count = joinPoint.proceed();
- counter("core/session/count", null, CounterOperation.INC, 1L);
+ count("core/session/count", null, CounterOperation.INC, 1L);
return count;
}
@@ -61,7 +61,7 @@ public class SessionCountListenerAspect extends WicketMetrics
public Object aroundDec(ProceedingJoinPoint joinPoint) throws Throwable
{
Object count = joinPoint.proceed();
- counter("core/session/count", null, CounterOperation.DEC, 1L);
+ count("core/session/count", null, CounterOperation.DEC, 1L);
return count;
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/41081545/wicket-experimental/wicket-metrics/src/main/resources/wicket-metrics.template.xml
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-metrics/src/main/resources/wicket-metrics.template.xml b/wicket-experimental/wicket-metrics/src/main/resources/wicket-metrics.template.xml
index 5ea5b30..632f257 100644
--- a/wicket-experimental/wicket-metrics/src/main/resources/wicket-metrics.template.xml
+++ b/wicket-experimental/wicket-metrics/src/main/resources/wicket-metrics.template.xml
@@ -5,6 +5,10 @@
<include within="org.apache.wicket..*"/>
</weaver>
<aspects>
+ <!-- required -->
+ <aspect name="org.apache.wicket.metrics.aspects.WicketFilterInitAspect" />
+
+ <!-- optional -->
<aspect name="org.apache.wicket.metrics.aspects.model.LoadableDetachableModelLoadAspect" />
<aspect name="org.apache.wicket.metrics.aspects.requesthandler.IRequestHandlerDetachAspect" />
<aspect name="org.apache.wicket.metrics.aspects.requesthandler.IRequestHandlerRespondAspect" />
@@ -21,8 +25,8 @@
<aspect name="org.apache.wicket.metrics.aspects.ajax.IPartialPageRequestHandlerPrependJavaScriptAspect" />
<aspect name="org.apache.wicket.metrics.aspects.resource.ResourceReferenceCreateAspect" />
<aspect name="org.apache.wicket.metrics.aspects.markup.WicketTagCreateAspect" />
- <aspect name="org.apache.wicket.metrics.aspects.WicketFilterRequestCycleUrlAspect" />
- <aspect name="org.apache.wicket.metrics.aspects.WicketFilterRequestCycleAspect" />
+ <aspect name="org.apache.wicket.metrics.aspects.request.WicketFilterRequestCycleUrlAspect" />
+ <aspect name="org.apache.wicket.metrics.aspects.request.WicketFilterRequestCycleAspect" />
<aspect name="org.apache.wicket.metrics.aspects.session.SessionCountListenerAspect" />
</aspects>
</aspectj>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/wicket/blob/41081545/wicket-user-guide/src/docs/guide/monitoring/monitoring_1.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/monitoring/monitoring_1.gdoc b/wicket-user-guide/src/docs/guide/monitoring/monitoring_1.gdoc
index 7938368..2ee213e 100644
--- a/wicket-user-guide/src/docs/guide/monitoring/monitoring_1.gdoc
+++ b/wicket-user-guide/src/docs/guide/monitoring/monitoring_1.gdoc
@@ -21,10 +21,14 @@ This is a little example how to setup wicket-metrics within a Apache Tomcat.
<include within="org.apache.wicket..*"/>
</weaver>
<aspects>
+ <!-- required -->
+ <aspect name="org.apache.wicket.metrics.aspects.WicketFilterInitAspect" />
+
+ <!-- optional -->
<aspect name="org.apache.wicket.metrics.aspects.model.LoadableDetachableModelLoadAspect" />
<aspect name="org.apache.wicket.metrics.aspects.requesthandler.IRequestHandlerDetachAspect" />
<aspect name="org.apache.wicket.metrics.aspects.requesthandler.IRequestHandlerRespondAspect" />
- <aspect name="org.apache.wicket.metrics.aspects.resource.IResourceCreateAspect" />
+ <aspect name="org.apache.wicket.metrics.aspects.resource.IResourceCreateAspect" />
<aspect name="org.apache.wicket.metrics.aspects.behavior.BehaviorCreateAspect" />
<aspect name="org.apache.wicket.metrics.aspects.component.ComponentCreateAspect" />
<aspect name="org.apache.wicket.metrics.aspects.component.ComponentOnConfigureAspect" />
@@ -37,26 +41,20 @@ This is a little example how to setup wicket-metrics within a Apache Tomcat.
<aspect name="org.apache.wicket.metrics.aspects.ajax.IPartialPageRequestHandlerPrependJavaScriptAspect" />
<aspect name="org.apache.wicket.metrics.aspects.resource.ResourceReferenceCreateAspect" />
<aspect name="org.apache.wicket.metrics.aspects.markup.WicketTagCreateAspect" />
- <aspect name="org.apache.wicket.metrics.aspects.WicketFilterRequestCycleUrlAspect" />
- <aspect name="org.apache.wicket.metrics.aspects.WicketFilterRequestCycleAspect" />
+ <aspect name="org.apache.wicket.metrics.aspects.request.WicketFilterRequestCycleUrlAspect" />
+ <aspect name="org.apache.wicket.metrics.aspects.request.WicketFilterRequestCycleAspect" />
<aspect name="org.apache.wicket.metrics.aspects.session.SessionCountListenerAspect" />
</aspects>
</aspectj>
{code}
-* If you have set wicket-metrics as dependency you can open "wicket-metrics.template.xml" to get a full template of the "aop.xml"
-
-* For the weaver options refer to the "AspectJ LTW configuration documentation":https://eclipse.org/aspectj/doc/next/devguide/ltw-configuration.html
-
* If you use the SessionCountListenerAspect you have to ensure that metadata-complete="false" is set otherwise you have to add the listener yourself:
{code}
<listener>
- <listener-class>org.apache.wicket.metrics.aspects.session.SessionCountListener</listenerclass>
+ <listener-class>org.apache.wicket.metrics.aspects.session.SessionCountListener</listener-class>
</listener>
{code}
-You also have to clear the session store if you restart the server - otherwise physically stored session will corrupt the data, because the count is initialized with 0.
-
(5 - optional) To enable the JMX measurement write the following line into your init method of your Application (Now you are able to connect with jvisualvm to your server and have a look at the data):
{code}
WicketMetrics.getSettings().startJmxReporter();
@@ -72,10 +70,9 @@ To disable measurement:
WicketMetrics.getSettings().setEnabled(false);
{code}
-(6 - optional) There are two system flags which can be applied to the start of the server
-
--Dwicket.metrics.staticRegistration=true - If this argument is set the wicket metrics settings and the metrics registry are stored in static variables within the WicketMetrics class - this might cause problems in an OSGi environment
-
--Dwicket.metrics.applicationName=<filtername> - If this argument is set no ThreadLocal access is required, because the Application is looked up via Application#get(String). This property needs to be set if the active sessions counter should be measured with SessionCountListenerAspect because timed out sessions are invalidated in non-HTTP-worker thread and the Wicket thread locals are not available. Caution: this approach could not be used when there are more than one applications in the same web container!
-
-
+*IMPORTANT INFORMATION*
+** It is only possible to collect metrics for *one wicket filter per webapp* - don't declare more then one if you want to use wicket-metrics
+** The WicketFilterInitAspect is required so that the application can be resolved - otherwise runtime exceptions will be thrown
+** If you use the SessionCountListener you have to clear the session store if you restart the server - otherwise physically stored session will corrupt the data, because the count is initialized with 0.
+** If you have set wicket-metrics as dependency you can open "wicket-metrics.template.xml" to get a full template of the "aop.xml"
+** For the weaver options refer to the AspectJ LTW configuration documentation: https://eclipse.org/aspectj/doc/next/devguide/ltw-configuration.html
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/wicket/blob/41081545/wicket-user-guide/src/docs/guide/monitoring/monitoring_4.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/monitoring/monitoring_4.gdoc b/wicket-user-guide/src/docs/guide/monitoring/monitoring_4.gdoc
index 3e5c608..22bdd3b 100644
--- a/wicket-user-guide/src/docs/guide/monitoring/monitoring_4.gdoc
+++ b/wicket-user-guide/src/docs/guide/monitoring/monitoring_4.gdoc
@@ -22,10 +22,15 @@ There are only a two steps required to write own measurements for life data stat
<aspectj>
<weaver options="-nowarn">
<include within="org.apache.wicket..*"/>
- <include within="my.package..*"/>
+ <include within="my.components.package..*"/>
</weaver>
<aspects>
- <aspect name="my.package.MySpecialAspect" />
+ <!-- required -->
+ <aspect name="org.apache.wicket.metrics.aspects.WicketFilterInitAspect" />
+
+ <!-- own aspects -->
+ <aspect name="my.aspect.package.MySpecialAspect" />
+
<!-- wickets own metrics -->
.....
</aspects>