class OkComputer::DelayedJobBackedUpCheck

Attributes

greater_than_priority[RW]
include_errored[RW]
include_locked[RW]
priority[RW]
queue[RW]
threshold[RW]

Public Class Methods

new(priority, threshold, options = {}) click to toggle source

Public: Initialize a check for backed-up Delayed Job jobs

priority - Which priority to check for threshold - An Integer to compare the jobs count against to consider it backed up options - Hash of optional parameters

queue - Used to monitor a specific delayed job queue (default: nil)
include_locked - If true, will include currently locked jobs in the query (default: false)
include_errored - If true, will include currently errored jobs in the query (default: false)
greater_than_priority - If true, will include all jobs with a priority value equal or greater than the set value.

Example:

check = new(10, 50)
# => The check will look for jobs with priority between
# 0 and 10, considering the jobs as backed up if there
# are more than 50 of them
# File lib/ok_computer/built_in_checks/delayed_job_backed_up_check.rb, line 25
def initialize(priority, threshold, options = {})
  self.priority = Integer(priority)
  self.threshold = Integer(threshold)
  self.queue = options[:queue]
  self.include_locked = !!options[:include_locked]
  self.include_errored = !!options[:include_errored]
  self.greater_than_priority = !!options[:greater_than_priority]
  self.name = greater_than_priority ? "Delayed Jobs with priority higher than '#{priority}'" : "Delayed Jobs with priority lower than '#{priority}'"
end

Public Instance Methods

size() click to toggle source

Public: How many delayed jobs are pending within the given priority

# File lib/ok_computer/built_in_checks/delayed_job_backed_up_check.rb, line 36
def size
  if defined?(::Delayed::Backend::Mongoid::Job) && Delayed::Worker.backend == Delayed::Backend::Mongoid::Job
    query = greater_than_priority ? Delayed::Job.gte(priority: priority) : Delayed::Job.lte(priority: priority)
  else
    operator = greater_than_priority ? ">=" : "<="
    query = Delayed::Job.where("priority #{operator} ?", priority)
  end
  opts = {}
  opts[:queue] = queue if queue
  opts[:locked_at] = nil unless include_locked
  opts[:last_error] = nil unless include_errored
  query.where(opts).count
end