Repository: qpid-broker-j
Updated Branches:
  refs/heads/master 0e4b9c556 -> 0c180ff35


QPID-7886: [Java Broker] Expose ability to get a thread dump from the WMC

Also added textual preamble to thread dumps, including the current date/time


Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/0c180ff3
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/0c180ff3
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/0c180ff3

Branch: refs/heads/master
Commit: 0c180ff357a028c058715972c60e17c1634f1ea8
Parents: 0e4b9c5
Author: Keith Wall <keith.w...@gmail.com>
Authored: Thu Aug 10 22:26:36 2017 +0100
Committer: Keith Wall <keith.w...@gmail.com>
Committed: Thu Aug 10 22:28:26 2017 +0100

----------------------------------------------------------------------
 .../qpid/server/model/AbstractContainer.java     |  7 +++++++
 .../plugin/servlet/rest/RestServlet.java         | 14 ++++++--------
 .../java/resources/js/qpid/management/Broker.js  | 19 +++++++++++++++++++
 .../resources/js/qpid/management/Management.js   |  4 ++--
 .../src/main/java/resources/showBroker.html      |  7 +++++++
 5 files changed, 41 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0c180ff3/broker-core/src/main/java/org/apache/qpid/server/model/AbstractContainer.java
----------------------------------------------------------------------
diff --git 
a/broker-core/src/main/java/org/apache/qpid/server/model/AbstractContainer.java 
b/broker-core/src/main/java/org/apache/qpid/server/model/AbstractContainer.java
index 86e6288..868e933 100644
--- 
a/broker-core/src/main/java/org/apache/qpid/server/model/AbstractContainer.java
+++ 
b/broker-core/src/main/java/org/apache/qpid/server/model/AbstractContainer.java
@@ -33,6 +33,7 @@ import java.lang.management.ThreadMXBean;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.nio.charset.Charset;
+import java.time.Instant;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -360,6 +361,8 @@ public abstract class AbstractContainer<X extends 
AbstractContainer<X>> extends
         ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
         ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(true, true);
         StringBuilder threadDump = new StringBuilder();
+        threadDump.append(String.format("Full thread dump captured %s", 
Instant.now())).append(System.lineSeparator());
+
         for (ThreadInfo threadInfo : threadInfos)
         {
             threadDump.append(getThreadStackTraces(threadInfo));
@@ -388,6 +391,10 @@ public abstract class AbstractContainer<X extends 
AbstractContainer<X>> extends
         ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
         ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(true, true);
         StringBuilder threadDump = new StringBuilder();
+        threadDump.append(String.format("Thread dump (names matching '%s') 
captured %s",
+                                        threadNameFindExpression,
+                                        
Instant.now())).append(System.lineSeparator());
+
         Pattern pattern = threadNameFindExpression == null || 
threadNameFindExpression.equals("") ? null : Pattern.compile(
                 threadNameFindExpression);
         for (ThreadInfo threadInfo : threadInfos)

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0c180ff3/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
 
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
index 5e25894..92f58d5 100644
--- 
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
+++ 
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
@@ -646,6 +646,12 @@ public class RestServlet extends AbstractServlet
         }
 
         Object returnVal = operation.perform(target, operationArguments);
+        String attachmentFilename = 
request.getParameter(CONTENT_DISPOSITION_ATTACHMENT_FILENAME_PARAM);
+        if (attachmentFilename != null)
+        {
+            setContentDispositionHeaderIfNecessary(response, 
attachmentFilename);
+        }
+
         if(returnVal instanceof Content)
         {
             Content content = (Content)returnVal;
@@ -684,14 +690,6 @@ public class RestServlet extends AbstractServlet
                 }
                 returnVal = output;
             }
-
-            String attachmentFilename = 
request.getParameter(CONTENT_DISPOSITION_ATTACHMENT_FILENAME_PARAM);
-
-            if (attachmentFilename != null)
-            {
-                setContentDispositionHeaderIfNecessary(response, 
attachmentFilename);
-            }
-
             sendJsonResponse(returnVal, request, response);
         }
     }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0c180ff3/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
----------------------------------------------------------------------
diff --git 
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
 
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
index b7dfa23..68f99f8 100644
--- 
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
+++ 
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
@@ -199,6 +199,17 @@ define(["dojo/parser",
                             event.stop(evt);
                         });
 
+                        var brokerDiagnosticsMenu = 
registry.byNode(query(".brokerDiagnosticsMenu",
+                                                                          
contentPane.containerNode)[0]);
+
+                        var hostMenuItems = 
brokerDiagnosticsMenu.dropDown.getChildren();
+                        var downloadJvmThreadDumpButton = hostMenuItems[0];
+                        downloadJvmThreadDumpButton.on("click", function (evt)
+                        {
+                            that.downloadJvmThreadDump();
+                            event.stop(evt);
+                        });
+
                         var addKeystoreButton = query(".addKeystore", 
contentPane.containerNode)[0];
                         connect.connect(registry.byNode(addKeystoreButton), 
"onClick", function (evt)
                         {
@@ -345,6 +356,14 @@ define(["dojo/parser",
             }
         };
 
+        Broker.prototype.downloadJvmThreadDump = function()
+        {
+            var suggestedAttachmentName = encodeURIComponent("QpidBroker_" + 
this.name + "_ThreadDump.txt");
+            this.management.downloadIntoFrame(this.modelObj, {
+                contentDispositionAttachmentFilename: suggestedAttachmentName
+            }, "getThreadStackTraces");
+        };
+
         Broker.prototype.close = function ()
         {
             updater.remove(this.brokerUpdater);

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0c180ff3/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
----------------------------------------------------------------------
diff --git 
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
 
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
index 703525b..a2af583 100644
--- 
a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
+++ 
b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
@@ -348,9 +348,9 @@ define(["dojo/_base/lang",
 
         // summary:
         //  Downloads current JSON for object specified as modelObj argument 
into iframe
-        Management.prototype.downloadIntoFrame = function (modelObj, 
parameters)
+        Management.prototype.downloadIntoFrame = function (modelObj, 
parameters, operation)
         {
-            var url = this.buildObjectURL(modelObj, parameters);
+            var url = this.buildObjectURL(modelObj, parameters, operation);
             var iframe = document.createElement('iframe');
             iframe.id = "downloader_" + modelObj.name;
             document.body.appendChild(iframe);

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0c180ff3/broker-plugins/management-http/src/main/java/resources/showBroker.html
----------------------------------------------------------------------
diff --git 
a/broker-plugins/management-http/src/main/java/resources/showBroker.html 
b/broker-plugins/management-http/src/main/java/resources/showBroker.html
index cd7f20f..4d0df82 100644
--- a/broker-plugins/management-http/src/main/java/resources/showBroker.html
+++ b/broker-plugins/management-http/src/main/java/resources/showBroker.html
@@ -65,6 +65,13 @@
         <div class="dijitDialogPaneActionBar">
             <button data-dojo-type="dijit.form.Button" 
class="editBroker">Edit</button>
             <button data-dojo-type="dijit.form.Button" 
class="restartBroker">Restart</button>
+            <div data-dojo-type="dijit.form.DropDownButton" 
data-dojo-props="iconClass: 'dijitIconFunction'" class="brokerDiagnosticsMenu">
+                <span>Diagnostics</span>
+                <div data-dojo-type="dijit.Menu">
+                    <div data-dojo-type="dijit.MenuItem"
+                         data-dojo-props="iconClass: 
'downloadLogsIcon'">Download JVM thread-dump</div>
+                </div>
+            </div>
         </div>
    </div>
     <br/>


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to