From 60d0b2976b39f280e41646e9e6596b28a8e07367 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Sun, 21 Apr 2013 15:41:34 +0000
Subject: [PATCH]  * AppManager:Add HTML debug output

---
 apps/routerconsole/jsp/debug.jsp              |  5 ++
 .../i2p/router/startup/RouterAppManager.java  | 53 +++++++++++++++++++
 2 files changed, 58 insertions(+)

diff --git a/apps/routerconsole/jsp/debug.jsp b/apps/routerconsole/jsp/debug.jsp
index 9f39b840e4..90bd964eb9 100644
--- a/apps/routerconsole/jsp/debug.jsp
+++ b/apps/routerconsole/jsp/debug.jsp
@@ -26,6 +26,11 @@
      */
     ctx.updateManager().renderStatusHTML(out);
 
+    /*
+     *  Print out the status for the AppManager
+     */
+    ctx.clientAppManager().renderStatusHTML(out);
+
     /*
      *  Print out the status for all the SessionKeyManagers
      */
diff --git a/router/java/src/net/i2p/router/startup/RouterAppManager.java b/router/java/src/net/i2p/router/startup/RouterAppManager.java
index 8b4c841f22..a311fe65d0 100644
--- a/router/java/src/net/i2p/router/startup/RouterAppManager.java
+++ b/router/java/src/net/i2p/router/startup/RouterAppManager.java
@@ -1,6 +1,11 @@
 package net.i2p.router.startup;
 
+import java.io.IOException;
+import java.io.Writer;
 import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -160,4 +165,52 @@ public class RouterAppManager implements ClientAppManager {
     public ClientApp getRegisteredApp(String name) {
         return _registered.get(name);
     }
+
+    /**
+     *  debug
+     *  @since 0.9.6
+     */
+    public void renderStatusHTML(Writer out) throws IOException {
+        StringBuilder buf = new StringBuilder(1024);
+        buf.append("<h2>App Manager</h2>");
+        buf.append("<h3>Tracked</h3>");
+        toString1(buf);
+        buf.append("<h3>Registered</h3>");
+        toString2(buf);
+        out.write(buf.toString());
+    }
+
+    /**
+     *  debug
+     *  @since 0.9.6
+     */
+    private void toString1(StringBuilder buf) {
+        List<String> list = new ArrayList(_clients.size());
+        for (Map.Entry<ClientApp, String[]> entry : _clients.entrySet()) {
+            ClientApp key = entry.getKey();
+            String[] val = entry.getValue();
+            list.add("[" + key.getName() + "] = [" + key.getClass().getName() + ' ' + Arrays.toString(val) + "] " + key.getState() + "<br>");
+        }
+        Collections.sort(list);
+        for (String e : list) {
+            buf.append(e);
+        }
+    }
+
+    /**
+     *  debug
+     *  @since 0.9.6
+     */
+    private void toString2(StringBuilder buf) {
+        List<String> list = new ArrayList(_registered.size());
+        for (Map.Entry<String, ClientApp> entry : _registered.entrySet()) {
+            String key = entry.getKey();
+            ClientApp val = entry.getValue();
+            list.add("[" + key + "] = [" + val.getClass().getName() + "]<br>");
+        }
+        Collections.sort(list);
+        for (String e : list) {
+            buf.append(e);
+        }
+    }
 }
-- 
GitLab