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/12 13:32:55 UTC

svn commit: r1513110 - in /commons/sandbox/monitoring/trunk/reporting/src/main: java/org/apache/commons/monitoring/reporting/web/plugin/thread/ resources/META-INF/services/ resources/templates/threads/

Author: rmannibucau
Date: Mon Aug 12 11:32:54 2013
New Revision: 1513110

URL: http://svn.apache.org/r1513110
Log:
adding thread plugin

Added:
    commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/thread/
    commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/thread/ThreadEndpoints.java
    commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/thread/ThreadPlugin.java
    commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/threads/
    commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/threads/thread.vm
    commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/threads/threads.vm
Modified:
    commons/sandbox/monitoring/trunk/reporting/src/main/resources/META-INF/services/org.apache.commons.monitoring.reporting.web.plugin.Plugin

Added: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/thread/ThreadEndpoints.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/thread/ThreadEndpoints.java?rev=1513110&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/thread/ThreadEndpoints.java (added)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/thread/ThreadEndpoints.java Mon Aug 12 11:32:54 2013
@@ -0,0 +1,86 @@
+/*
+ * 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.thread;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.commons.monitoring.reporting.web.handler.api.Regex;
+import org.apache.commons.monitoring.reporting.web.handler.api.Template;
+import org.apache.commons.monitoring.reporting.web.template.MapBuilder;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+public class ThreadEndpoints {
+    @Regex
+    public Template home() {
+        return new Template("threads/threads.vm", new MapBuilder<String, Object>()
+                                .set("threads", listThreads())
+                                .build());
+    }
+
+    @Regex("/([^/]*)")
+    public Template dump(final String name) {
+        final Thread thread = findThread(new String(Base64.decodeBase64(name)));
+        if (thread == null) {
+            return new Template("templates/threads/thread.vm", new MapBuilder<String, Object>().set("state", "Not found").build(), false);
+        }
+
+        return new Template(
+                "templates/threads/thread.vm",
+                new MapBuilder<String, Object>().set("state", thread.getState().name()).set("dump", StringEscapeUtils.escapeHtml4(dump(thread))).build(),
+                false);
+    }
+
+    private static Thread findThread(final String name) {
+        int count = Thread.activeCount();
+        final Thread[] threads = new Thread[count];
+        count = Thread.enumerate(threads);
+
+        for (int i = 0; i < count; i++) {
+            if (threads[i].getName().equals(name)) {
+                return threads[i];
+            }
+        }
+
+        return null;
+    }
+
+    private static String dump(final Thread thread) {
+        final StackTraceElement[] stack = thread.getStackTrace();
+        final StringBuilder builder = new StringBuilder();
+        for (final StackTraceElement element : stack) {
+            builder.append(element.toString()).append("\n"); // toString method is fine
+        }
+        return builder.toString();
+    }
+
+    private static Map<String, String> listThreads() {
+        final Map<String, String> out = new TreeMap<String, String>();
+
+        int count = Thread.activeCount();
+        final Thread[] threads = new Thread[count];
+        count = Thread.enumerate(threads);
+
+        for (int i = 0; i < count; i++) {
+            final String name = threads[i].getName();
+            out.put(name, Base64.encodeBase64String(name.getBytes()));
+        }
+
+        return out;
+    }
+}

Added: commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/thread/ThreadPlugin.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/thread/ThreadPlugin.java?rev=1513110&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/thread/ThreadPlugin.java (added)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/java/org/apache/commons/monitoring/reporting/web/plugin/thread/ThreadPlugin.java Mon Aug 12 11:32:54 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.thread;
+
+import org.apache.commons.monitoring.reporting.web.plugin.Plugin;
+
+public class ThreadPlugin implements Plugin {
+    @Override
+    public String name() {
+        return "Threads";
+    }
+
+    @Override
+    public Class<?> endpoints() {
+        return ThreadEndpoints.class;
+    }
+
+    @Override
+    public String mapping() {
+        return "/threads";
+    }
+}

Modified: commons/sandbox/monitoring/trunk/reporting/src/main/resources/META-INF/services/org.apache.commons.monitoring.reporting.web.plugin.Plugin
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/resources/META-INF/services/org.apache.commons.monitoring.reporting.web.plugin.Plugin?rev=1513110&r1=1513109&r2=1513110&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/resources/META-INF/services/org.apache.commons.monitoring.reporting.web.plugin.Plugin (original)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/resources/META-INF/services/org.apache.commons.monitoring.reporting.web.plugin.Plugin Mon Aug 12 11:32:54 2013
@@ -2,3 +2,4 @@ org.apache.commons.monitoring.reporting.
 org.apache.commons.monitoring.reporting.web.plugin.jmx.JMXPlugin
 org.apache.commons.monitoring.reporting.web.plugin.jvm.JVMPlugin
 org.apache.commons.monitoring.reporting.web.plugin.jta.JTAPlugin
+org.apache.commons.monitoring.reporting.web.plugin.thread.ThreadPlugin

Added: commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/threads/thread.vm
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/threads/thread.vm?rev=1513110&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/threads/thread.vm (added)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/threads/thread.vm Mon Aug 12 11:32:54 2013
@@ -0,0 +1,24 @@
+#*
+  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.
+*#
+<p>
+    State: $state
+</p>
+<p>
+        #if ($dump)
+$dump
+        #end
+</p>
\ No newline at end of file

Added: commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/threads/threads.vm
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/threads/threads.vm?rev=1513110&view=auto
==============================================================================
--- commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/threads/threads.vm (added)
+++ commons/sandbox/monitoring/trunk/reporting/src/main/resources/templates/threads/threads.vm Mon Aug 12 11:32:54 2013
@@ -0,0 +1,49 @@
+#*
+  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.
+*#
+<div class="page-header">
+    <h2>Threads</h2>
+</div>
+
+<div class="container-fluid">
+    <div class="row-fluid">
+        <div class="span2" style="word-break: break-all; word-wrap: break-word;">
+            #foreach ($thread in $threads.entrySet())
+                <ul>
+                    <li><a id="$thread.value" class="thread" href="#">$thread.key</a></li>
+                </ul>
+            #end
+        </div>
+        <div class="span6">
+            <div id="thread-info" class="span10">
+                Click on the left list to select a thread to show.
+            </div>
+        </div>
+    </div>
+</div>
+
+<script type="text/javascript">
+    $(function() {
+        $('.thread').click(function (evt) {
+            evt.preventDefault();
+
+            var url = '$mapping/threads/' + $(this).attr("id");
+            $.get(url, function(data) {
+                $("#thread-info").html(data);
+            });
+        });
+    });
+</script>