Class: RlCarriersTrackingWorker
- Inherits:
-
Object
- Object
- RlCarriersTrackingWorker
- Includes:
- Sidekiq::Job
- Defined in:
- app/workers/rl_carriers_tracking_worker.rb
Overview
Hourly poll of R&L Carriers' Shipment Tracing SOAP service for every invoiced
direct-R&L freight delivery that has a PRO and hasn't delivered yet.
R&L has no tracking webhook, so we poll. Each poll projects the carrier's
StatusHistory into ShipmentEvent rows keyed by the PRO (the delivery's
master_tracking_number, which is also each shipment's tracking_number for
direct R&L) — the SAME table parcel/ShipEngine LTL tracking write — so the
existing parcel status icon and Tracking Events tab render with no new UI.
Stop conditions (see Shipping::RlCarriersTracker#pollable?): a delivered
scan on file, or Shipping::RlCarriersTracker::POLL_MAX_AGE past pickup.
Scheduled hourly via sidekiq-scheduler — see
config/sidekiq_production_schedule.yml and config/sidekiq_staging_schedule.yml.
Instance Method Summary collapse
Instance Method Details
#perform ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'app/workers/rl_carriers_tracking_worker.rb', line 22 def perform polled = 0 inserted = 0 Shipping::RlCarriersTracker.candidates.find_each do |delivery| tracker = Shipping::RlCarriersTracker.new(delivery) next unless tracker.pollable? polled += 1 inserted += tracker.poll! rescue StandardError => e Rails.logger.error("[RlCarriersTrackingWorker] delivery=#{delivery.id} error: #{e.class}: #{e.}") ErrorReporting.warning('RlCarriersTrackingWorker per-delivery failure', error: e., delivery_id: delivery.id) end Rails.logger.info("[RlCarriersTrackingWorker] polled=#{polled} new_events=#{inserted}") end |