anchor.diff:  
       do_handle_per_node_processes(Resp, Node, DiagNoMasterEvents).
   
  -do_handle_per_node_processes(Resp, Node, PerNodeDiag) ->
  -    erlang:garbage_collect(),
  -
  -    Processes = proplists:get_value(processes, PerNodeDiag),
  -
  -    BabysitterProcesses0 = proplists:get_value(babysitter_processes, PerNodeDiag, []),
  +get_other_node_processes(Key, PerNodeDiag) ->
  +    Processes = proplists:get_value(Key, PerNodeDiag, []),
       %% it may be rpc or any other error; just pretend it's the process so that
       %% the error is visible
  -    BabysitterProcesses = case is_list(BabysitterProcesses0) of
  -                              true ->
  -                                  BabysitterProcesses0;
  -                              false ->
  -                                  [BabysitterProcesses0]
  -                          end,
  -
  -    DiagNoProcesses = lists:keydelete(processes, 1,
  -                                       lists:keydelete(babysitter_processes, 1, PerNodeDiag)),
  -
  +    case is_list(Processes) of
  +        true ->
  +            Processes;
  +        false ->
  +            [Processes]
  +    end.
  +
  +write_processes(Resp, Node, Key, Processes) ->
       misc:executing_on_new_process(
         fun () ->
  -              write_chunk_format(Resp, "per_node_processes(~p) =~n", [Node]),
  +              write_chunk_format(Resp, "per_node_~p(~p) =~n", [Key, Node]),
                 lists:foreach(
                   fun (Process) ->
                           write_chunk_format(Resp, "     ~p~n", [Process])
                   end, Processes),
                 Resp:write_chunk(<<"\n\n">>)
  -      end),
  -
  -    misc:executing_on_new_process(
  -      fun () ->
  -              write_chunk_format(Resp, "per_node_babysitter_processes(~p) =~n", [Node]),
  -              lists:foreach(
  -                fun (Process) ->
  -                        write_chunk_format(Resp, "     ~p~n", [Process])
  -                end, BabysitterProcesses),
  -              Resp:write_chunk(<<"\n\n">>)
  -      end),
  +      end).
  +
  +do_handle_per_node_processes(Resp, Node, PerNodeDiag) ->
  +    erlang:garbage_collect(),
  +
  +    Processes = proplists:get_value(processes, PerNodeDiag),
  +
  +    BabysitterProcesses = get_other_node_processes(babysitter_processes, PerNodeDiag),
  +    CouchdbProcesses = get_other_node_processes(couchdb_processes, PerNodeDiag),
  +
  +    DiagNoProcesses = lists:keydelete(
  +                        processes, 1,
  +                        lists:keydelete(babysitter_processes, 1,
  +                                        lists:keydelete(couchdb_processes, 1, PerNodeDiag))),
  +
  +    write_processes(Resp, Node, processes, Processes),
  +    write_processes(Resp, Node, babysitter_processes, BabysitterProcesses),
  +    write_processes(Resp, Node, couchdb_processes, CouchdbProcesses),
   
       do_handle_per_node_stats(Resp, Node, DiagNoProcesses).
   
  
positive.code:      {basic_info, element(2, ns_info:basic_info())},
       {processes, grab_process_infos()},
       {babysitter_processes, (catch grab_babysitter_process_infos())},
       {memory, memsup:get_memory_data()},
       {disk, (catch ns_disksup:get_disk_data())},
       {active_tasks, task_status_all()},
  
negative.code: 
  grab_babysitter_process_infos() ->
      rpc:call(ns_server:get_babysitter_node(), ?MODULE, grab_process_infos, [], 5000).
  
  grab_couchdb_process_infos() ->
      rpc:call(ns_node_disco:couchdb_node(), ?MODULE, grab_process_infos, [], 5000).
  
  grab_process_infos() ->
      grab_process_infos_loop(erlang:processes(), []).
  