Class: SpreeCmCommissioner::WaitingRoomSessionFirebaseLoggerJob

Inherits:
ApplicationUniqueJob show all
Defined in:
app/jobs/spree_cm_commissioner/waiting_room_session_firebase_logger_job.rb

Overview

Logs waiting room session data to Firebase asynchronously.

Called from WaitingRoomSessionCreator#log_to_firebase after user enters waiting room. Allows main request to complete without waiting for Firebase I/O.

Retry Configuration

Retries on StandardError with exponential backoff: 4 attempts total (1 initial + 3 retries)

retry_on StandardError, wait: :exponentially_longer, attempts: 4

Wait times: ~1s, ~10s, ~100s Rationale: Balances reliability vs resources. Firebase is generally reliable, so 3 retries is sufficient. Exponential backoff gives service time to recover and reduces load during outages.

Implementation Details

  • Uses ActiveJob’s retry_on (works with any queue adapter: Sidekiq, Resque, etc.)

  • Inherits from ApplicationUniqueJob (prevents duplicate Firebase writes)

  • On failure after 4 attempts: moved to dead letter queue, logged for investigation

Instance Method Summary collapse

Instance Method Details

#perform(options) ⇒ Object



26
27
28
29
30
31
32
33
34
# File 'app/jobs/spree_cm_commissioner/waiting_room_session_firebase_logger_job.rb', line 26

def perform(options)
  room_session = SpreeCmCommissioner::WaitingRoomSession.find(options[:room_session_id])
  waiting_guest_firebase_doc_id = options[:waiting_guest_firebase_doc_id]

  SpreeCmCommissioner::WaitingRoomSessionFirebaseLogger.call(
    room_session: room_session,
    waiting_guest_firebase_doc_id: waiting_guest_firebase_doc_id
  )
end