module QueueClassicPlus::UpdateMetrics
Public Class Methods
jobs_queued()
click to toggle source
# File lib/queue_classic_plus/update_metrics.rb, line 29 def self.jobs_queued sql_group_count "SELECT q_name AS group, COUNT(1) FROM queue_classic_jobs WHERE scheduled_at <= NOW() GROUP BY q_name" end
jobs_scheduled()
click to toggle source
# File lib/queue_classic_plus/update_metrics.rb, line 35 def self.jobs_scheduled sql_group_count "SELECT q_name AS group, COUNT(1) FROM queue_classic_jobs WHERE scheduled_at > NOW() GROUP BY q_name" end
late_count()
click to toggle source
# File lib/queue_classic_plus/update_metrics.rb, line 41 def self.late_count nb_late = execute("SELECT COUNT(1) FROM queue_classic_jobs WHERE scheduled_at < NOW() AND #{not_failed}") nb_late ? Integer(nb_late['count']) : 0 end
metrics()
click to toggle source
# File lib/queue_classic_plus/update_metrics.rb, line 17 def self.metrics { jobs_queued: jobs_queued, jobs_scheduled: jobs_scheduled, max_created_at: max_age("created_at", "created_at = scheduled_at"), max_locked_at: max_age("locked_at", "locked_at IS NOT NULL"), "max_created_at.unlocked" => max_age("locked_at", "locked_at IS NULL"), "jobs_delayed.lag" => max_age("scheduled_at"), "jobs_delayed.late_count" => late_count, } end
update()
click to toggle source
# File lib/queue_classic_plus/update_metrics.rb, line 3 def self.update metrics.each do |name, values| if values.respond_to?(:each) values.each do |hash| hash.to_a.each do |(source, count)| Metrics.measure("qc.#{name}", count, source: source) end end else Metrics.measure("qc.#{name}", values) end end end
Private Class Methods
execute(q)
click to toggle source
# File lib/queue_classic_plus/update_metrics.rb, line 75 def self.execute(q) QC.default_conn_adapter.execute(q) end
max_age(column, *conditions)
click to toggle source
# File lib/queue_classic_plus/update_metrics.rb, line 60 def self.max_age(column, *conditions) conditions.unshift not_failed conditions.unshift "scheduled_at <= NOW()" q = "SELECT EXTRACT(EPOCH FROM now() - #{column}) AS age_in_seconds FROM queue_classic_jobs WHERE #{conditions.join(" AND ")} ORDER BY age_in_seconds DESC LIMIT 1 " age_info = execute(q) age_info ? age_info['age_in_seconds'].to_i : 0 end
not_failed()
click to toggle source
# File lib/queue_classic_plus/update_metrics.rb, line 79 def self.not_failed "q_name != '#{::QueueClassicPlus::CustomWorker::FailedQueue.name}'" end
sql_group_count(sql)
click to toggle source
# File lib/queue_classic_plus/update_metrics.rb, line 50 def self.sql_group_count(sql) results = execute(sql) results = [results] if Hash === results Array(results).map do |h| { h.fetch("group") => Integer(h.fetch('count')) } end end