Packages

phoenix_kit

1.7.90
1.7.208 1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib phoenix_kit admin presence.ex
Raw

lib/phoenix_kit/admin/presence.ex

defmodule PhoenixKit.Admin.Presence do
@moduledoc """
Phoenix.Presence implementation for tracking anonymous and authenticated sessions.
This module provides real-time tracking of:
- Anonymous visitors (WebSocket connections without user_uuid)
- Authenticated users (with user_uuid)
- Session details like IP, User-Agent, current page, connection time
## Usage
Track anonymous session:
```elixir
PhoenixKit.Admin.Presence.track_anonymous(session_id, %{
connected_at: DateTime.utc_now(),
ip_address: get_connect_info(socket, :peer_data).address,
user_agent: get_connect_info(socket, :user_agent),
current_page: socket.assigns.current_path
})
```
Track authenticated session:
```elixir
PhoenixKit.Admin.Presence.track_user(user, %{
connected_at: DateTime.utc_now(),
session_id: session_id,
ip_address: get_connect_info(socket, :peer_data).address
})
```
## Events Generated
- `{:anonymous_session_connected, session_id, session_info}`
- `{:anonymous_session_disconnected, session_id}`
- `{:user_session_connected, user_uuid, session_info}`
- `{:user_session_disconnected, user_uuid, session_id}`
- `{:presence_stats_updated, stats}`
"""
use Phoenix.Presence,
otp_app: :phoenix_kit,
pubsub_server: :phoenix_kit_internal_pubsub
alias PhoenixKit.Admin.SimplePresence
@doc """
Tracks an anonymous session in Presence.
## Parameters
- `session_id` - Unique session identifier
- `metadata` - Session metadata map
## Metadata Fields
- `:connected_at` - Connection timestamp
- `:ip_address` - Client IP address
- `:user_agent` - Browser User-Agent string
- `:current_page` - Current page path
"""
def track_anonymous(session_id, metadata \\ %{}) do
# Delegate to SimplePresence for now
SimplePresence.track_anonymous(session_id, metadata)
end
@doc """
Tracks an authenticated user session in Presence.
## Parameters
- `user` - User struct with id and email
- `metadata` - Session metadata map
## Metadata Fields
- `:connected_at` - Connection timestamp
- `:session_id` - Session identifier
- `:ip_address` - Client IP address
- `:user_agent` - Browser User-Agent string
- `:current_page` - Current page path
"""
def track_user(user, metadata \\ %{}) do
# Delegate to SimplePresence for now
SimplePresence.track_user(user, metadata)
end
@doc """
Updates metadata for an existing presence.
Useful for updating current page or other session details.
"""
def update_metadata(key, metadata_updates) do
SimplePresence.update_metadata(key, metadata_updates)
end
@doc """
Gets all currently active sessions (anonymous + authenticated).
Returns a list of session maps with type, metadata, and connection info.
"""
def list_active_sessions do
SimplePresence.list_active_sessions()
end
@doc """
Gets all anonymous sessions currently tracked.
"""
def list_anonymous_sessions do
SimplePresence.list_anonymous_sessions()
end
@doc """
Gets all authenticated user sessions currently tracked.
"""
def list_authenticated_sessions do
SimplePresence.list_authenticated_sessions()
end
@doc """
Gets presence statistics.
Returns statistics about current active sessions:
- Total sessions
- Anonymous sessions count
- Authenticated sessions count
- Unique anonymous visitors
- Active authenticated users
- Top pages by activity
"""
def get_presence_stats do
SimplePresence.get_presence_stats()
end
@doc """
Subscribes to presence events for real-time updates.
"""
def subscribe do
SimplePresence.subscribe()
end
@doc """
Gets the presence topic name.
"""
def get_topic, do: SimplePresence.get_topic()
@doc """
Starts the Presence process.
"""
def start_link(opts \\ []) do
opts =
Keyword.merge([otp_app: :phoenix_kit, pubsub_server: :phoenix_kit_internal_pubsub], opts)
Phoenix.Presence.start_link(__MODULE__, [], opts)
end
end