class RailsAutoscaleAgent::WorkerAdapters::Que
Attributes
queues[W]
Public Instance Methods
collect!(store)
click to toggle source
# File lib/rails_autoscale_agent/worker_adapters/que.rb, line 28 def collect!(store) log_msg = String.new t = Time.now.utc sql = <<~SQL SELECT queue, min(run_at) FROM que_jobs WHERE finished_at IS NULL AND expired_at IS NULL AND error_count = 0 GROUP BY 1 SQL run_at_by_queue = Hash[select_rows(sql)] # Don't collect worker metrics if there are unreasonable number of queues if run_at_by_queue.size > 50 logger.debug "Skipping Que metrics - #{run_at_by_queue.size} queues" return end self.queues |= run_at_by_queue.keys queues.each do |queue| run_at = run_at_by_queue[queue] run_at = DateTime.parse(run_at) if run_at.is_a?(String) latency_ms = run_at ? ((t - run_at)*1000).ceil : 0 latency_ms = 0 if latency_ms < 0 store.push latency_ms, t, queue log_msg << "que.#{queue}=#{latency_ms} " end logger.debug log_msg unless log_msg.empty? end
enabled?()
click to toggle source
# File lib/rails_autoscale_agent/worker_adapters/que.rb, line 21 def enabled? if defined?(::Que) logger.info "Que enabled (#{::ActiveRecord::Base.default_timezone})" true end end
queues()
click to toggle source
# File lib/rails_autoscale_agent/worker_adapters/que.rb, line 13 def queues # Track the known queues so we can continue reporting on queues that don't # have enqueued jobs at the time of reporting. # Assume a "default" queue so we always report *something*, even when nothing # is enqueued. @queues ||= Set.new(['default']) end
Private Instance Methods
select_rows(sql)
click to toggle source
# File lib/rails_autoscale_agent/worker_adapters/que.rb, line 65 def select_rows(sql) # This ensures the agent doesn't hold onto a DB connection any longer than necessary ActiveRecord::Base.connection_pool.with_connection { |c| c.select_rows(sql) } end