]> granicus.if.org Git - ejabberd/commitdiff
Provide list of registered pids/ports
authorBadlop <badlop@process-one.net>
Wed, 22 Jun 2011 11:44:36 +0000 (13:44 +0200)
committerBadlop <badlop@process-one.net>
Thu, 23 Jun 2011 14:26:39 +0000 (16:26 +0200)
src/web/ejabberd_web_admin.erl

index 24e3267991cc2f511df734556012ac29ac5e9191..b28923baf1a690b5c5a858fa1c598e35d126a23b 100644 (file)
@@ -2443,8 +2443,17 @@ get_node(global, Node, ["backup"], Query, Lang) ->
 
 get_node(global, Node, ["pid"], _Query, Lang) ->
     NodeS = atom_to_list(Node),
+    Registered = lists:reverse(lists:sort(rpc:call(Node, erlang, registered, []))),
     Processes = rpc:call(Node, erlang, processes, []),
     ProcessesNumber = length(Processes),
+    RegisteredList = lists:foldl(
+                     fun(P, RRL) ->
+                             PS = atom_to_list(P),
+                             NodePidS = NodeS ++ "/pid/" ++ PS,
+                             [?AC("/admin/node/" ++ NodePidS ++ "/", PS), ?BR | RRL]
+                     end,
+                     [],
+                     Registered),
     ProcessesList = lists:map(
                      fun(P) ->
                              PS = pid_to_list(P),
@@ -2461,10 +2470,23 @@ get_node(global, Node, ["pid"], _Query, Lang) ->
               ])
          ]),
      ?XAE('p', [],
-         [?CT("Processes: ")] ++ ProcessesList
+         [?CT("Registered processes and ports: ")] ++ RegisteredList
+        ),
+     ?XAE('p', [],
+         [?CT("Total processes: ")] ++ ProcessesList
         )];
 
-get_node(global, Node, ["pid", PidS], _Query, Lang) ->
+get_node(global, Node, ["pid", [Char1|_] = RegS], _Query, Lang) when Char1 /= $< ->
+    Ref = whereis(list_to_atom(RegS)),
+    {Type, PidS} = try
+       {"process", pid_to_list(Ref)}
+    catch
+       error:badarg ->
+           {"port", RegS}
+    end,
+    get_node(global, Node, ["pid", Type, PidS], _Query, Lang);
+
+get_node(global, Node, ["pid", "process" = Type, PidS], _Query, Lang) ->
     NodeS = atom_to_list(Node),
     ProcessInfo = rpc:call(Node, erlang, process_info, [list_to_pid(PidS)]),
     ProcessInfoS = io_lib:format("~p", [ProcessInfo]),
@@ -2473,7 +2495,7 @@ get_node(global, Node, ["pid", PidS], _Query, Lang) ->
                       {match, PidsRareList} ->
                           lists:map(
                             fun([PS]) ->
-                                    NodePidS = NodeS ++ "/pid/" ++ PS,
+                                    NodePidS = NodeS ++ "/pid/" ++ Type ++ "/" ++ PS,
                                     ?AC("/admin/node/" ++ NodePidS ++ "/", PS)
                             end,
                             PidsRareList);
@@ -2495,7 +2517,7 @@ get_node(global, Node, ["pid", PidS], _Query, Lang) ->
            _ ->
                []
        end,
-    [?XC('h1', io_lib:format(?T("Erlang Process ~s at node ~p"), [PidS, Node])),
+    [?XC('h1', io_lib:format(?T("Erlang process ~s at node ~p"), [PidS, Node])),
      ?XC('h3', ?T("Process Information:")),
      ?XAE('pre', [], [?C(ProcessInfoS)]),
      ?XC('h3', ?T("Related Processes:")),
@@ -2506,6 +2528,14 @@ get_node(global, Node, ["pid", PidS], _Query, Lang) ->
           || {PortName, PortDescr} <- PortLinkList])
     ];
 
+get_node(global, Node, ["pid", "port", PidS], _Query, Lang) ->
+    ProcessInfo = rpc:call(Node, erlang, port_info, [list_to_atom(PidS)]),
+    ProcessInfoS = io_lib:format("~p", [ProcessInfo]),
+    [?XC('h1', io_lib:format(?T("Erlang port ~s at node ~p"), [PidS, Node])),
+     ?XC('h3', ?T("Port Information:")),
+     ?XAE('pre', [], [?C(ProcessInfoS)])
+    ];
+
 get_node(global, Node, ["ports"], Query, Lang) ->
     Ports = rpc:call(Node, ejabberd_config, get_local_option, [listen]),
     Res = case catch node_ports_parse_query(Node, Ports, Query) of
@@ -3134,7 +3164,6 @@ make_host_menu(Host, HostNodeMenu, Lang, JID) ->
                 {"online-users", "Online Users"},
                 {"last-activity", "Last Activity"},
                 {"nodes", "Nodes", HostNodeMenu},
-                {"misc", "Miscelanea Options"},
                 {"stats", "Statistics"}]
        ++ get_menu_items_hook({host, Host}, Lang),
     HostBasePath = url_to_path(HostBase),