Class: SpreeCmCommissioner::WaitingRoomSessionFirebaseLoggerJob
- Inherits:
-
ApplicationUniqueJob
- Object
- ActiveJob::Base
- ApplicationUniqueJob
- ApplicationUniqueJob
- SpreeCmCommissioner::WaitingRoomSessionFirebaseLoggerJob
- 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() room_session = SpreeCmCommissioner::WaitingRoomSession.find([:room_session_id]) waiting_guest_firebase_doc_id = [:waiting_guest_firebase_doc_id] SpreeCmCommissioner::WaitingRoomSessionFirebaseLogger.call( room_session: room_session, waiting_guest_firebase_doc_id: waiting_guest_firebase_doc_id ) end |