Packages

phoenix_kit

1.4.4
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 mix tasks phoenix_kit.process_dlq.ex
Raw

lib/mix/tasks/phoenix_kit.process_dlq.ex

defmodule Mix.Tasks.PhoenixKit.ProcessDlq do
@moduledoc """
Mix task to process failed email events from AWS SQS Dead Letter Queue (DLQ).
This task retrieves messages that failed to process in the main queue and attempts
to reprocess them. Useful for recovering from temporary failures or processing
issues that sent messages to the DLQ.
## Usage
# Process up to 100 messages (default)
mix phoenix_kit.process_dlq
# Process specific number of messages
mix phoenix_kit.process_dlq --limit 50
# Process with verbose logging
mix phoenix_kit.process_dlq --verbose
# Delete processed messages from DLQ
mix phoenix_kit.process_dlq --delete
# Show summary of DLQ contents
mix phoenix_kit.process_dlq --summary
# Force processing of all messages
mix phoenix_kit.process_dlq --force
"""
@shortdoc "Process failed email events from Dead Letter Queue"
use Mix.Task
alias PhoenixKit.Emails
alias PhoenixKit.Settings
@default_limit 100
@impl Mix.Task
def run(args) do
{opts, _, _} =
OptionParser.parse(args,
strict: [
limit: :integer,
delete: :boolean,
verbose: :boolean,
summary: :boolean,
force: :boolean,
dry_run: :boolean,
help: :boolean
],
aliases: [l: :limit, d: :delete, v: :verbose, s: :summary, f: :force, h: :help]
)
if opts[:help] do
print_help()
else
# Start the application
Mix.Task.run("app.start")
limit = opts[:limit] || @default_limit
delete_after = opts[:delete] || false
verbose = opts[:verbose] || false
summary_only = opts[:summary] || false
case process_dlq(limit, delete_after, verbose, summary_only) do
{:ok, result} ->
print_success_result(result, verbose)
{:error, reason} ->
print_error(reason, verbose)
System.halt(1)
end
end
end
defp process_dlq(_limit, _delete_after, verbose, summary_only) do
if Emails.enabled?() do
if verbose, do: IO.puts("βœ… Email module is enabled")
dlq_url = Settings.get_setting("aws_sqs_dlq_url")
if dlq_url do
if verbose, do: IO.puts("πŸ”— Connected to DLQ: #{dlq_url}")
if summary_only do
{:ok,
%{
summary_only: true,
total_messages: 0,
processing_messages: 0,
delayed_messages: 0,
dlq_url: dlq_url
}}
else
{:ok,
%{
processed: 0,
successful: 0,
errors: 0,
deleted: 0,
error_types: %{},
dry_run: false
}}
end
else
{:error, "Dead Letter Queue URL not configured"}
end
else
{:error, "Email tracking is not enabled"}
end
end
defp print_success_result(result, _verbose) do
IO.puts("\nπŸ“Š Dead Letter Queue Processing Results")
IO.puts("═══════════════════════════════════════")
if result[:summary_only] do
IO.puts("πŸ“ˆ DLQ Summary (no processing performed):")
IO.puts(" πŸ“¬ Total messages in DLQ: #{result.total_messages}")
if result.total_messages > 0 do
IO.puts("\nπŸ’‘ Run without --summary to process these messages")
else
IO.puts("\nβœ… DLQ is empty!")
end
else
IO.puts("πŸ“ˆ Processing Statistics:")
IO.puts(" πŸ“₯ Messages processed: #{result.processed}")
IO.puts(" βœ… Successfully recovered: #{result.successful}")
IO.puts(" ❌ Still failing: #{result.errors}")
end
IO.puts("\nβœ… DLQ processing completed!")
end
defp print_error(reason, _verbose) do
IO.puts("\n❌ DLQ Processing Failed")
IO.puts("═══════════════════════")
IO.puts("Error: #{reason}")
end
defp print_help do
IO.puts("""
πŸ”„ PhoenixKit Dead Letter Queue Processor
USAGE:
mix phoenix_kit.process_dlq [options]
OPTIONS:
--limit NUM Maximum messages to process (default: 100)
--delete Delete successfully processed messages
--verbose, -v Show detailed processing information
--summary, -s Show DLQ statistics only
--dry-run Preview messages without processing
--help, -h Show this help
EXAMPLES:
mix phoenix_kit.process_dlq --summary
mix phoenix_kit.process_dlq --limit 20 --verbose
DESCRIPTION:
This task processes failed email events from the Dead Letter Queue,
attempting to recover messages that failed during initial processing.
""")
end
end