Author: rmannibucau Date: Thu Aug 1 12:22:30 2013 New Revision: 1509201 URL: http://svn.apache.org/r1509201 Log: hooking a JVM plugin (to implement)
Added: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jvm/ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jvm/JVMHandler.java commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jvm/JVMPlugin.java commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jvm/ commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jvm/jvm.vm - copied, changed from r1509184, commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jmx/main.vm Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/configuration/Configuration.java commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counter/Role.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 Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/configuration/Configuration.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/configuration/Configuration.java?rev=1509201&r1=1509200&r2=1509201&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/configuration/Configuration.java (original) +++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/configuration/Configuration.java Thu Aug 1 12:22:30 2013 @@ -83,7 +83,7 @@ public final class Configuration { if (m.getAnnotation(Created.class) != null) { m.invoke(instance); } else if (m.getAnnotation(Destroying.class) != null) { - if (is("org.apache.commons.monitoring.shutdown.hook", false) && shutdownHook == null) { + if (shutdownHook == null == is(COMMONS_MONITORING_PREFIX + ".shutdown.hook", false)) { shutdownHook = new Thread() { @Override public void run() { Modified: commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counter/Role.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counter/Role.java?rev=1509201&r1=1509200&r2=1509201&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counter/Role.java (original) +++ commons/sandbox/monitoring/trunk/core/src/main/java/org/apache/commons/monitoring/counter/Role.java Thu Aug 1 12:22:30 2013 @@ -27,7 +27,7 @@ import static org.apache.commons.monitor */ public class Role implements Comparable<Role> { public static final Role WEB = new Role("web", NANOSECOND); - public static final Role JSP = new Role("web", NANOSECOND); + public static final Role JSP = new Role("jsp", NANOSECOND); public static final Role JDBC = new Role("jdbc", NANOSECOND); public static final Role PERFORMANCES = new Role("performances", NANOSECOND); public static final Role FAILURES = new Role("failures", Unit.UNARY); 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=1509201&r1=1509200&r2=1509201&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 Thu Aug 1 12:22:30 2013 @@ -41,7 +41,7 @@ public class PluginRepository { final Class<? extends Handler> handler = plugin.handler(); if (mapping != null && handler != null) { try { - final Handler handlerInstance = new PluginDecoratorHandler(handler.newInstance(), name); + final Handler handlerInstance = new PluginDecoratorHandler(Configuration.newInstance(handler), name); PLUGIN_INFO.add(new PluginInfo(mapping, handlerInstance, name)); } catch (final Exception e) { throw new MonitoringException(e); 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=1509201&r1=1509200&r2=1509201&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 Thu Aug 1 12:22:30 2013 @@ -117,7 +117,7 @@ public class JMXHandler extends HandlerR @Override protected String getTemplate() { - return "jmx/main.vm"; + return "jmx/jvm.vm"; } @Override Added: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jvm/JVMHandler.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jvm/JVMHandler.java?rev=1509201&view=auto ============================================================================== --- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jvm/JVMHandler.java (added) +++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jvm/JVMHandler.java Thu Aug 1 12:22:30 2013 @@ -0,0 +1,36 @@ +/* + * 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.jvm; + +import org.apache.commons.monitoring.reporting.web.handler.HandlerRendererAdapter; +import org.apache.commons.monitoring.reporting.web.template.MapBuilder; +import org.apache.commons.monitoring.repositories.Repository; + +import java.util.Map; + +public class JVMHandler extends HandlerRendererAdapter { + protected String getTemplate() { + return "jvm/jvm.vm"; + } + + protected Map<String,?> getVariables() { + return new MapBuilder<String, Object>() + .set("cpu", Repository.INSTANCE.getCounter(JVMPlugin.CPU_KEY).getMean()) + .set("memory", Repository.INSTANCE.getCounter(JVMPlugin.MEMORY_KEY).getMean()) + .build(); + } +} Added: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jvm/JVMPlugin.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jvm/JVMPlugin.java?rev=1509201&view=auto ============================================================================== --- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jvm/JVMPlugin.java (added) +++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/jvm/JVMPlugin.java Thu Aug 1 12:22:30 2013 @@ -0,0 +1,87 @@ +/* + * 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.jvm; + +import org.apache.commons.monitoring.configuration.Configuration; +import org.apache.commons.monitoring.counter.Counter; +import org.apache.commons.monitoring.counter.Role; +import org.apache.commons.monitoring.counter.Unit; +import org.apache.commons.monitoring.reporting.web.handler.Handler; +import org.apache.commons.monitoring.reporting.web.plugin.Plugin; +import org.apache.commons.monitoring.repositories.Repository; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.OperatingSystemMXBean; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Timer; +import java.util.TimerTask; + +public class JVMPlugin implements Plugin { + public static final Counter.Key CPU_KEY = new Counter.Key(new Role("cpu", Unit.Time.MILLISECOND), "CPU"); + public static final Counter.Key MEMORY_KEY = new Counter.Key(new Role("memory", Unit.Time.MILLISECOND), "Memory"); + + private static final OperatingSystemMXBean SYSTEM_MX_BEAN = ManagementFactory.getOperatingSystemMXBean(); + private static final MemoryMXBean MEMORY_MX_BEAN = ManagementFactory.getMemoryMXBean(); + + private final Timer timer; + + // TODO: limit size + make it accessible to the jvm handler + private final Collection<Double> cpuHistory = new ArrayList<Double>(); + private final Collection<Long> memHistory = new ArrayList<Long>(); + + public JVMPlugin() { + // TODO: save values in a sized list (= historical values) + final Counter cpu = Repository.INSTANCE.getCounter(CPU_KEY); + final Counter memory = Repository.INSTANCE.getCounter(MEMORY_KEY); + + timer = new Timer("monitoring-jvm", true); + timer.scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + final double systemLoadAverage = SYSTEM_MX_BEAN.getSystemLoadAverage(); + cpu.add(systemLoadAverage); + cpuHistory.add(systemLoadAverage); + + final long used = MEMORY_MX_BEAN.getHeapMemoryUsage().getUsed(); + memory.add(used); + memHistory.add(used); + } + }, 0L, Long.parseLong(Configuration.getProperty(Configuration.COMMONS_MONITORING_PREFIX + "jvm.rate", "60000"))); + } + + @Configuration.Destroying + public void stop() { + timer.cancel(); + } + + @Override + public String name() { + return "JVM"; + } + + @Override + public Class<? extends Handler> handler() { + return JVMHandler.class; + } + + @Override + public String mapping() { + return "jvm"; + } +} Copied: commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jvm/jvm.vm (from r1509184, 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/jvm/jvm.vm?p2=commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jvm/jvm.vm&p1=commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jmx/main.vm&r1=1509184&r2=1509201&rev=1509201&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jmx/main.vm (original) +++ commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/jvm/jvm.vm Thu Aug 1 12:22:30 2013 @@ -14,52 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. *# -#macro ( tree $tree ) - <ul class="jmx"> - #foreach( $node in $tree.children ) - #if ( $node.isLeaf() ) - <li id="$node.base64" class="jmx leaf"> - #else - <li class="jmx"> - #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"> - Click on the left tree to select a leaf to show the attributes of a MBean. - </div> - </div> -</div> - -<script type="text/javascript" src="$mapping/resources/js/bootstrap-tab.js"></script> -<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> +Memory mean: $memory +CPU mean: $cpu