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::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.



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

def initialize(config)
  @stub = config.stub || false
  @path = PATH
  @retries = config.retries || RETRIES
  @backoff_policy = config.backoff_policy || Rudder::Analytics::BackoffPolicy.new

  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.



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

def stub
  @stub
end

Instance Method Details

#send(write_key, batch) ⇒ Response

Sends a batch of messages to the API

Returns:



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/rudder/analytics/transport.rb', line 43

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

  last_response, exception = retry_with_backoff(@retries) do
    status_code, body = send_request(write_key, batch)
    error = body
    # rudder server now return 'OK'
    # begin
    #     error = JSON.parse(body)['error']
    # rescue StandardError
    #   error = JSON.parse(body.to_json)
    #       end

    # puts error
    should_retry = should_retry_request?(status_code, body)
    logger.debug("Response status code: #{status_code}")
    logger.debug("Response error: #{error}") if error

    [Response.new(status_code, error), should_retry]
  end

  if exception
    logger.error(exception.message)
    exception.backtrace.each { |line| logger.error(line) }
    Response.new(-1, exception.to_s)
  else
    last_response
  end
end

#shutdownObject

Closes a persistent connection if it exists



74
75
76
# File 'lib/rudder/analytics/transport.rb', line 74

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