Class: Deimos::Utils::DbPoller::StateBased
- Defined in:
- lib/deimos/utils/db_poller/state_based.rb
Overview
Poller that uses state columns to determine the records to publish.
Constant Summary
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
- #fetch_results ⇒ ActiveRecord::Relation
- #finalize_batch(batch, success) ⇒ void
-
#process_updates ⇒ void
Send messages for updated data.
Methods inherited from Base
#create_poll_info, #initialize, #process_batch, #process_batch_with_span, #retrieve_poll_info, #should_run?, #start, #stop
Constructor Details
This class inherits a constructor from Deimos::Utils::DbPoller::Base
Instance Method Details
#fetch_results ⇒ ActiveRecord::Relation
33 34 35 |
# File 'lib/deimos/utils/db_poller/state_based.rb', line 33 def fetch_results @producer.poll_query.limit(BATCH_SIZE).order(@config.) end |
#finalize_batch(batch, success) ⇒ void
This method returns an undefined value.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/deimos/utils/db_poller/state_based.rb', line 40 def finalize_batch(batch, success) @info.touch(:last_sent) state = success ? @config.published_state : @config.failed_state klass = batch.first.class id_col = klass.primary_key.to_sym = @config. attrs = { => Time.zone.now } attrs[@config.state_column] = state if state if @config. attrs[@config.] = Time.zone.now end klass.where(id_col => batch.map(&id_col)).update_all(attrs) end |
#process_updates ⇒ void
This method returns an undefined value.
Send messages for updated data.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/deimos/utils/db_poller/state_based.rb', line 12 def process_updates Deimos.config.logger.info("Polling #{@producer.topic}") status = PollStatus.new(0, 0, 0) # poll_query gets all the relevant data from the database, as defined # by the producer itself. loop do Deimos.config.logger.debug("Polling #{@producer.topic}, batch #{status.current_batch}") batch = fetch_results.to_a if batch.empty? @info.touch(:last_sent) break end success = process_batch_with_span(batch, status) finalize_batch(batch, success) end Deimos.config.logger.info("Poll #{@producer.topic} complete (#{status.report}") end |