class Sidekiq::Metrics::Query
def for_job(klass, minutes: nil, hours: nil)
def for_job(klass, minutes: nil, hours: nil) time = @time minutes = 60 unless minutes || hours # DoS protection, sanity check minutes = 60 if minutes && minutes > 480 hours = 72 if hours && hours > 72 granularity = hours ? :hourly : :minutely result = Result.new(granularity) result.ends_at = time count = hours ? hours * 6 : minutes stride, keyproc = ROLLUPS[granularity] redis_results = @pool.with do |conn| conn.pipelined do |pipe| count.times do |idx| key = keyproc.call(time) pipe.hmget key, "#{klass}|ms", "#{klass}|p", "#{klass}|f" time -= stride end end end result.starts_at = time time = @time @pool.with do |conn| redis_results.each do |(ms, p, f)| result.job_results[klass].add_metric "ms", time, ms.to_i if ms result.job_results[klass].add_metric "p", time, p.to_i if p result.job_results[klass].add_metric "f", time, f.to_i if f result.job_results[klass].add_hist time, Histogram.new(klass).fetch(conn, time).reverse if minutes time -= stride end end result.marks = fetch_marks(result.starts_at..result.ends_at, granularity) result end