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, get_by_symbol_or_string_key, 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.
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 18 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 http.verify_mode = OpenSSL::SSL::VERIFY_NONE if [:skip_ssl_verification] @http = http end |
Class Attribute Details
.stub ⇒ Object
144 145 146 |
# File 'lib/posthog/transport.rb', line 144 def stub @stub || ENV.fetch('STUB', nil) 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 69 70 71 72 73 |
# 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 = begin JSON.parse(body)['error'] rescue JSON::ParserError body end 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
76 77 78 |
# File 'lib/posthog/transport.rb', line 76 def shutdown @http.finish if @http.started? end |