Combo. Debug
(combo v0.11.0)
View Source
Functions for runtime introspection and debugging.
At the moment, it only includes functions related to Combo.Socket and
Combo.Channel processes.
It allows you to:
- List all currently connected
Combo.Sockettransport processes. - List all channels for a given
Combo.Socketprocess. - Get the socket of a channel process.
- Check if a process is a
Combo.SocketorCombo.Channel.
Summary
Functions
Checks if the given pid is a Combo.Channel process.
Returns a list of all currently connected channels for the given Combo.Socket pid.
Returns a list of all currently connected Combo.Socket transport processes.
Returns the socket of the channel process.
Returns true if the given pid is a Combo.Socket transport process.
Functions
Checks if the given pid is a Combo.Channel process.
Custom channels
This function alawys returns false for
custom channels.
Returns a list of all currently connected channels for the given Combo.Socket pid.
Each channel is represented as a map with the following keys:
:pid- the pid of the channel process:status- the status of the channel:topic- the topic of the channel
Custom channels
Note that the list also contains custom channels.
You can check if a channel is a custom channel by using the channel_process?/1
function, which returns false for custom channels.
Examples
iex> pid = Combo.Debug.list_sockets() |> Enum.at(0) |> Map.fetch!(:pid)
iex> Combo.Debug.list_channels(pid)
{:ok,
[
%{pid: #PID<0.1702.0>, status: :joined, topic: "t1"},
%{pid: #PID<0.1727.0>, status: :joined, topic: "t2"}
]}
iex> Combo.Debug.list_channels(pid(0,456,0))
{:error, :not_alive}
Returns a list of all currently connected Combo.Socket transport processes.
Note that custom sockets implementing the Combo.Socket.Transport behaviour
are not listed.
Each process corresponds to one connection that can have multiple channels.
See Combo.Debug.list_channels/1.
Examples
iex> Combo.Debug.list_sockets()
[%{pid: #PID<0.123.0>, module: Combo.Socket, id: nil}]
Returns the socket of the channel process.
Note: this only works for channels defined with use Combo.Channel.
Examples
iex> pid = Combo.Debug.list_sockets() |> Enum.at(0) |> Map.fetch!(:pid)
iex> {:ok, channels} = Combo.Debug.list_channels(pid)
iex> channels |> Enum.at(0) |> Map.fetch!(:pid) |> socket()
{:ok, %Combo.Socket{...}}
iex> socket(pid(0,456,0))
{:error, :not_alive_or_not_a_channel}
Returns true if the given pid is a Combo.Socket transport process.
It returns false for custom sockets implementing the Combo.Socket.Transport behaviour.
Examples
iex> Combo.Debug.list_sockets() |> Enum.at(0) |> Map.fetch!(:pid) |> socket_process?()
true
iex> socket_process?(pid(0,456,0))
false