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/08/01 14:22:30 UTC

svn commit: r1509201 - in /commons/sandbox/monitoring/trunk: core/src/main/java/org/apache/commons/monitoring/configuration/ core/src/main/java/org/apache/commons/monitoring/counter/ reporting/src/main/java/org/apache/commons/monitoring/reporting/web/p...

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