Class: RailsDrips::IntegrityAudit

Inherits:
Object
  • Object
show all
Defined in:
app/services/rails_drips/integrity_audit.rb

Defined Under Namespace

Classes: Finding

Class Method Summary collapse

Class Method Details

.call(stuck_before: 1.hour.ago) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'app/services/rails_drips/integrity_audit.rb', line 7

def self.call(stuck_before: 1.hour.ago)
  findings = []
  Enrollment.status_active.includes({ campaign_version: :steps }, :deliveries).find_each do |enrollment|
    missing = enrollment.campaign_version.steps.map(&:id) - enrollment.deliveries.map(&:step_id)
    missing.each do |step_id|
      findings << Finding.new(code: :missing_delivery, severity: :error,
        record_type: enrollment.class.name, record_id: enrollment.id, details: { step_id: step_id })
    end
  end
  Delivery.joins(:step, :enrollment)
    .where("rails_drips_steps.campaign_version_id != rails_drips_enrollments.campaign_version_id")
    .find_each { |delivery| findings << finding(:cross_version_step, :error, delivery) }
  Delivery.status_sending.where("updated_at < ?", stuck_before).find_each do |delivery|
    findings << finding(:stuck_sending, :error, delivery)
  end
  Delivery.status_sent.where(subject_snapshot: nil).find_each do |delivery|
    findings << finding(:sent_without_snapshot, :warning, delivery)
  end
  Delivery.status_scheduled.joins(:enrollment).merge(Enrollment.status_removed).find_each do |delivery|
    findings << finding(:removed_with_scheduled, :error, delivery)
  end
  Delivery.status_failed.joins(:enrollment).merge(Enrollment.status_completed).find_each do |delivery|
    findings << finding(:completed_with_failed, :error, delivery)
  end
  queue = QueueInventory.call
  findings << Finding.new(code: :queue_inventory_available, severity: :warning,
    record_type: "Queue", record_id: nil, details: { size: queue.size }) if queue
  findings
end