Class: RailsDrips::IntegrityAudit
- Inherits:
-
Object
- Object
- RailsDrips::IntegrityAudit
- 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 |