diff --git a/app/lib/worker/process.rb b/app/lib/worker/process.rb index e2058bc0a..5b27e83ec 100644 --- a/app/lib/worker/process.rb +++ b/app/lib/worker/process.rb @@ -42,6 +42,7 @@ class Process PruneWebhookRequestsScheduledTask, SendNotificationsScheduledTask, TidyQueuedMessagesTask, + TidyWebhookRequestsTask, ].freeze # @param [Integer] thread_count The number of worker threads to run in this process diff --git a/app/models/webhook_request.rb b/app/models/webhook_request.rb index dfbf63e57..895e0cd18 100644 --- a/app/models/webhook_request.rb +++ b/app/models/webhook_request.rb @@ -36,6 +36,8 @@ class WebhookRequest < ApplicationRecord serialize :payload, type: Hash + scope :with_stale_lock, -> { where("locked_at IS NOT NULL AND locked_at < ?", 1.hour.ago) } + class << self def trigger(server, event, payload = {}) diff --git a/app/scheduled_tasks/tidy_webhook_requests_task.rb b/app/scheduled_tasks/tidy_webhook_requests_task.rb new file mode 100644 index 000000000..54c0b6389 --- /dev/null +++ b/app/scheduled_tasks/tidy_webhook_requests_task.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class TidyWebhookRequestsTask < ApplicationScheduledTask + + def call + WebhookRequest.with_stale_lock.find_each do |request| + logger.info "unlocking stale webhook request #{request.id} (locked at #{request.locked_at} by #{request.locked_by})" + request.unlock + end + end + + def self.next_run_after + quarter_to_each_hour + end + +end