مراية لـ
https://github.com/postalserver/postal.git
تم المزامنة 2025-12-01 05:43:04 +00:00
feat: new background work process
This removes all previous dependencies on RabbitMQ and the need to run separate cron and requeueing processes.
هذا الالتزام موجود في:
17
app/scheduled_tasks/action_deletions_scheduled_task.rb
Normal file
17
app/scheduled_tasks/action_deletions_scheduled_task.rb
Normal file
@@ -0,0 +1,17 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class ActionDeletionsScheduledTask < ApplicationScheduledTask
|
||||
|
||||
def call
|
||||
Organization.deleted.each do |org|
|
||||
logger.info "permanently removing organization #{org.id} (#{org.permalink})"
|
||||
org.destroy
|
||||
end
|
||||
|
||||
Server.deleted.each do |server|
|
||||
logger.info "permanently removing server #{server.id} (#{server.full_permalink})"
|
||||
server.destroy
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
46
app/scheduled_tasks/application_scheduled_task.rb
Normal file
46
app/scheduled_tasks/application_scheduled_task.rb
Normal file
@@ -0,0 +1,46 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class ApplicationScheduledTask
|
||||
|
||||
def initialize(logger:)
|
||||
@logger = logger
|
||||
end
|
||||
|
||||
def call
|
||||
# override me
|
||||
end
|
||||
|
||||
attr_reader :logger
|
||||
|
||||
class << self
|
||||
|
||||
def next_run_after
|
||||
quarter_past_each_hour
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def quarter_past_each_hour
|
||||
time = Time.current
|
||||
time = time.change(min: 15, sec: 0)
|
||||
time += 1.hour if time < Time.current
|
||||
time
|
||||
end
|
||||
|
||||
def quarter_to_each_hour
|
||||
time = Time.current
|
||||
time = time.change(min: 45, sec: 0)
|
||||
time += 1.hour if time < Time.current
|
||||
time
|
||||
end
|
||||
|
||||
def three_am
|
||||
time = Time.current
|
||||
time = time.change(hour: 3, min: 0, sec: 0)
|
||||
time += 1.day if time < Time.current
|
||||
time
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
17
app/scheduled_tasks/check_all_dns_scheduled_task.rb
Normal file
17
app/scheduled_tasks/check_all_dns_scheduled_task.rb
Normal file
@@ -0,0 +1,17 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class CheckAllDNSScheduledTask < ApplicationScheduledTask
|
||||
|
||||
def call
|
||||
Domain.where.not(dns_checked_at: nil).where("dns_checked_at <= ?", 1.hour.ago).each do |domain|
|
||||
logger.info "checking DNS for domain: #{domain.name}"
|
||||
domain.check_dns(:auto)
|
||||
end
|
||||
|
||||
TrackDomain.where("dns_checked_at IS NULL OR dns_checked_at <= ?", 1.hour.ago).includes(:domain).each do |domain|
|
||||
logger.info "checking DNS for track domain: #{domain.full_name}"
|
||||
domain.check_dns
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,11 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "authie/session"
|
||||
|
||||
class CleanupAuthieSessionsScheduledTask < ApplicationScheduledTask
|
||||
|
||||
def call
|
||||
Authie::Session.cleanup
|
||||
end
|
||||
|
||||
end
|
||||
16
app/scheduled_tasks/expire_held_messages_scheduled_task.rb
Normal file
16
app/scheduled_tasks/expire_held_messages_scheduled_task.rb
Normal file
@@ -0,0 +1,16 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class ExpireHeldMessagesScheduledTask < ApplicationScheduledTask
|
||||
|
||||
def call
|
||||
Server.all.each do |server|
|
||||
messages = server.message_db.messages(where: {
|
||||
status: "Held",
|
||||
hold_expiry: { less_than: Time.now.to_f }
|
||||
})
|
||||
|
||||
messages.each(&:cancel_hold)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,29 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class ProcessMessageRetentionScheduledTask < ApplicationScheduledTask
|
||||
|
||||
def perform
|
||||
Server.all.each do |server|
|
||||
if server.raw_message_retention_days
|
||||
# If the server has a maximum number of retained raw messages, remove any that are older than this
|
||||
logger.info "Tidying raw messages (by days) for #{server.permalink} (ID: #{server.id}). Keeping #{server.raw_message_retention_days} days."
|
||||
server.message_db.provisioner.remove_raw_tables_older_than(server.raw_message_retention_days)
|
||||
end
|
||||
|
||||
if server.raw_message_retention_size
|
||||
logger.info "Tidying raw messages (by size) for #{server.permalink} (ID: #{server.id}). Keeping #{server.raw_message_retention_size} MB of data."
|
||||
server.message_db.provisioner.remove_raw_tables_until_less_than_size(server.raw_message_retention_size * 1024 * 1024)
|
||||
end
|
||||
|
||||
if server.message_retention_days
|
||||
logger.info "Tidying messages for #{server.permalink} (ID: #{server.id}). Keeping #{server.message_retention_days} days."
|
||||
server.message_db.provisioner.remove_messages(server.message_retention_days)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def self.next_run_after
|
||||
three_am
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,16 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class PruneSuppressionListsScheduledTask < ApplicationScheduledTask
|
||||
|
||||
def call
|
||||
Server.all.each do |s|
|
||||
logger.info "Pruning suppression lists for server #{s.id}"
|
||||
s.message_db.suppression_list.prune
|
||||
end
|
||||
end
|
||||
|
||||
def self.next_run_after
|
||||
three_am
|
||||
end
|
||||
|
||||
end
|
||||
16
app/scheduled_tasks/prune_webhook_requests_scheduled_task.rb
Normal file
16
app/scheduled_tasks/prune_webhook_requests_scheduled_task.rb
Normal file
@@ -0,0 +1,16 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class PruneWebhookRequestsScheduledTask < ApplicationScheduledTask
|
||||
|
||||
def call
|
||||
Server.all.each do |s|
|
||||
logger.info "Pruning webhook requests for server #{s.id}"
|
||||
s.message_db.webhooks.prune
|
||||
end
|
||||
end
|
||||
|
||||
def self.next_run_after
|
||||
quarter_to_each_hour
|
||||
end
|
||||
|
||||
end
|
||||
13
app/scheduled_tasks/send_notifications_scheduled_task.rb
Normal file
13
app/scheduled_tasks/send_notifications_scheduled_task.rb
Normal file
@@ -0,0 +1,13 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class SendNotificationsScheduledTask < ApplicationScheduledTask
|
||||
|
||||
def call
|
||||
Server.send_send_limit_notifications
|
||||
end
|
||||
|
||||
def self.next_run_after
|
||||
1.minute.from_now
|
||||
end
|
||||
|
||||
end
|
||||
المرجع في مشكلة جديدة
حظر مستخدم