Sha256: 6c4816786c804b699c7b869018b4435fd92ae888327296e83515a40aa940e0ac

Contents?: true

Size: 1.42 KB

Versions: 100

Compression:

Stored size: 1.42 KB

Contents

module SplitIoClient
  class ImpressionRouter
    attr_reader :router_thread

    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 add_bulk(impressions)
      impressions.each do |impression|
        enqueue(impression)
      end
    end

    private

    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 => error
      @config.log_found_exception(__method__.to_s, error)
    end

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

Version data entries

100 entries across 100 versions & 1 rubygems

Version Path
splitclient-rb-8.0.0.pre.rc1-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.0.0.pre.rc1 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.5.pre.rc5-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.5.pre.rc5 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.5.pre.rc4-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.5.pre.rc4 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.5.pre.rc3-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.5.pre.rc3 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.5.pre.rc2-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.5.pre.rc2 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.5.pre.rc1-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.5.pre.rc1 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.4-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.4 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.4.pre.rc2-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.4.pre.rc2 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.4.pre.rc1-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.4.pre.rc1 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.3-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-7.3.3 lib/splitclient-rb/cache/routers/impression_router.rb