Sha256: 8df74232be9410d5dd0a225dc303b2ef228b2bd8a6a50aba5150cbdca4baec79

Contents?: true

Size: 1.2 KB

Versions: 2

Compression:

Stored size: 1.2 KB

Contents

class Webhooks::Outgoing::Delivery < ActiveRecord::Base
  belongs_to :endpoint, class_name: "Webhooks::Outgoing::Endpoint"
  belongs_to :event, class_name: "Webhooks::Outgoing::Event"
  has_one :team, through: :endpoint

  ATTEMPT_SCHEDULE = {
    1 => 15.seconds,
    2 => 1.minute,
    3 => 5.minutes,
    4 => 15.minutes,
    5 => 1.hour,
  }

  has_many :delivery_attempts, class_name: "Webhooks::Outgoing::DeliveryAttempt", dependent: :destroy, foreign_key: :delivery_id

  def label_string
    event.short_uuid
  end

  def next_reattempt_delay
    ATTEMPT_SCHEDULE[attempt_count]
  end

  def deliver_async
    if still_attempting?
      Webhooks::Outgoing::DeliveryJob.set(wait: next_reattempt_delay).perform_later(self)
    end
  end

  def deliver
    if delivery_attempts.create.attempt
      touch(:delivered_at)
    else
      deliver_async
    end
  end

  def attempt_count
    delivery_attempts.count
  end

  def delivered?
    delivered_at.present?
  end

  def still_attempting?
    return false if delivered?
    attempt_count < max_attempts
  end

  def failed?
    !(delivered? || still_attempting?)
  end

  def name
    event.short_uuid
  end

  def max_attempts
    ATTEMPT_SCHEDULE.keys.max
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bullet_train-outgoing_webhooks-1.0.1 lib/models/webhooks/outgoing/delivery.rb
bullet_train-outgoing_webhooks-1.0.0 lib/models/webhooks/outgoing/delivery.rb