class Optimizely::EventDispatcher

Constants

REQUEST_TIMEOUT

@api constants

Public Class Methods

new(logger: nil, error_handler: nil, proxy_config: nil) click to toggle source
# File lib/optimizely/event_dispatcher.rb, line 32
def initialize(logger: nil, error_handler: nil, proxy_config: nil)
  @logger = logger || NoOpLogger.new
  @error_handler = error_handler || NoOpErrorHandler.new
  @proxy_config = proxy_config
end

Public Instance Methods

dispatch_event(event) click to toggle source

Dispatch the event being represented by the Event object.

@param event - Event object

# File lib/optimizely/event_dispatcher.rb, line 41
def dispatch_event(event)
  response = Helpers::HttpUtils.make_request(
    event.url, event.http_verb, event.params.to_json, event.headers, REQUEST_TIMEOUT, @proxy_config
  )

  error_msg = "Event failed to dispatch with response code: #{response.code}"

  case response.code.to_i
  when 400...500
    @logger.log(Logger::ERROR, error_msg)
    @error_handler.handle_error(HTTPCallError.new("HTTP Client Error: #{response.code}"))

  when 500...600
    @logger.log(Logger::ERROR, error_msg)
    @error_handler.handle_error(HTTPCallError.new("HTTP Server Error: #{response.code}"))
  else
    @logger.log(Logger::DEBUG, 'event successfully sent with response code ' + response.code.to_s)
  end
rescue Timeout::Error => e
  @logger.log(Logger::ERROR, "Request Timed out. Error: #{e}")
  @error_handler.handle_error(e)

  # Returning Timeout error to retain existing behavior.
  e
rescue StandardError => e
  @logger.log(Logger::ERROR, "Event failed to dispatch. Error: #{e}")
  @error_handler.handle_error(e)
  nil
end