Class: SpeedeeTrackingWorker

Inherits:
Object
  • Object
show all
Includes:
Sidekiq::Job
Defined in:
app/workers/speedee_tracking_worker.rb

Overview

Hourly poll of Spee-Dee (Dispatch Science) order status for every recent
Spee-Dee delivery that has a DS orderId and hasn't fully delivered yet. Each
poll projects pickedUpDate/deliveredDate into ShipmentEvent rows keyed by
each shipment's carrier barcode — the SAME table parcel/LTL tracking write —
so the existing status icon and Tracking Events tab render with no new UI.
Scheduled in config/sidekiq_production_schedule.yml (+ staging), mirroring
ShipengineLtlTrackingWorker.

Order status, not per-item scans: Spee-Dee's drivers don't item-scan through
Dispatch Science, so trackeditemslog is permanently empty (verified against
three delivered production orders, 2026-08-03) — see Shipping::SpeedeeTracker.

Instance Method Summary collapse

Instance Method Details

#performObject

Runs the job.

Returns:

  • (Object)

    the result



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'app/workers/speedee_tracking_worker.rb', line 22

def perform
  polled = 0
  inserted = 0

  Shipping::SpeedeeTracker.candidates.find_each do |delivery|
    tracker = Shipping::SpeedeeTracker.new(delivery)
    next unless tracker.pollable?

    polled += 1
    inserted += tracker.poll!
  rescue StandardError => e
    Rails.logger.error("[SpeedeeTrackingWorker] delivery=#{delivery.id} error: #{e.class}: #{e.message}")
    ErrorReporting.warning('SpeedeeTrackingWorker per-delivery failure',
                           error: e.message, delivery_id: delivery.id)
  end

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