Sha256: c77c0dead572266ba19deb1337048393b70461ff891e758cc60964ec97b55c8c

Contents?: true

Size: 1.4 KB

Versions: 62

Compression:

Stored size: 1.4 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 => e
      @config.log_found_exception(__method__.to_s, e)
    end

    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
  end
end

Version data entries

62 entries across 62 versions & 1 rubygems

Version Path
splitclient-rb-8.5.0-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.5.0 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.5.0.pre.rc1-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.5.0.pre.rc1 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.4.1.pre.rc1-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.4.1.pre.rc1 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.4.0-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.4.0 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.4.0.pre.rc1-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.4.0.pre.rc1 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.4.0.rc.1-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.4.0.rc.1 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.3.2.pre.rc2-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.3.2.pre.rc2 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.3.2.pre.rc1-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.3.2.pre.rc1 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.3.1-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.3.1 lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.3.1.pre.rc1-java lib/splitclient-rb/cache/routers/impression_router.rb
splitclient-rb-8.3.1.pre.rc1 lib/splitclient-rb/cache/routers/impression_router.rb