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