Created
September 8, 2016 20:59
-
-
Save ashneyderman/add6e80e9d71c5a5b36e886ce8449cee to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule SocketsPry do | |
def pes({Phoenix.Endpoint.Server, _, _, _}), do: true | |
def pes(_), do: false | |
def rls({{:ranch_listener_sup,_}, _, _, _}), do: true | |
def rls(_), do: false | |
def rcs({:ranch_conns_sup, _, _, _}), do: true | |
def rcs(_), do: false | |
def sockets(p) when is_pid(p) do | |
case p |> Process.info(:dictionary) do | |
{:dictionary, d} -> | |
case (d |> Enum.into(%{}) |> Map.get(:"$initial_call")) do | |
{Phoenix.Channel.Server, _, _} -> true | |
_ -> false | |
end | |
other -> false | |
end | |
end | |
def sockets(_), do: false | |
def f(ref, filter) do | |
ref |> Supervisor.which_children |> Enum.filter(filter) |> List.first |> elem(1) | |
end | |
def all do | |
MobileApi.Endpoint |> f(&pes/1) | |
|> f(&rls/1) | |
|> f(&rcs/1) | |
|> Supervisor.which_children |> Enum.flat_map(&( elem(&1, 1) |> Process.info(:links) |> elem(1) )) | |
|> Enum.filter(&sockets/1) | |
|> Enum.map(fn(pid) -> | |
%Phoenix.Socket{ | |
assigns: assigns_map, | |
topic: topic, | |
transport_pid: transport_pid} = :sys.get_state(pid) | |
{transport_pid, pid, topic, assigns_map} | |
end) | |
end | |
def show_all do | |
all |> Enum.each(fn({tpid, cpid, topic, assigns_map}) -> | |
IO.puts "#{inspect tpid} : #{inspect cpid} : #{inspect topic} : #{inspect assigns_map, pretty: true}" | |
end) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment