Class: Salopulse::Transport

Inherits:
Object
  • Object
show all
Defined in:
lib/salopulse/transport.rb

Defined Under Namespace

Classes: Response

Constant Summary collapse

MAX_RETRIES =
3
BACKOFF_BASE =
0.5

Instance Method Summary collapse

Constructor Details

#initialize(dsn:, sdk_version:, logger:, open_timeout: 5, read_timeout: 10) ⇒ Transport

Returns a new instance of Transport.



13
14
15
16
17
18
19
20
# File 'lib/salopulse/transport.rb', line 13

def initialize(dsn:, sdk_version:, logger:, open_timeout: 5, read_timeout: 10)
  @dsn = dsn
  @sdk_version = sdk_version
  @logger = logger
  @uri = URI.parse(dsn.ingest_url)
  @open_timeout = open_timeout
  @read_timeout = read_timeout
end

Instance Method Details

#send_batch(events) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/salopulse/transport.rb', line 22

def send_batch(events)
  return true if events.nil? || events.empty?

  body = JSON.dump(events: events)

  RequestContext.with_suppression do
    attempt = 0
    loop do
      response = post(body)
      code = response.code.to_i
      return true if success?(code)
      return false if non_retryable?(code)

      attempt += 1
      if attempt >= MAX_RETRIES
        @logger.warn("[Salopulse] giving up after #{attempt} attempts, last code=#{code}")
        return false
      end
      sleep(BACKOFF_BASE * (2**(attempt - 1)))
    end
  end
end