You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by jl...@apache.org on 2013/10/04 19:02:29 UTC
svn commit: r1529219 - in
/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web:
./ handler/ handler/api/ handler/internal/ template/
Author: jlmonteiro
Date: Fri Oct 4 17:02:28 2013
New Revision: 1529219
URL: http://svn.apache.org/r1529219
Log:
Makes it possible to override resources - ie. theme
Modified:
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringController.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/FilteringEndpoints.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/api/TemplateHelper.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/internal/EndpointInfo.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/Templates.java
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringController.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringController.java?rev=1529219&r1=1529218&r2=1529219&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringController.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/MonitoringController.java Fri Oct 4 17:02:28 2013
@@ -28,6 +28,7 @@ import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
@@ -59,8 +60,8 @@ public class MonitoringController implem
public void init(final FilterConfig config) throws ServletException {
classloader = Thread.currentThread().getContextClassLoader();
initMapping(config);
- initHandlers();
Templates.init(config.getServletContext().getContextPath(), mapping);
+ initHandlers();
}
private void initHandlers() {
@@ -101,7 +102,9 @@ public class MonitoringController implem
final HttpServletRequest httpRequest = HttpServletRequest.class.cast(request);
final HttpServletResponse httpResponse = HttpServletResponse.class.cast(response);
- String path = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length() + mapping.length());
+ final String baseUri = httpRequest.getContextPath() + mapping;
+ request.setAttribute("baseUri", baseUri);
+ String path = httpRequest.getRequestURI().substring(baseUri.length() + 1);
if (!path.startsWith("/")) {
path = "/" + path;
}
@@ -113,7 +116,9 @@ public class MonitoringController implem
matcher = entry.getKey().matcher(path);
if (matcher.matches()) {
invoker = entry.getValue();
- break;
+ if (!entry.getKey().pattern().endsWith(".*")) {
+ break;
+ }
}
}
@@ -140,10 +145,13 @@ public class MonitoringController implem
}
if (is != null) {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- int i;
- while ((i = is.read()) != -1) {
- baos.write(i);
+ ByteArrayOutputStream baos = ByteArrayOutputStream.class.cast(request.getAttribute("resourceCache"));
+ if (baos == null) {
+ baos = new ByteArrayOutputStream();
+ int i;
+ while ((i = is.read()) != -1) {
+ baos.write(i);
+ }
}
bytes = baos.toByteArray();
@@ -151,7 +159,11 @@ public class MonitoringController implem
}
}
if (bytes != null) {
- httpResponse.getOutputStream().write(bytes);
+ if (bytes.length == 0) {
+ httpResponse.setStatus(404);
+ } else {
+ httpResponse.getOutputStream().write(bytes);
+ }
return;
}
}
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/FilteringEndpoints.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/FilteringEndpoints.java?rev=1529219&r1=1529218&r2=1529219&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/FilteringEndpoints.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/FilteringEndpoints.java Fri Oct 4 17:02:28 2013
@@ -18,11 +18,34 @@ package org.apache.commons.monitoring.re
import org.apache.commons.monitoring.reporting.web.handler.api.Regex;
import org.apache.commons.monitoring.reporting.web.handler.api.TemplateHelper;
+import org.apache.commons.monitoring.reporting.web.template.Templates;
+import org.apache.velocity.exception.ResourceNotFoundException;
+import org.apache.velocity.runtime.RuntimeSingleton;
+import org.apache.velocity.runtime.resource.loader.ResourceLoader;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
public class FilteringEndpoints {
private static final String BOOTSTRAP_CSS = "/resources/css/bootstrap.min.css";
private static final String MONITORING_CSS = "/resources/css/monitoring.css";
+ private ResourceLoader rl;
+
+ public FilteringEndpoints() {
+ try {
+ rl = ResourceLoader.class.cast(FilteringEndpoints.class.getClassLoader().loadClass((String) RuntimeSingleton.getProperty(Templates.RESOURCE_LOADER_KEY)).newInstance());
+ } catch (final Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
@Regex(MONITORING_CSS)
public void filterCss(final TemplateHelper helper) {
helper.renderPlain(MONITORING_CSS);
@@ -32,4 +55,32 @@ public class FilteringEndpoints {
public void filterBootstrapCss(final TemplateHelper helper) {
helper.renderPlain(BOOTSTRAP_CSS);
}
+
+ @Regex("/resources/.*")
+ public void filterOtherResources(final HttpServletRequest req, final HttpServletResponse resp) {
+ final InputStream is;
+ try {
+ is = rl.getResourceStream(req.getRequestURI().substring(((String) req.getAttribute("baseUri")).length()));
+ } catch (final ResourceNotFoundException rnfe) {
+ return;
+ }
+
+ try {
+ byte[] buffer = new byte[1024];
+ final ByteArrayOutputStream os = new ByteArrayOutputStream();
+ int length;
+ while ((length = is.read(buffer)) != -1) {
+ os.write(buffer, 0, length);
+ }
+ req.setAttribute("resourceCache", os);
+ } catch (final IOException ioe) {
+ throw new IllegalStateException(ioe);
+ } finally {
+ try {
+ is.close();
+ } catch (final IOException e) {
+ // no-op
+ }
+ }
+ }
}
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/api/TemplateHelper.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/api/TemplateHelper.java?rev=1529219&r1=1529218&r2=1529219&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/api/TemplateHelper.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/api/TemplateHelper.java Fri Oct 4 17:02:28 2013
@@ -18,6 +18,8 @@ package org.apache.commons.monitoring.re
import org.apache.commons.monitoring.reporting.web.template.MapBuilder;
import org.apache.commons.monitoring.reporting.web.template.Templates;
+import org.apache.velocity.app.Velocity;
+import org.apache.velocity.runtime.RuntimeSingleton;
import java.io.PrintWriter;
import java.util.Collections;
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/internal/EndpointInfo.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/internal/EndpointInfo.java?rev=1529219&r1=1529218&r2=1529219&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/internal/EndpointInfo.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/internal/EndpointInfo.java Fri Oct 4 17:02:28 2013
@@ -23,6 +23,7 @@ import org.apache.commons.monitoring.rep
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/Templates.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/Templates.java?rev=1529219&r1=1529218&r2=1529219&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/Templates.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/Templates.java Fri Oct 4 17:02:28 2013
@@ -30,6 +30,8 @@ import java.util.Map;
import java.util.Properties;
public final class Templates {
+ public static final String RESOURCE_LOADER_KEY = "monitoring." + RuntimeConstants.RESOURCE_LOADER + ".class";
+
private static String mapping;
public static void init(final String context, final String filterMapping) {
@@ -42,7 +44,7 @@ public final class Templates {
velocityConfiguration.setProperty(RuntimeConstants.RUNTIME_REFERENCES_STRICT_ESCAPE, Boolean.TRUE.toString());
velocityConfiguration.setProperty(RuntimeConstants.RESOURCE_LOADER, "monitoring");
velocityConfiguration.setProperty(RuntimeConstants.VM_LIBRARY, "/templates/macro.vm");
- velocityConfiguration.setProperty("monitoring." + RuntimeConstants.RESOURCE_LOADER + ".class", Configuration.getProperty(Configuration.COMMONS_MONITORING_PREFIX + "reporting.resource-loader", ClasspathResourceLoader.class.getName()));
+ velocityConfiguration.setProperty(RESOURCE_LOADER_KEY, Configuration.getProperty(Configuration.COMMONS_MONITORING_PREFIX + "reporting.resource-loader", ClasspathResourceLoader.class.getName()));
Velocity.init(velocityConfiguration);
if (filterMapping.isEmpty()) {