Class: RotatePhoneQueuesWorker
- Inherits:
-
Object
- Object
- RotatePhoneQueuesWorker
- Includes:
- Sidekiq::Job
- Defined in:
- app/workers/rotate_phone_queues_worker.rb
Overview
Sidekiq worker: rotate phone queues.
Applies each due PhoneQueueRotation rule to its queue's ring order on the
PBX (In Order queues ring members in sequence, so without rotation the same
agent always takes the first call). Runs once a day from the sidekiq
schedule.
Replay safety: Sidekiq is at-least-once, so the rule is CLAIMED (atomic
last_rotated_at stamp) before the PBX write, not after — overlapping or
retried runs find the rule already claimed and rotate zero times, and a
crash after the claim skips today rather than double-rotating. The claim is
released only when the run provably never wrote (getQueueInfo failed);
refused or unverifiable writes keep it, because re-rotating an order that
may already have changed is worse than retrying tomorrow.
Defined Under Namespace
Classes: TransientPbxError
Instance Method Summary collapse
-
#perform ⇒ Object
Runs the job.
Instance Method Details
#perform ⇒ Object
Runs the job.
34 35 36 37 38 39 40 |
# File 'app/workers/rotate_phone_queues_worker.rb', line 34 def perform transient_failures = 0 PhoneQueueRotation.due_today.find_each do |rule| transient_failures += 1 if rotate(rule) == :transient_failure end raise TransientPbxError, "getQueueInfo failed for #{transient_failures} queue(s)" if transient_failures.positive? end |