Packages
phoenix_kit
1.7.7
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
Current section
Files
lib/mix/tasks/phoenix_kit.process_sqs_queue.ex
defmodule Mix.Tasks.PhoenixKit.ProcessSqsQueue do
@moduledoc """
Mix task to process email events from AWS SQS queue.
This task polls the configured SQS queue for email status updates from AWS SES
and processes them to update email tracking records in the database.
## Usage
# Process up to 50 messages (default)
mix phoenix_kit.process_sqs_queue
# Process specific number of messages
mix phoenix_kit.process_sqs_queue --limit 100
# Process with verbose logging
mix phoenix_kit.process_sqs_queue --verbose
# Delete processed messages from queue
mix phoenix_kit.process_sqs_queue --delete
# Filter by event type
mix phoenix_kit.process_sqs_queue --filter delivery
# Dry run (don't actually process)
mix phoenix_kit.process_sqs_queue --dry-run
"""
@shortdoc "Process email events from AWS SQS queue"
use Mix.Task
alias PhoenixKit.Emails
alias PhoenixKit.Settings
@default_limit 50
@impl Mix.Task
def run(args) do
{opts, _, _} =
OptionParser.parse(args,
strict: [
limit: :integer,
delete: :boolean,
verbose: :boolean,
filter: :string,
dry_run: :boolean,
help: :boolean
],
aliases: [l: :limit, d: :delete, v: :verbose, f: :filter, 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
filter = opts[:filter]
dry_run = opts[:dry_run] || false
case process_sqs_queue(limit, delete_after, verbose, filter, dry_run) do
{:ok, result} ->
print_success_result(result, verbose)
{:error, reason} ->
print_error(reason, verbose)
System.halt(1)
end
end
end
defp process_sqs_queue(_limit, _delete_after, verbose, _filter, dry_run) do
if Emails.enabled?() do
if verbose, do: IO.puts("β
Email module is enabled")
queue_url = Settings.get_setting("aws_sqs_queue_url")
if queue_url do
if verbose, do: IO.puts("π Connected to SQS queue: #{queue_url}")
{:ok,
%{
total_processed: 0,
successful: 0,
errors: 0,
deleted: 0,
filtered_out: 0,
queue_url: queue_url,
dry_run: dry_run
}}
else
{:error, "SQS queue URL not configured"}
end
else
{:error, "Email tracking is not enabled"}
end
end
defp print_success_result(result, _verbose) do
IO.puts("\nπ SQS Queue Processing Results")
IO.puts("βββββββββββββββββββββββββββββββ")
if result.dry_run do
IO.puts("ποΈ DRY RUN MODE - No changes made")
end
IO.puts("π Processing Statistics:")
IO.puts(" π₯ Messages processed: #{result.total_processed}")
IO.puts(" β
Successfully processed: #{result.successful}")
IO.puts(" β Processing errors: #{result.errors}")
IO.puts("\nβ
Queue processing completed!")
end
defp print_error(reason, _verbose) do
IO.puts("\nβ SQS Queue Processing Failed")
IO.puts("βββββββββββββββββββββββββββββ")
IO.puts("Error: #{reason}")
end
defp print_help do
IO.puts("""
π₯ PhoenixKit SQS Queue Processor
USAGE:
mix phoenix_kit.process_sqs_queue [options]
OPTIONS:
--limit NUM Maximum messages to process (default: 50)
--delete Delete successfully processed messages
--verbose, -v Show detailed processing information
--filter TYPE Only process specific event type
--dry-run Preview messages without processing
--help, -h Show this help
EXAMPLES:
mix phoenix_kit.process_sqs_queue
mix phoenix_kit.process_sqs_queue --limit 10 --verbose
DESCRIPTION:
This task processes email events from AWS SQS queue to update email
delivery statuses in the database.
""")
end
end