class Balsamique::Reporter
Attributes
bq[RW]
logger[RW]
max_retries[RW]
poll[RW]
stopped[RW]
Public Class Methods
new(balsamique, options = {})
click to toggle source
# File lib/balsamique/reporter.rb, line 6 def initialize(balsamique, options = {}) @bq = balsamique @poll = options.fetch(:poll, 10.0) @max_retries = options.fetch(:max_retries, 20) @logger = options.fetch(:logger, Logger.new($stdout)) end
Public Instance Methods
job_status(id)
click to toggle source
# File lib/balsamique/reporter.rb, line 23 def job_status(id) status = bq.job_status(id) if status[id] bq.fill_job_failures(status) bq.fill_args_tasks(status) end status[id] end
perform(id, job_status, timestamp, retries)
click to toggle source
# File lib/balsamique/reporter.rb, line 19 def perform(id, job_status, timestamp, retries) logger.info("#{id} #{timestamp} #{retries} #{job_status.to_json}") end
run()
click to toggle source
# File lib/balsamique/reporter.rb, line 32 def run @stopped = false until stopped do report = bq.pop_report(Time.now.to_f) if report id, timestamp, retries = report begin if (status = job_status(id)) perform(id, status, timestamp, retries) bq.remove_job(id) unless status[:task] else logger.info("#{id} #{timestamp} #{retries} null") end bq.complete_report(id) rescue => error logger.warn( "#{id} #{timestamp} #{retries} " + "#{error.class.name} #{error.message}") logger.debug(error) bq.complete_report(id) if retries > max_retries end else t_poll = Time.now.to_f + poll * (1.0 - 0.5 * rand()) sleep 0.1 until Time.now.to_f > t_poll || stopped end end end
stop()
click to toggle source
# File lib/balsamique/reporter.rb, line 15 def stop @stopped = true end