Class: PostHog::Transport
- Inherits:
-
Object
- Object
- PostHog::Transport
- 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
-
#initialize(options = {}) ⇒ Transport
constructor
A new instance of Transport.
-
#send(api_key, batch) ⇒ Response
Sends a batch of messages to the API.
-
#shutdown ⇒ Object
Closes a persistent connection if it exists.
Methods included from Logging
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( = {}) if [:api_host] uri = URI.parse([:api_host]) [:host] = uri.host [:ssl] = uri.scheme == 'https' [:port] = uri.port end [:host] = ![:host].nil? ? [:host] : HOST [:port] = ![:port].nil? ? [:port] : PORT [:ssl] = ![:ssl].nil? ? [:ssl] : SSL @headers = [:headers] || HEADERS @path = [:path] || PATH @retries = [:retries] || RETRIES @backoff_policy = [:backoff_policy] || PostHog::BackoffPolicy.new http = Net::HTTP.new([:host], [:port]) http.use_ssl = [:ssl] http.read_timeout = 8 http.open_timeout = 4 if [:skip_ssl_verification] http.verify_mode = OpenSSL::SSL::VERIFY_NONE end @http = http end |
Class Attribute Details
.stub ⇒ Object
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
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.) exception.backtrace.each { |line| logger.error(line) } Response.new(-1, exception.to_s) else last_response end end |
#shutdown ⇒ Object
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 |