Class: RlCarriersTrackingWorker

Inherits:
Object
  • Object
show all
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

#performObject



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.message}")
    ErrorReporting.warning('RlCarriersTrackingWorker per-delivery failure',
                           error: e.message, delivery_id: delivery.id)
  end

  Rails.logger.info("[RlCarriersTrackingWorker] polled=#{polled} new_events=#{inserted}")
end