Class: PostHog::Transport

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

#convert_to_datetime, #date_in_iso8601, #datetime_in_iso8601, #formatted_offset, #is_valid_regex, #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.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/posthog/transport.rb', line 16

def initialize(options = {})
  if options[:api_host]
    uri = URI.parse(options[:api_host])
    options[:host] = uri.host
    options[:ssl] = uri.scheme == 'https'
    options[:port] = uri.port
  end

  options[:host] = !options[:host].nil? ? options[:host] : HOST
  options[:port] = !options[:port].nil? ? options[:port] : PORT
  options[:ssl] = !options[:ssl].nil? ? options[:ssl] : SSL
  
  @headers = options[:headers] || HEADERS
  @path = options[:path] || PATH
  @retries = options[:retries] || RETRIES
  @backoff_policy = options[:backoff_policy] || PostHog::BackoffPolicy.new

  http = Net::HTTP.new(options[:host], options[:port])
  http.use_ssl = options[:ssl]
  http.read_timeout = 8
  http.open_timeout = 4
  if options[:skip_ssl_verification]
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end

  @http = http
end

Class Attribute Details

.stubObject



139
140
141
# File 'lib/posthog/transport.rb', line 139

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

Instance Method Details

#send(api_key, batch) ⇒ Response

Sends a batch of messages to the API

Returns:



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/posthog/transport.rb', line 47

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

  last_response, exception =
    retry_with_backoff(@retries) do
      status_code, body = send_request(api_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



71
72
73
# File 'lib/posthog/transport.rb', line 71

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