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/07/31 13:00:48 UTC
svn commit: r1508808 - in /commons/sandbox/monitoring/trunk: ./ reporting/
reporting/src/main/java/org/apache/commons/monitoring/reporting/format/
reporting/src/main/java/org/apache/commons/monitoring/reporting/template/
reporting/src/main/java/org/apa...
Author: rmannibucau
Date: Wed Jul 31 11:00:47 2013
New Revision: 1508808
URL: http://svn.apache.org/r1508808
Log:
adding jmx plugin + moving format in handler + using resources from classloader instead of sevletcontext to be able to embed the jar easily
Added:
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/HandlerRendererAdapter.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/
- copied from r1508431, commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/format/
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jmx/JMXNode.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/
- copied from r1508431, commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/template/
commons/sandbox/monitoring/trunk/reporting/src/main/resources/resources/
- copied from r1508431, commons/sandbox/monitoring/trunk/reporting/src/main/webapp/resources/
commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/error.vm
- copied, changed from r1508431, commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/home.vm
commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jmx/
commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jmx/main.vm
commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jmx/mbean.vm
- copied, changed from r1508431, commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/report.vm
Removed:
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/format/
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/template/
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/HtmlHandler.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/WebResourceLoader.java
commons/sandbox/monitoring/trunk/reporting/src/main/webapp/resources/
Modified:
commons/sandbox/monitoring/trunk/pom.xml
commons/sandbox/monitoring/trunk/reporting/pom.xml
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/ClearHandler.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/FilteringHandler.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/Handler.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/HomeHandler.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/RedirectHandler.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/ReportHandler.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/ResetHandler.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/CSVFormat.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/Format.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/HTMLFormat.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/JSONFormat.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/MapFormat.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/MetricData.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/XMLFormat.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/PluginDecoratorHandler.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/PluginRepository.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jmx/JMXHandler.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jmx/JMXPlugin.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/MapBuilder.java
commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/Templates.java
commons/sandbox/monitoring/trunk/reporting/src/main/resources/META-INF/NOTICE.txt
commons/sandbox/monitoring/trunk/reporting/src/main/resources/resources/css/monitoring.css
commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/home.vm
commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/page.vm
commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/report.vm
commons/sandbox/monitoring/trunk/reporting/src/test/java/org/apache/commons/monitoring/reporting/FormatsTest.java
Modified: commons/sandbox/monitoring/trunk/pom.xml
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/pom.xml?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/pom.xml (original)
+++ commons/sandbox/monitoring/trunk/pom.xml Wed Jul 31 11:00:47 2013
@@ -88,8 +88,8 @@
<exclude>**/*/MANIFEST.MF</exclude>
<exclude>.git</exclude>
<exclude>.gitignore</exclude>
- <exclude>**/webapp/resources/js/*.js</exclude>
- <exclude>**/webapp/resources/css/*.css</exclude>
+ <exclude>**/resources/js/*.js</exclude>
+ <exclude>**/resources/css/*.css</exclude>
<exclude>**/META-INF/services/*</exclude>
</excludes>
</configuration>
Modified: commons/sandbox/monitoring/trunk/reporting/pom.xml
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/pom.xml?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/pom.xml (original)
+++ commons/sandbox/monitoring/trunk/reporting/pom.xml Wed Jul 31 11:00:47 2013
@@ -46,6 +46,11 @@
<version>3.1</version>
</dependency>
<dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>1.8</version>
+ </dependency>
+ <dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
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=1508808&r1=1508807&r2=1508808&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 Wed Jul 31 11:00:47 2013
@@ -16,8 +16,6 @@
*/
package org.apache.commons.monitoring.reporting.web;
-import org.apache.commons.monitoring.reporting.format.Format;
-import org.apache.commons.monitoring.reporting.template.Templates;
import org.apache.commons.monitoring.reporting.web.handler.ClearHandler;
import org.apache.commons.monitoring.reporting.web.handler.FilteringHandler;
import org.apache.commons.monitoring.reporting.web.handler.Handler;
@@ -25,33 +23,39 @@ import org.apache.commons.monitoring.rep
import org.apache.commons.monitoring.reporting.web.handler.Renderer;
import org.apache.commons.monitoring.reporting.web.handler.ReportHandler;
import org.apache.commons.monitoring.reporting.web.handler.ResetHandler;
+import org.apache.commons.monitoring.reporting.web.handler.format.Format;
import org.apache.commons.monitoring.reporting.web.plugin.PluginRepository;
+import org.apache.commons.monitoring.reporting.web.template.MapBuilder;
+import org.apache.commons.monitoring.reporting.web.template.Templates;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
-import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
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.PrintStream;
import java.util.HashMap;
import java.util.Map;
public class MonitoringController implements Filter {
+ private final Map<String, byte[]> cachedResources = new HashMap<String, byte[]>();
private final Map<String, Handler> handlers = new HashMap<String, Handler>();
private Handler defaultHandler;
private String mapping;
- private ServletContext servletContext;
+ private ClassLoader classloader;
@Override
public void init(final FilterConfig config) throws ServletException {
- servletContext = config.getServletContext();
+ classloader = Thread.currentThread().getContextClassLoader();
initMapping(config);
initHandlers();
- initTemplates();
+ Templates.init(config.getServletContext().getContextPath(), mapping);
}
private void initHandlers() {
@@ -74,10 +78,6 @@ public class MonitoringController implem
}
}
- private void initTemplates() {
- Templates.init(servletContext, mapping);
- }
-
private void initMapping(FilterConfig config) {
mapping = config.getInitParameter("monitoring-mapping");
if (mapping == null) {
@@ -99,30 +99,60 @@ public class MonitoringController implem
final HttpServletRequest httpRequest = HttpServletRequest.class.cast(request);
- final Handler handler = findHandler(httpRequest);
- final String path = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length());
- if (handler == defaultHandler && servletContext.getResourceAsStream(path) != null) {
- chain.doFilter(request, response);
- return;
+ String path = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length() + mapping.length());
+ if (!path.startsWith("/")) {
+ path = "/" + path;
}
- final Renderer renderer = handler.handle(httpRequest, HttpServletResponse.class.cast(response));
- if (renderer != null) {
- renderer.render(response.getWriter(), request.getParameterMap());
+ final Handler handler = findHandler(path);
+ if (handler == defaultHandler && !"/".equals(path)){ // resource, they are in the classloader and not in the webapp for embedded case
+ byte[] bytes = cachedResources.get(path);
+ if (bytes == null) {
+ final InputStream is = classloader.getResourceAsStream(path.substring(1));
+ if (is != null) {
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ int i;
+ while ((i = is.read()) != -1) {
+ baos.write(i);
+ }
+
+ bytes = baos.toByteArray();
+ cachedResources.put(path, bytes);
+ }
+ }
+ if (bytes != null) {
+ response.getOutputStream().write(bytes);
+ return;
+ }
}
- }
- private Handler findHandler(final HttpServletRequest request) {
- String path = request.getRequestURI().substring(request.getContextPath().length() + mapping.length());
- if (!path.startsWith("/")) {
- path = "/" + path;
+ try {
+ final Renderer renderer = handler.handle(httpRequest, HttpServletResponse.class.cast(response), path);
+ if (renderer != null) {
+ renderer.render(response.getWriter(), request.getParameterMap());
+ }
+ } catch (final Exception e) {
+ final ByteArrayOutputStream err = new ByteArrayOutputStream();
+ e.printStackTrace(new PrintStream(err));
+ Templates.htmlRender(response.getWriter(), "error.vm", new MapBuilder<String, Object>().set("exception", new String(err.toByteArray())).build());
}
+ }
+ private Handler findHandler(final String path) {
final Handler handler = handlers.get(path);
if (handler != null) {
return handler;
}
+ for (final String mapping : handlers.keySet()) {
+ if (mapping.endsWith("/*") && path.startsWith(mapping.substring(0, mapping.length() - "/*".length()))) {
+ return handlers.get(mapping);
+ }
+ if (mapping.endsWith("*") && path.startsWith(mapping.substring(0, mapping.length() - "*".length()))) {
+ return handlers.get(mapping);
+ }
+ }
+
return defaultHandler;
}
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/ClearHandler.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/ClearHandler.java?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/ClearHandler.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/ClearHandler.java Wed Jul 31 11:00:47 2013
@@ -18,14 +18,10 @@ package org.apache.commons.monitoring.re
import org.apache.commons.monitoring.repositories.Repository;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
public class ClearHandler extends RedirectHandler {
@Override
- public Renderer handle(final HttpServletRequest request, final HttpServletResponse response) {
+ protected void preRedirect() {
Repository.INSTANCE.clear();
- return super.handle(request, response);
}
@Override
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/FilteringHandler.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/FilteringHandler.java?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/FilteringHandler.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/FilteringHandler.java Wed Jul 31 11:00:47 2013
@@ -16,7 +16,7 @@
*/
package org.apache.commons.monitoring.reporting.web.handler;
-import org.apache.commons.monitoring.reporting.template.Templates;
+import org.apache.commons.monitoring.reporting.web.template.Templates;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -32,8 +32,8 @@ public class FilteringHandler implements
}
@Override
- public Renderer handle(final HttpServletRequest request, final HttpServletResponse response) {
- return new FilteringRenderer(request.getRequestURI().substring(request.getContextPath().length()));
+ public Renderer handle(final HttpServletRequest request, final HttpServletResponse response, final String path) {
+ return new FilteringRenderer(path);
}
private static class FilteringRenderer implements Renderer {
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/Handler.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/Handler.java?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/Handler.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/Handler.java Wed Jul 31 11:00:47 2013
@@ -20,5 +20,5 @@ import javax.servlet.http.HttpServletReq
import javax.servlet.http.HttpServletResponse;
public interface Handler {
- Renderer handle(HttpServletRequest request, HttpServletResponse response);
+ Renderer handle(HttpServletRequest request, HttpServletResponse response, String path);
}
Added: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/HandlerRendererAdapter.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/HandlerRendererAdapter.java?rev=1508808&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/HandlerRendererAdapter.java (added)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/HandlerRendererAdapter.java Wed Jul 31 11:00:47 2013
@@ -0,0 +1,44 @@
+/*
+ * 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.reporting.web.handler;
+
+import org.apache.commons.monitoring.reporting.web.template.Templates;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.PrintWriter;
+import java.util.Map;
+
+public abstract class HandlerRendererAdapter implements Handler, Renderer {
+ @Override
+ public Renderer handle(final HttpServletRequest request, final HttpServletResponse response, final String path) {
+ return rendererFor(path);
+ }
+
+ @Override
+ public void render(final PrintWriter writer, final Map<String, ?> params) {
+ Templates.htmlRender(writer, getTemplate(), getVariables());
+ }
+
+ protected Renderer rendererFor(final String path) {
+ return this;
+ }
+
+ protected abstract String getTemplate();
+
+ protected abstract Map<String,?> getVariables();
+}
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/HomeHandler.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/HomeHandler.java?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/HomeHandler.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/HomeHandler.java Wed Jul 31 11:00:47 2013
@@ -16,7 +16,7 @@
*/
package org.apache.commons.monitoring.reporting.web.handler;
-import org.apache.commons.monitoring.reporting.template.Templates;
+import org.apache.commons.monitoring.reporting.web.template.Templates;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -31,7 +31,7 @@ public class HomeHandler implements Hand
}
@Override
- public Renderer handle(final HttpServletRequest request, final HttpServletResponse response) {
+ public Renderer handle(final HttpServletRequest request, final HttpServletResponse response, final String path) {
return renderer;
}
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/RedirectHandler.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/RedirectHandler.java?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/RedirectHandler.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/RedirectHandler.java Wed Jul 31 11:00:47 2013
@@ -23,7 +23,8 @@ import javax.servlet.http.HttpServletRes
public abstract class RedirectHandler implements Handler {
@Override
- public Renderer handle(final HttpServletRequest request, final HttpServletResponse response) {
+ public Renderer handle(final HttpServletRequest request, final HttpServletResponse response, final String path) {
+ preRedirect();
try {
response.sendRedirect(request.getRequestURI().substring(0, request.getRequestURI().length() - from().length()) + to());
} catch (final Exception e) {
@@ -32,6 +33,10 @@ public abstract class RedirectHandler im
return null;
}
+ protected void preRedirect() {
+ // no-op
+ }
+
public abstract String from();
public abstract String to();
}
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/ReportHandler.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/ReportHandler.java?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/ReportHandler.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/ReportHandler.java Wed Jul 31 11:00:47 2013
@@ -16,7 +16,7 @@
*/
package org.apache.commons.monitoring.reporting.web.handler;
-import org.apache.commons.monitoring.reporting.format.Format;
+import org.apache.commons.monitoring.reporting.web.handler.format.Format;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -29,7 +29,7 @@ public class ReportHandler implements Ha
}
@Override
- public Renderer handle(final HttpServletRequest request, final HttpServletResponse response) {
+ public Renderer handle(final HttpServletRequest request, final HttpServletResponse response, final String path) {
response.setContentType(format.type());
return format;
}
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/ResetHandler.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/ResetHandler.java?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/ResetHandler.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/ResetHandler.java Wed Jul 31 11:00:47 2013
@@ -18,14 +18,10 @@ package org.apache.commons.monitoring.re
import org.apache.commons.monitoring.repositories.Repository;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
public class ResetHandler extends RedirectHandler {
@Override
- public Renderer handle(final HttpServletRequest request, final HttpServletResponse response) {
+ protected void preRedirect() {
Repository.INSTANCE.reset();
- return super.handle(request, response);
}
@Override
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/CSVFormat.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/CSVFormat.java?rev=1508808&r1=1508431&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/CSVFormat.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/CSVFormat.java Wed Jul 31 11:00:47 2013
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.commons.monitoring.reporting.format;
+package org.apache.commons.monitoring.reporting.web.handler.format;
import org.apache.commons.monitoring.configuration.Configuration;
import org.apache.commons.monitoring.counter.Unit;
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/Format.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/Format.java?rev=1508808&r1=1508431&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/Format.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/Format.java Wed Jul 31 11:00:47 2013
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.commons.monitoring.reporting.format;
+package org.apache.commons.monitoring.reporting.web.handler.format;
import org.apache.commons.monitoring.reporting.web.handler.Renderer;
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/HTMLFormat.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/HTMLFormat.java?rev=1508808&r1=1508431&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/HTMLFormat.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/HTMLFormat.java Wed Jul 31 11:00:47 2013
@@ -14,11 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.commons.monitoring.reporting.format;
+package org.apache.commons.monitoring.reporting.web.handler.format;
import org.apache.commons.monitoring.counter.Unit;
-import org.apache.commons.monitoring.reporting.template.MapBuilder;
-import org.apache.commons.monitoring.reporting.template.Templates;
+import org.apache.commons.monitoring.reporting.web.template.MapBuilder;
+import org.apache.commons.monitoring.reporting.web.template.Templates;
import java.io.PrintWriter;
import java.util.Map;
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/JSONFormat.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/JSONFormat.java?rev=1508808&r1=1508431&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/JSONFormat.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/JSONFormat.java Wed Jul 31 11:00:47 2013
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.commons.monitoring.reporting.format;
+package org.apache.commons.monitoring.reporting.web.handler.format;
import org.apache.commons.monitoring.counter.Counter;
import org.apache.commons.monitoring.monitors.Monitor;
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/MapFormat.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/MapFormat.java?rev=1508808&r1=1508431&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/MapFormat.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/MapFormat.java Wed Jul 31 11:00:47 2013
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.commons.monitoring.reporting.format;
+package org.apache.commons.monitoring.reporting.web.handler.format;
import org.apache.commons.monitoring.counter.Counter;
import org.apache.commons.monitoring.counter.Unit;
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/MetricData.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/MetricData.java?rev=1508808&r1=1508431&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/MetricData.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/MetricData.java Wed Jul 31 11:00:47 2013
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.commons.monitoring.reporting.format;
+package org.apache.commons.monitoring.reporting.web.handler.format;
import org.apache.commons.monitoring.counter.Counter;
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/XMLFormat.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/XMLFormat.java?rev=1508808&r1=1508431&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/XMLFormat.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/handler/format/XMLFormat.java Wed Jul 31 11:00:47 2013
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.commons.monitoring.reporting.format;
+package org.apache.commons.monitoring.reporting.web.handler.format;
import org.apache.commons.monitoring.counter.Counter;
import org.apache.commons.monitoring.monitors.Monitor;
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/PluginDecoratorHandler.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/PluginDecoratorHandler.java?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/PluginDecoratorHandler.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/PluginDecoratorHandler.java Wed Jul 31 11:00:47 2013
@@ -35,8 +35,8 @@ public class PluginDecoratorHandler impl
}
@Override
- public Renderer handle(final HttpServletRequest request, final HttpServletResponse response) {
- return new PluginDecoratorRenderer(delegate.handle(request, response), plugin);
+ public Renderer handle(final HttpServletRequest request, final HttpServletResponse response, final String path) {
+ return new PluginDecoratorRenderer(delegate.handle(request, response, path), plugin);
}
private static class PluginDecoratorRenderer implements Renderer {
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/PluginRepository.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/PluginRepository.java?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/PluginRepository.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/PluginRepository.java Wed Jul 31 11:00:47 2013
@@ -56,11 +56,17 @@ public class PluginRepository {
private final String url;
private final Handler handler;
private final String name;
+ private final String rootUrl;
public PluginInfo(final String url, final Handler handler, final String name) {
this.url = url;
this.handler = handler;
this.name = name;
+ if (!url.endsWith("/*")) {
+ rootUrl = url;
+ } else {
+ rootUrl = url.substring(0, url.length() - "/*".length());
+ }
}
public String getUrl() {
@@ -74,5 +80,9 @@ public class PluginRepository {
public String getName() {
return name;
}
+
+ public String getRootUrl() {
+ return rootUrl;
+ }
}
}
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jmx/JMXHandler.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jmx/JMXHandler.java?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jmx/JMXHandler.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jmx/JMXHandler.java Wed Jul 31 11:00:47 2013
@@ -16,22 +16,219 @@
*/
package org.apache.commons.monitoring.reporting.web.plugin.jmx;
-import org.apache.commons.monitoring.reporting.web.handler.Handler;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.monitoring.MonitoringException;
+import org.apache.commons.monitoring.reporting.web.handler.HandlerRendererAdapter;
import org.apache.commons.monitoring.reporting.web.handler.Renderer;
+import org.apache.commons.monitoring.reporting.web.template.MapBuilder;
+import org.apache.commons.monitoring.reporting.web.template.Templates;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import javax.management.AttributeNotFoundException;
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanException;
+import javax.management.MBeanInfo;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectInstance;
+import javax.management.ObjectName;
+import javax.management.ReflectionException;
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.TabularData;
import java.io.PrintWriter;
+import java.lang.management.ManagementFactory;
+import java.lang.reflect.Array;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Map;
+import java.util.Set;
+
+public class JMXHandler extends HandlerRendererAdapter {
+ private static final MBeanServer SERVER = ManagementFactory.getPlatformMBeanServer();
+
+ @Override
+ protected Renderer rendererFor(final String path) {
+ if ("/jmx".endsWith(path) || "/jmx/".equals(path)) {
+ return this;
+ }
+
+ try {
+ return new MBeanRenderer(new ObjectName(new String(Base64.decodeBase64(path.substring("/jmx/".length())))));
+ } catch (final MalformedObjectNameException e) {
+ throw new MonitoringException(e);
+ }
+ }
-public class JMXHandler implements Handler {
@Override
- public Renderer handle(final HttpServletRequest request, final HttpServletResponse response) {
- return new Renderer() {
- @Override
- public void render(final PrintWriter writer, final Map<String, ?> params) {
- writer.write("TODO");
+ protected String getTemplate() {
+ return "jmx/main.vm";
+ }
+
+ @Override
+ protected Map<String, ?> getVariables() {
+ return new MapBuilder<String, Object>().set("jmxTree", buildJmxTree()).build();
+ }
+
+ private static JMXNode buildJmxTree() {
+ final JMXNode root = new JMXNode("/");
+
+ for (final ObjectInstance instance : SERVER.queryMBeans(null, null)) {
+ final ObjectName objectName = instance.getObjectName();
+ JMXNode.addNode(root, objectName.getDomain(), objectName.getKeyPropertyListString());
+ }
+
+ return root;
+ }
+
+ private static class MBeanRenderer implements Renderer {
+ private final ObjectName name;
+
+ private MBeanRenderer(final ObjectName objectName) {
+ this.name = objectName;
+ }
+
+ @Override
+ public void render(final PrintWriter writer, final Map<String, ?> params) {
+ try {
+ final MBeanInfo info = SERVER.getMBeanInfo(name);
+ Templates.render(writer, "templates/jmx/mbean.vm",
+ new MapBuilder<String, Object>()
+ .set("objectname", name.toString())
+ .set("classname", info.getClassName())
+ .set("description", info.getDescription())
+ .set("attributes", attributes(info))
+ .build());
+ } catch (final Exception e) {
+ throw new MonitoringException(e);
}
- };
+ }
+
+ private Collection<MBeanAttribute> attributes(final MBeanInfo info) {
+ final Collection<MBeanAttribute> list = new LinkedList<MBeanAttribute>();
+ for (final MBeanAttributeInfo attribute : info.getAttributes()) {
+ Object value;
+ try {
+ value = SERVER.getAttribute(name, attribute.getName());
+ } catch (final Exception e) {
+ value = "<div class=\"alert-error\">" + e.getMessage() + "</div>";
+ }
+ list.add(new MBeanAttribute(attribute.getName(), attribute.getType(), attribute.getDescription(), value(value)));
+ }
+ return list;
+ }
+
+ private static String value(final Object value) {
+ try {
+ if (value == null) {
+ return "";
+ }
+
+ if (value.getClass().isArray()) {
+ final int length = Array.getLength(value);
+ if (length == 0) {
+ return "";
+ }
+
+ final StringBuilder builder = new StringBuilder().append("<ul>");
+ for (int i = 0; i < length; i++) {
+ builder.append("<li>").append(value(Array.get(value, i))).append("</li>");
+ }
+ builder.append("</ul>");
+ return builder.toString();
+ }
+
+ if (Collection.class.isInstance(value)) {
+ final StringBuilder builder = new StringBuilder().append("<ul>");
+ for (final Object o : Collection.class.cast(value)) {
+ builder.append("<li>").append(value(o)).append("</li>");
+ }
+ builder.append("</ul>");
+ return builder.toString();
+ }
+
+ if (TabularData.class.isInstance(value)) {
+ final TabularData td = TabularData.class.cast(value);
+ final List<String> keys = td.getTabularType().getIndexNames();
+ final int number = keys.size();
+
+ final StringBuilder builder = new StringBuilder().append("<table class=\"table table-condensed\">");
+ for (final Object type : td.keySet()) {
+ final List<?> values = (List<?>) type;
+ for (int i = 0; i < number; i++) {
+ builder.append("<tr>")
+ .append("<td>").append(value(keys.get(i))).append("</td>")
+ .append("<td>").append(value(values.get(i))).append("</td>")
+ .append("</tr>");
+ }
+
+ }
+ builder.append("</table>");
+
+ return builder.toString();
+ }
+
+ if (CompositeData.class.isInstance(value)) {
+ final CompositeData cd = CompositeData.class.cast(value);
+ final Set<String> keys = cd.getCompositeType().keySet();
+
+ final StringBuilder builder = new StringBuilder().append("<table class=\"table table-condensed\">");
+ for (final String type : keys) {
+ builder.append("<tr><td>").append(type).append("</td><td>").append(value(cd.get(type))).append("</td></tr>");
+ }
+ builder.append("</table>");
+
+ return builder.toString();
+
+ }
+
+ if (Map.class.isInstance(value)) {
+ final Map<?, ?> map = Map.class.cast(value);
+
+ final StringBuilder builder = new StringBuilder().append("<table class=\"table table-condensed\">");
+ for (final Map.Entry<?, ?> entry : map.entrySet()) {
+ builder.append("<tr><tr>").append(value(entry.getKey())).append("</td><td>").append(value(entry.getValue())).append("</td></tr>");
+ }
+ builder.append("</table>");
+
+ return builder.toString();
+
+ }
+
+ return value.toString();
+ } catch (final Exception e) {
+ throw new MonitoringException(e);
+ }
+ }
+ }
+
+ public static class MBeanAttribute {
+ private final String name;
+ private final String type;
+ private final String description;
+ private final String value;
+
+ public MBeanAttribute(final String name, final String type, final String description, final String value) {
+ this.name = name;
+ this.type = type;
+ this.description = description;
+ this.value = value;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public String getValue() {
+ return value;
+ }
}
}
Added: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jmx/JMXNode.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jmx/JMXNode.java?rev=1508808&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jmx/JMXNode.java (added)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jmx/JMXNode.java Wed Jul 31 11:00:47 2013
@@ -0,0 +1,163 @@
+/*
+ * 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.reporting.web.plugin.jmx;
+
+import org.apache.commons.codec.binary.Base64;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Map;
+import java.util.TreeMap;
+
+public class JMXNode {
+ private final String name;
+ private final Map<Key, JMXNode> children = new TreeMap<Key, JMXNode>();
+ private String base64 = null;
+
+ public JMXNode(final String name) {
+ this.name = name;
+ }
+
+ public static void addNode(final JMXNode rootNode, final String domain, final String props) {
+ final Map<String, String> properties = new TreeMap<String, String>(new JMXPropertiesComparator(props));
+ for (final String k : props.split(",")) {
+ final String[] kv = k.split("=");
+ if (kv.length < 2) {
+ properties.put(kv[0], "");
+ } else {
+ properties.put(kv[0], kv[1]);
+ }
+ }
+
+ final Key rootKey = new Key("domain", domain);
+ JMXNode node = rootNode.children.get(rootKey);
+ if (node == null) {
+ node = new JMXNode(domain);
+ rootNode.children.put(rootKey, node);
+ }
+
+ for (final Map.Entry<String, String> entry : properties.entrySet()) {
+ final Key key = new Key(entry.getKey(), entry.getValue());
+ final String value = entry.getValue();
+
+ JMXNode child = node.children.get(key);
+ if (child == null) {
+ child = new JMXNode(value);
+ node.children.put(key, child);
+ }
+
+ node = child;
+ }
+
+ node.base64 = Base64.encodeBase64String((domain + ":" + props).getBytes());
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public boolean isLeaf() {
+ return base64 != null;
+ }
+
+ public String getBase64() {
+ return base64;
+ }
+
+ public Collection<JMXNode> getChildren() {
+ return Collections.unmodifiableCollection(children.values());
+ }
+
+ protected static class Key implements Comparable<Key> {
+ private final String key;
+ private final String value;
+
+ public Key(final String key, final String value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || Key.class != o.getClass()) {
+ return false;
+ }
+
+ final Key key1 = Key.class.cast(o);
+ return key.equals(key1.key) && value.equals(key1.value);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = key.hashCode();
+ result = 31 * result + value.hashCode();
+ return result;
+ }
+
+ @Override
+ public int compareTo(final Key o) {
+ if (equals(o)) {
+ return 0;
+ }
+
+ final int keys = key.compareTo(o.key);
+ if (keys != 0) {
+ return keys;
+ }
+ return value.compareTo(o.value);
+ }
+
+ @Override
+ public String toString() {
+ return "{" + key + " = " + value + '}';
+ }
+ }
+
+ protected static class JMXPropertiesComparator implements Comparator<String> {
+ private final String properties;
+
+ protected JMXPropertiesComparator(final String props) {
+ properties = props;
+ }
+
+ @Override
+ public int compare(final String o1, final String o2) {
+ if (o1.equals(o2)) {
+ return 0;
+ }
+
+ if ("type".equals(o1)) {
+ return -1;
+ }
+ if ("type".equals(o2)) {
+ return 1;
+ }
+ if ("j2eeType".equals(o1)) {
+ return -1;
+ }
+ if ("j2eeType".equals(o2)) {
+ return 1;
+ }
+
+ return properties.indexOf(o1 + "=") - properties.indexOf(o2 + "=");
+ }
+ }
+}
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jmx/JMXPlugin.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jmx/JMXPlugin.java?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jmx/JMXPlugin.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jmx/JMXPlugin.java Wed Jul 31 11:00:47 2013
@@ -32,6 +32,6 @@ public class JMXPlugin implements Plugin
@Override
public String[] mappings() {
- return new String[] { "jmx" };
+ return new String[] { "jmx/*" };
}
}
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/MapBuilder.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/MapBuilder.java?rev=1508808&r1=1508431&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/MapBuilder.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/template/MapBuilder.java Wed Jul 31 11:00:47 2013
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.commons.monitoring.reporting.template;
+package org.apache.commons.monitoring.reporting.web.template;
import java.util.HashMap;
import java.util.Map;
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=1508808&r1=1508431&r2=1508808&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 Wed Jul 31 11:00:47 2013
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.commons.monitoring.reporting.template;
+package org.apache.commons.monitoring.reporting.web.template;
import org.apache.commons.monitoring.reporting.web.plugin.PluginRepository;
import org.apache.velocity.Template;
@@ -22,20 +22,16 @@ import org.apache.velocity.VelocityConte
import org.apache.velocity.app.Velocity;
import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.log.JdkLogChute;
+import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
-import javax.servlet.ServletContext;
import java.io.PrintWriter;
import java.util.Map;
import java.util.Properties;
public final class Templates {
- private static String base;
private static String mapping;
- private static ServletContext servletContext;
-
- public static void init(final ServletContext context, final String filterMapping) {
- servletContext = context;
+ public static void init(final String context, final String filterMapping) {
final Properties velocityConfiguration = new Properties();
velocityConfiguration.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, JdkLogChute.class.getName());
velocityConfiguration.setProperty(RuntimeConstants.ENCODING_DEFAULT, "UTF-8");
@@ -44,24 +40,18 @@ public final class Templates {
velocityConfiguration.setProperty(RuntimeConstants.RUNTIME_REFERENCES_STRICT, Boolean.TRUE.toString());
velocityConfiguration.setProperty(RuntimeConstants.RUNTIME_REFERENCES_STRICT_ESCAPE, Boolean.TRUE.toString());
velocityConfiguration.setProperty(RuntimeConstants.RESOURCE_LOADER, "monitoring");
- velocityConfiguration.setProperty("monitoring." + RuntimeConstants.RESOURCE_LOADER + ".class", WebResourceLoader.class.getName());
+ velocityConfiguration.setProperty("monitoring." + RuntimeConstants.RESOURCE_LOADER + ".class", ClasspathResourceLoader.class.getName());
Velocity.init(velocityConfiguration);
- base = context.getContextPath();
if (filterMapping.isEmpty()) {
- mapping = context.getContextPath();
+ mapping = context;
} else {
- mapping = context.getContextPath() + filterMapping;
+ mapping = context + filterMapping;
}
}
- public static ServletContext getServletContext() {
- return servletContext;
- }
-
public static void htmlRender(final PrintWriter writer, final String template, final Map<String, ?> variables) {
final VelocityContext context = newVelocityContext(variables);
- context.put("base", base);
context.put("mapping", mapping);
context.put("currentTemplate", template);
context.put("plugins", PluginRepository.PLUGIN_INFO);
@@ -75,7 +65,7 @@ public final class Templates {
public static void render(final PrintWriter writer, final String template, final Map<String, ?> variables) {
final VelocityContext context = newVelocityContext(variables);
- context.put("base", base);
+ context.put("mapping", mapping);
final Template velocityTemplate = Velocity.getTemplate(template, "UTF-8");
velocityTemplate.merge(context, writer);
}
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/resources/META-INF/NOTICE.txt
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/resources/META-INF/NOTICE.txt?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/resources/META-INF/NOTICE.txt (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/resources/META-INF/NOTICE.txt Wed Jul 31 11:00:47 2013
@@ -1,11 +1,18 @@
Table sorter
website: https://github.com/Mottie/tablesorter
-licence: MIT
+license: MIT
+
+------------------------
+
+Jstree
+
+website: http://www.jstree.com/
+license: MIT
------------------------
Bootswatch
website: http://bootswatch.com/
-licence: Apache v2
\ No newline at end of file
+license: Apache v2
\ No newline at end of file
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/resources/resources/css/monitoring.css
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/resources/resources/css/monitoring.css?rev=1508808&r1=1508431&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/resources/resources/css/monitoring.css (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/resources/resources/css/monitoring.css Wed Jul 31 11:00:47 2013
@@ -18,20 +18,45 @@ table .blue {
color: #049cdb;
border-bottom-color: #049cdb;
}
+
th#report-table {
text-align: center;
}
+
.tablesorter-headerAsc {
- background-image: url('$base/resources/images/asc.gif');
+ background-image: url('$mapping/resources/images/asc.gif');
background-repeat: no-repeat;
background-position: right;
}
.tablesorter-headerDesc {
- background-image: url('$base/resources/images/desc.gif');
+ background-image: url('$mapping/resources/images/desc.gif');
background-repeat: no-repeat;
background-position: right;
}
-.timeUnit {
- width: 5em;
+
+ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+li {
+ /*
+ background-image: url(page.png);
+ background-position: 0 1px;
+ background-repeat: no-repeat;
+ */
+ padding-left: 20px;
+}
+li.node {
+ /*background-image: url(folder.png);*/
+}
+
+a.nodeText {
+ color: #000000;
+ cursor: pointer;
+ text-decoration: none;
}
+a.nodeText:hover {
+ text-decoration: underline;
+}
\ No newline at end of file
Copied: commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/error.vm (from r1508431, commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/home.vm)
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/error.vm?p2=commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/error.vm&p1=commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/home.vm&r1=1508431&r2=1508808&rev=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/home.vm (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/error.vm Wed Jul 31 11:00:47 2013
@@ -14,18 +14,13 @@
See the License for the specific language governing permissions and
limitations under the License.
*#
-<div class=""container>
- <h1>Home</h1>
+<div class="container">
+ <h1>Error</h1>
- <div>
- Welcome to the Commons Monitoring Webapp. here is the list of available pages:
+ <div class="alert alert-error">
+ An error occured.
</div>
<div>
- <ul>
- <li><a href="$mapping/report">Report</a> (<a href="$mapping/report.xml">xml</a>, <a href="$mapping/report.json">json</a>, <a href="$mapping/report.csv">csv</a>)</li>
- #foreach ( $plugin in $plugins )
- <li><a href="$mapping/$plugin.url">$plugin.name</a></li>
- #end
- </ul>
+ $exception
</div>
-</div>
\ No newline at end of file
+</div>
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/home.vm
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/home.vm?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/home.vm (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/home.vm Wed Jul 31 11:00:47 2013
@@ -14,18 +14,16 @@
See the License for the specific language governing permissions and
limitations under the License.
*#
-<div class=""container>
- <h1>Home</h1>
+<h1>Home</h1>
- <div>
- Welcome to the Commons Monitoring Webapp. here is the list of available pages:
- </div>
- <div>
- <ul>
- <li><a href="$mapping/report">Report</a> (<a href="$mapping/report.xml">xml</a>, <a href="$mapping/report.json">json</a>, <a href="$mapping/report.csv">csv</a>)</li>
- #foreach ( $plugin in $plugins )
- <li><a href="$mapping/$plugin.url">$plugin.name</a></li>
- #end
- </ul>
- </div>
+<div>
+ Welcome to the Commons Monitoring Webapp. here is the list of available pages:
+</div>
+<div>
+ <ul>
+ <li><a href="$mapping/report">Report</a> (<a href="$mapping/report.xml">xml</a>, <a href="$mapping/report.json">json</a>, <a href="$mapping/report.csv">csv</a>)</li>
+ #foreach ( $plugin in $plugins )
+ <li><a href="$mapping/$plugin.rootUrl">$plugin.name</a></li>
+ #end
+ </ul>
</div>
\ No newline at end of file
Added: commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jmx/main.vm
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jmx/main.vm?rev=1508808&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jmx/main.vm (added)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jmx/main.vm Wed Jul 31 11:00:47 2013
@@ -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.
+*#
+#macro ( tree $tree )
+ <ul>
+ #foreach( $node in $tree.children )
+ #if ( $node.isLeaf() )
+ <li id="$node.base64" class="leaf">
+ #else
+ <li>
+ #end
+ $node.name
+ #tree ( $node )
+ </li>
+ #end
+ </ul>
+#end
+
+<div class="container-fluid">
+ <div class="row-fluid">
+ <div id="jmx-tree" class="span2">
+ #tree ( $jmxTree )
+ </div>
+ <div id="jmx-info" class="span10">
+ TODO
+ </div>
+ </div>
+</div>
+
+<script type="text/javascript">
+ $(function() {
+ $('li > ul').each(function (i) {
+ var parent_li = $(this).parent('li');
+ parent_li.addClass('node');
+
+ var sub_ul = $(this).remove();
+ parent_li.wrapInner('<a class="nodeText" />').find('a').click(function() {
+ sub_ul.toggle();
+ });
+ parent_li.append(sub_ul);
+ });
+ $('ul ul').hide();
+
+ $('.leaf').click(function () {
+ var url = '$mapping/jmx/' + $(this).attr("id");
+ $.get(url, function(data) {
+ $("#jmx-info").html(data);
+ });
+ });
+ });
+</script>
Copied: commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jmx/mbean.vm (from r1508431, commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/report.vm)
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jmx/mbean.vm?p2=commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jmx/mbean.vm&p1=commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/report.vm&r1=1508431&r2=1508808&rev=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/report.vm (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jmx/mbean.vm Wed Jul 31 11:00:47 2013
@@ -14,36 +14,38 @@
See the License for the specific language governing permissions and
limitations under the License.
*#
-<h1>Report</h1>
+<div class="page-header">
+ <h1><small>$objectname</small></h1>
+ <h2><small>$classname</small></h2>
+</div>
-<ul class="breadcrumb">
- <li><a href="$mapping/clear">Clear</a> <span class="divider">/</span></li>
- <li><a href="$mapping/reset">Reset</a> </li>
+<div class="alert alert-info">
+ $description
+</div>
- <li class="pull-right"><a href="$mapping/report?unit=s">s</a></li>
- <li class="pull-right"><a href="$mapping/report?unit=ms">ms</a> <span class="divider">/</span></li>
- <li class="pull-right"><a href="$mapping/report?unit=ns">ns</a> <span class="divider">/</span></li>
-</ul>
-
-<table id="report-table" class="table table-bordered table-striped table-hover">
+<table id="mbean-table" class="table table-bordered table-striped table-hover">
<thead>
<tr>
- #foreach( $header in $headers )
- <th>$header</th>
- #end
+ <th>Name</th>
+ <th>Description</th>
+ <th>Value</th>
+ <th>Type</th>
</tr>
</thead>
<tbody>
- #foreach( $line in $data )
+ #foreach( $attribute in $attributes )
<tr>
- #foreach( $item in $line )
- <td>$item</td>
- #end
+ <td>$attribute.name</td>
+ <td>$attribute.description</td>
+ <td>$attribute.value</td>
+ <td>$attribute.type</td>
</tr>
#end
</tbody>
</table>
+<script type="text/javascript" src="$mapping/resources/js/jquery.tablesorter.js"></script>
+<script type="text/javascript" src="$mapping/resources/js/jquery.tablesorter.widgets.js"></script>
<script type="text/javascript">
$(function() {
$("table#report-table").tablesorter({
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/page.vm
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/page.vm?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/page.vm (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/page.vm Wed Jul 31 11:00:47 2013
@@ -22,51 +22,49 @@
<title>Monitoring HTML Report</title>
- <link rel="stylesheet" href="$base/resources/css/bootstrap.min.css">
- <link rel="stylesheet" href="$base/resources/css/monitoring.css">
-
- <script type="text/javascript" src="$base/resources/js/jquery.min.js"></script>
- <script type="text/javascript" src="$base/resources/js/jquery.tablesorter.js"></script>
- <script type="text/javascript" src="$base/resources/js/jquery.tablesorter.widgets.js"></script>
+ <link rel="stylesheet" href="$mapping/resources/css/bootstrap.min.css">
+ <link rel="stylesheet" href="$mapping/resources/css/monitoring.css">
</head>
<body>
- <div class="navbar navbar-inverse">
- <div class="navbar-inner">
- <div class="container">
- <a class="brand" href="http://commons.apache.org/sandbox/commons-monitoring/">Commons Monitoring</a>
- <div class="nav-collapse">
- <ul class="nav">
- #if ( $templateId == "home")
- <li class="active">
- #else
- <li>
- #end
- <a href="$mapping/">Home</a>
- </li>
- #if ( $templateId == "report")
- <li class="active">
- #else
- <li>
- #end
- <a href="$mapping/report">Report</a>
- </li>
- #foreach ( $plugin in $plugins )
- #if ( $templateId == $plugin.name )
+ <div class="navbar navbar-inverse">
+ <div class="navbar-inner">
+ <div class="container">
+ <a class="brand" href="http://commons.apache.org/sandbox/commons-monitoring/">Commons Monitoring</a>
+ <div class="nav-collapse">
+ <ul class="nav">
+ #if ( $templateId == "home")
+ <li class="active">
+ #else
+ <li>
+ #end
+ <a href="$mapping/">Home</a>
+ </li>
+ #if ( $templateId == "report")
<li class="active">
#else
<li>
#end
- <a href="$mapping/$plugin.url">$plugin.name</a>
+ <a href="$mapping/report">Report</a>
</li>
- #end
- </ul>
- <ul class="nav pull-right">
- <li><a href="http://www.apache.org/">ASF</a></li>
- </ul>
+ #foreach ( $plugin in $plugins )
+ #if ( $templateId == $plugin.name )
+ <li class="active">
+ #else
+ <li>
+ #end
+ <a href="$mapping/$plugin.rootUrl">$plugin.name</a>
+ </li>
+ #end
+ </ul>
+ <ul class="nav pull-right">
+ <li><a href="http://www.apache.org/">ASF</a></li>
+ </ul>
+ </div>
</div>
</div>
</div>
- </div>
+
+ <script type="text/javascript" src="$mapping/resources/js/jquery.min.js"></script>
#parse( "/templates/$currentTemplate" )
</body>
Modified: commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/report.vm
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/report.vm?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/report.vm (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/report.vm Wed Jul 31 11:00:47 2013
@@ -44,6 +44,8 @@
</tbody>
</table>
+<script type="text/javascript" src="$mapping/resources/js/jquery.tablesorter.js"></script>
+<script type="text/javascript" src="$mapping/resources/js/jquery.tablesorter.widgets.js"></script>
<script type="text/javascript">
$(function() {
$("table#report-table").tablesorter({
Modified: commons/sandbox/monitoring/trunk/reporting/src/test/java/org/apache/commons/monitoring/reporting/FormatsTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/test/java/org/apache/commons/monitoring/reporting/FormatsTest.java?rev=1508808&r1=1508807&r2=1508808&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/test/java/org/apache/commons/monitoring/reporting/FormatsTest.java (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/test/java/org/apache/commons/monitoring/reporting/FormatsTest.java Wed Jul 31 11:00:47 2013
@@ -19,8 +19,8 @@ package org.apache.commons.monitoring.re
import org.apache.commons.monitoring.Role;
import org.apache.commons.monitoring.monitors.Monitor;
-import org.apache.commons.monitoring.reporting.format.CSVFormat;
-import org.apache.commons.monitoring.reporting.format.Format;
+import org.apache.commons.monitoring.reporting.web.handler.format.CSVFormat;
+import org.apache.commons.monitoring.reporting.web.handler.format.Format;
import org.apache.commons.monitoring.repositories.Repository;
import org.junit.AfterClass;
import org.junit.BeforeClass;