Phoenix.SessionProcess.Helpers (phoenix_session_process v1.0.1)

Copy Markdown View Source

Helper functions for common session management tasks.

This module provides convenient functions for batch operations, session health checks, and common patterns.

Summary

Functions

Broadcast a message to all active sessions.

Create a session with automatic retry on rate limit.

Find sessions by pattern matching on session ID.

Gets the session module for a given process PID.

Safely call a session with automatic retry on timeout.

Get health status for all sessions.

Start sessions for multiple session IDs in parallel.

Terminate multiple sessions in parallel.

Functions

broadcast_all(message)

@spec broadcast_all(any()) :: :ok

Broadcast a message to all active sessions.

Examples

iex> Phoenix.SessionProcess.Helpers.broadcast_all({:system_message, "Maintenance in 5 minutes"})
:ok

create_session_with_retry(session_id, module \\ nil, arg \\ nil, retries \\ 5)

@spec create_session_with_retry(binary(), module() | nil, any() | nil, integer()) ::
  {:ok, pid()} | {:error, term()}

Create a session with automatic retry on rate limit.

Examples

iex> Phoenix.SessionProcess.Helpers.create_session_with_retry("session_123")
{:ok, #PID<0.123.0>}

find_sessions_by_pattern(pattern)

@spec find_sessions_by_pattern(Regex.t()) :: [binary()]

Find sessions by pattern matching on session ID.

Examples

iex> Phoenix.SessionProcess.Helpers.find_sessions_by_pattern(~r/user_.*/)
["user_123", "user_456"]

get_session_module(pid)

@spec get_session_module(pid()) :: module()

Gets the session module for a given process PID.

safe_call(session_id, request, retries \\ 3, timeout \\ 5000)

@spec safe_call(binary(), any(), integer(), non_neg_integer()) ::
  {:ok, any()} | {:error, term()}

Safely call a session with automatic retry on timeout.

Examples

iex> Phoenix.SessionProcess.Helpers.safe_call("session_123", :get_user, 3)
{:ok, %User{}}

session_health()

@spec session_health() :: %{healthy: integer(), crashed: integer(), total: integer()}

Get health status for all sessions.

Examples

iex> Phoenix.SessionProcess.Helpers.session_health()
%{healthy: 10, crashed: 0, total: 10}

start_sessions(session_ids)

@spec start_sessions([binary()]) :: [{binary(), {:ok, pid()} | {:error, term()}}]

Start sessions for multiple session IDs in parallel.

Examples

iex> Phoenix.SessionProcess.Helpers.start_sessions(["session1", "session2"])
[{"session1", {:ok, #PID<0.123.0>}}, {"session2", {:ok, #PID<0.124.0>}}]

terminate_sessions(session_ids)

@spec terminate_sessions([binary()]) :: [{binary(), :ok | {:error, term()}}]

Terminate multiple sessions in parallel.

Examples

iex> Phoenix.SessionProcess.Helpers.terminate_sessions(["session1", "session2"])
[{"session1", :ok}, {"session2", {:error, :not_found}}]