Class: Segment::Analytics::Transport

Inherits:
Object
  • Object
show all
Includes:
Defaults::Request, Logging, Utils
Defined in:
lib/segment/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, Defaults::Request::SSL

Class Attribute Summary collapse

Instance Method Summary collapse

Methods included from Logging

included, #logger

Methods included from Utils

#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(options = {}) ⇒ Transport

Returns a new instance of Transport.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/segment/analytics/transport.rb', line 19

def initialize(options = {})
  options[:host] ||= HOST
  options[:port] ||= PORT
  options[:ssl] ||= SSL
  @headers = options[:headers] || HEADERS
  @path = options[:path] || PATH
  @retries = options[:retries] || RETRIES
  @backoff_policy =
    options[:backoff_policy] || Segment::Analytics::BackoffPolicy.new

  http = Net::HTTP.new(options[:host], options[:port])
  http.use_ssl = options[:ssl]
  http.read_timeout = 8
  http.open_timeout = 4

  @http = http
end

Class Attribute Details

.stubObject



134
135
136
# File 'lib/segment/analytics/transport.rb', line 134

def stub
  @stub || ENV['STUB']
end

Instance Method Details

#send(write_key, batch) ⇒ Response

Sends a batch of messages to the API

Returns:



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

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 = JSON.parse(body)['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



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

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