Files
fizzy/app/models/webhook/delinquency_tracker.rb
T
2025-09-16 20:04:18 +02:00

40 lines
842 B
Ruby

class Webhook::DelinquencyTracker < ApplicationRecord
RESET_INTERVAL = 12.hours
MINIMUM_DELIVERIES = 50
belongs_to :webhook
before_validation { self.last_reset_at ||= Time.current }
def record_delivery_of(delivery)
if reset_due?
webhook.deactivate if delinquent?
reset
else
increment!(:total_count)
increment!(:failed_count) unless delivery.succeeded?
end
end
private
def delinquent?
significantly_active? && all_deliveries_failed?
end
def significantly_active?
total_count >= MINIMUM_DELIVERIES
end
def all_deliveries_failed?
failed_count == total_count
end
def reset
update_columns total_count: 0, failed_count: 0, last_reset_at: Time.current
end
def reset_due?
last_reset_at.before?(RESET_INTERVAL.ago)
end
end