Supervisor for PhoenixKit email tracking system.
This module manages all processes necessary for email tracking:
- Kicks off Oban-based SQS and Brevo polling at boot (see
SQSPollingManager/BrevoPollingManager) when the corresponding settings say the chain should be alive - Registers the unified email provider
- Additional processes (metrics, archiving, etc.)
Integration into Parent Application
Add supervisor to your application's supervision tree:
# In lib/your_app/application.ex
def start(_type, _args) do
children = [
# ... your other processes
# PhoenixKit Email Tracking
PhoenixKit.Modules.Emails.Supervisor
]
opts = [strategy: :one_for_one, name: YourApp.Supervisor]
Supervisor.start_link(children, opts)
endConfiguration
Supervisor automatically reads settings from PhoenixKit Settings:
sqs_polling_enabled/ SES events / queue URL — SQS chain boot gatebrevo_events_enabled— Brevo chain boot gateemail_enabled— system switch (both chains)- polling intervals and other provider settings
Process Management
Both pollers are driven entirely by Oban and can be toggled at runtime without an application restart:
PhoenixKit.Modules.Emails.SQSPollingManager.enable_polling()
PhoenixKit.Modules.Emails.SQSPollingManager.disable_polling()
PhoenixKit.Modules.Emails.BrevoPollingManager.enable_polling()
PhoenixKit.Modules.Emails.BrevoPollingManager.disable_polling()Boot re-inserts each enabled chain via enable_polling/0 so a dead
chain (no queued job after a crash or bad deploy) self-heals when the
setting is still on. If a next tick is already scheduled, the managers'
unique/replace insert moves it to run now rather than appending a
second row.
Monitoring
Supervisor provides information about process state:
# Get list of child processes
Supervisor.which_children(PhoenixKit.Modules.Emails.Supervisor)
# Get process count
Supervisor.count_children(PhoenixKit.Modules.Emails.Supervisor)
Summary
Functions
Returns child spec for integration into parent supervisor.
Starts supervisor for email tracking system.
Returns information about email tracking system status.
Functions
Returns child spec for integration into parent supervisor.
This function is used when you want more precise control over email tracking integration in your application.
Examples
# In lib/your_app/application.ex
def start(_type, _args) do
children = [
# ... other processes
PhoenixKit.Modules.Emails.Supervisor.child_spec([])
]
Supervisor.start_link(children, strategy: :one_for_one)
end
Starts supervisor for email tracking system.
Options
:name- supervisor process name (defaults to__MODULE__)
Examples
{:ok, pid} = PhoenixKit.Modules.Emails.Supervisor.start_link()
Returns information about email tracking system status.
Examples
iex> PhoenixKit.Modules.Emails.Supervisor.system_status()
%{
supervisor_running: true,
polling_status: %{enabled: true, pending_jobs: 1, ...},
brevo_polling_status: %{enabled: true, pending_jobs: 1, ...},
children_count: 0
}