class SplitIoClient::ImpressionRouter

def add_bulk(impressions)

def add_bulk(impressions)
  impressions.each do |impression|
    enqueue(impression)
  end
end

def enqueue(impression)

def enqueue(impression)
  imp = {
    split_name: impression[:i][:f],
    matching_key: impression[:i][:k],
    bucketing_key: impression[:i][:b],
    time: impression[:i][:m],
    treatment: {
      label: impression[:i][:r],
      treatment: impression[:i][:t],
      change_number: impression[:i][:c]
    },
    previous_time: impression[:i][:pt],
    attributes: impression[:attributes]
  }
  @queue.push(imp) if @listener
rescue StandardError => e
  @config.log_found_exception(__method__.to_s, e)
end

def initialize(config)

def initialize(config)
  @config = config
  @listener = @config.impression_listener
  return unless @listener
  @queue = Queue.new
  router_thread
  if defined?(PhusionPassenger)
    PhusionPassenger.on_event(:starting_worker_process) do |forked|
      router_thread if forked
    end
  end
end

def router_thread

def router_thread
  @config.threads[:impression_router] = Thread.new do
    loop do
      begin
        @listener.log(@queue.pop)
      rescue StandardError => e
        @config.log_found_exception(__method__.to_s, e)
      end
    end
  end
end