From bf5938ee1d3312ac9d4266732abaa89d5a478e80 Mon Sep 17 00:00:00 2001 From: Badlop Date: Wed, 22 Jun 2011 13:44:36 +0200 Subject: [PATCH] Provide list of registered pids/ports --- src/web/ejabberd_web_admin.erl | 39 +++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/src/web/ejabberd_web_admin.erl b/src/web/ejabberd_web_admin.erl index 24e326799..b28923baf 100644 --- a/src/web/ejabberd_web_admin.erl +++ b/src/web/ejabberd_web_admin.erl @@ -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),