Class: Condux::EventTransport
- Inherits:
-
Object
- Object
- Condux::EventTransport
- Defined in:
- lib/condux/event_transport.rb
Overview
Delivers a serialized event to the relay, retrying transient failures (429 / 5xx / network) with capped exponential backoff, honoring Retry-After on a 429. Never raises — returns a SendResult.
Constant Summary collapse
- BASE_BACKOFF_MS =
200.0- MAX_BACKOFF_MS =
30_000.0
Instance Method Summary collapse
-
#initialize(store_url, public_key, max_retries, transport, sleep) ⇒ EventTransport
constructor
A new instance of EventTransport.
- #send_event(body) ⇒ Object
Constructor Details
#initialize(store_url, public_key, max_retries, transport, sleep) ⇒ EventTransport
Returns a new instance of EventTransport.
14 15 16 17 18 19 20 |
# File 'lib/condux/event_transport.rb', line 14 def initialize(store_url, public_key, max_retries, transport, sleep) @store_url = store_url @public_key = public_key @max_retries = max_retries @transport = transport || method(:net_http_send) @sleep = sleep || ->(seconds) { Kernel.sleep(seconds) } end |
Instance Method Details
#send_event(body) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/condux/event_transport.rb', line 22 def send_event(body) last_status = nil last_error = nil attempt = 0 while attempt <= @max_retries status, headers, error = attempt_send(body) if error last_error = error else last_status = status last_error = nil return SendResult.new(ok: true, attempts: attempt + 1, status: status) if (200..299).cover?(status) return SendResult.new(ok: false, attempts: attempt + 1, status: status) unless retriable?(status) end break if attempt == @max_retries @sleep.call(backoff_seconds(attempt, status, headers)) attempt += 1 end SendResult.new(ok: false, attempts: @max_retries + 1, status: last_status, error: last_error) end |