Class: Rudder::Analytics::Transport

Inherits:
Object
  • Object
show all
Includes:
Defaults::Request, Logging, Utils
Defined in:
lib/rudder/analytics/transport.rb

Constant Summary

Constants included from Utils

Utils::UTC_OFFSET_WITHOUT_COLON, Utils::UTC_OFFSET_WITH_COLON

Constants included from Defaults::Request

Defaults::Request::HEADERS, Defaults::Request::HOST, Defaults::Request::MAX_RETRIES, Defaults::Request::PATH, Defaults::Request::PORT, Defaults::Request::RETRIES

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Logging

included, #logger

Methods included from Utils

#check_string, #date_in_iso8601, #datetime_in_iso8601, #formatted_offset, #isoify_dates, #isoify_dates!, #seconds_to_utc_offset, #stringify_keys, #symbolize_keys, #symbolize_keys!, #time_in_iso8601, #uid

Constructor Details

#initialize(config) ⇒ Transport

Returns a new instance of Transport.



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/rudder/analytics/transport.rb', line 24

def initialize(config)
  @stub = config.stub || false
  @path = PATH
  @retry_policy = Rudder::Analytics::RetryPolicy.from_config(config)
  @retries = @retry_policy.max_attempts
  @backoff_policy = @retry_policy.backoff_policy

  uri = URI(config.data_plane_url)

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = config.ssl.nil? ? true : config.ssl
  http.read_timeout = 8
  http.open_timeout = 4

  @http = http
  @gzip = config.gzip.nil? ? true : config.gzip
end

Instance Attribute Details

#stubObject (readonly)

Returns the value of attribute stub.



22
23
24
# File 'lib/rudder/analytics/transport.rb', line 22

def stub
  @stub
end

Instance Method Details

#send(write_key, batch) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/rudder/analytics/transport.rb', line 42

def send(write_key, batch)
  logger.debug("Sending request for #{batch.length} items")

  retries = 0

  loop do
    begin
      response, headers = build_response(write_key, batch)
      return response unless should_retry_request?(response.status, response.error)
      return response unless retries_remaining?(retries)

      retries = retry_request(retries, headers, "status #{response.status}")
    rescue StandardError => e
      return error_response(e) unless retryable_exception?(e)
      return error_response(e) unless retries_remaining?(retries)

      retries = retry_exception(retries, e)
    end
  end
end

#shutdownObject



63
64
65
# File 'lib/rudder/analytics/transport.rb', line 63

def shutdown
  @http.finish if @http.started?
end