From 9d1bd29ee527b598f0e91a9d02920eaacb3f767d Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Wed, 07 May 2014 09:27:48 +0000
Subject: [PATCH] OPENDJ-1388 – Implement simple changelog db based on single log file

---
 opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java |   48 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 47 insertions(+), 1 deletions(-)

diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
index 5514ab7..bc3aee3 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
@@ -22,13 +22,17 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  *      Portions Copyright 2013 Manuel Gaupp
  */
 package org.opends.server;
 
 import java.io.*;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadInfo;
+import java.lang.management.ThreadMXBean;
 import java.net.*;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.logging.ConsoleHandler;
 import java.util.logging.Handler;
@@ -1926,4 +1930,46 @@
     return new ArrayList<T>(Arrays.asList(elems));
   }
 
+  /** Saves a thread dump in a file with the provided id used in file prefix. */
+  public static void generateThreadDump(String id)
+  {
+    String date = new SimpleDateFormat("yyyyMMdd_hhmmss").format(new Date().getTime());
+    BufferedWriter writer = null;
+    try
+    {
+      writer = new BufferedWriter(new FileWriter("/tmp/thread_dump_" + id + "_" + date));
+      writer.write(generateThreadDump());
+    }
+    catch (Exception e)
+    {
+      // do nothing
+    }
+    finally
+    {
+      close(writer);
+    }
+  }
+
+   /** Generates a thread dump programmatically. */
+  public static String generateThreadDump() {
+    final StringBuilder dump = new StringBuilder();
+    final ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
+    final ThreadInfo[] threadInfos = threadMXBean.getThreadInfo(threadMXBean.getAllThreadIds(), 100);
+    for (ThreadInfo threadInfo : threadInfos) {
+        dump.append('"');
+        dump.append(threadInfo.getThreadName());
+        dump.append("\" ");
+        final Thread.State state = threadInfo.getThreadState();
+        dump.append("\n   java.lang.Thread.State: ");
+        dump.append(state);
+        final StackTraceElement[] stackTraceElements = threadInfo.getStackTrace();
+        for (final StackTraceElement stackTraceElement : stackTraceElements) {
+            dump.append("\n        at ");
+            dump.append(stackTraceElement);
+        }
+        dump.append("\n\n");
+    }
+    return dump.toString();
+}
+
 }

--
Gitblit v1.10.0