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