Sha256: cdcd352ca9759c267260f8febbb3566373501f977c15aa08fddda6fb478f1fe2

Contents?: true

Size: 1.08 KB

Versions: 3

Compression:

Stored size: 1.08 KB

Contents

module EbDeployer
  class EventPoller
    include Utils
    POLL_INTERVAL = 15

    def initialize(event_source)
      @event_source = event_source
    end

    def get_anchor
      @event_source.get_anchor
    end

    def poll(from_anchor, &block)
      handled = Set.new
      loop do
        @event_source.fetch_events(from_anchor) do |events|
          # events from event source is latest first order
          to_be_handled = []
          reached_anchor = false

          events.each do |event|
            if digest(event) == digest(from_anchor)
              reached_anchor = true
            end

            if !handled.include?(digest(event)) && !reached_anchor
              to_be_handled << event
            end
          end

          to_be_handled.reverse.each do |event|
            yield(event)
            handled << digest(event)
          end

          !reached_anchor
        end
        sleep POLL_INTERVAL
      end
    end

    private

    def digest(event)
      return nil unless event
      event = event.to_h if event.respond_to?(:to_h)
      event.to_json
    end
  end
end

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
man_eb_deployer-0.8.0 lib/eb_deployer/event_poller.rb
eb_deployer_updated-0.8.1 lib/eb_deployer/event_poller.rb
eb_deployer_updated-0.8.0 lib/eb_deployer/event_poller.rb