module HireFire::Macro::Delayed::Job

Public Instance Methods

job_queue_latency(*queues) click to toggle source

Calculates the maximum job queue latency using Delayed::Job. If no queues are specified, it measures latency across all available queues. This method supports both ActiveRecord and Mongoid mappers.

@param queues [Array<String, Symbol>] (optional) Names of the queues for latency

measurement. If not provided, latency is measured across all queues.

@return [Float] Maximum job queue latency in seconds. @example Calculate latency across all queues

HireFire::Macro::Delayed::Job.job_queue_latency

@example Calculate latency for the “default” queue

HireFire::Macro::Delayed::Job.job_queue_latency(:default)

@example Calculate latency across “default” and “mailer” queues

HireFire::Macro::Delayed::Job.job_queue_latency(:default, :mailer)
# File lib/hirefire/macro/delayed_job.rb, line 28
def job_queue_latency(*queues)
  queues = normalize_queues(queues, allow_empty: true)

  query =
    ::Delayed::Job
      .where(run_at: ..Time.now)
      .where(failed_at: nil)
      .order(run_at: :asc)

  if queues.any?
    case mapper
    when :active_record
      query = query.where(queue: queues)
    when :mongoid
      query = query.in(queue: queues.to_a)
    end
  end

  if (job = query.first)
    Time.now - job.run_at
  else
    0.0
  end
end
job_queue_size(*queues) click to toggle source

Calculates the total job queue size using Delayed::Job. If no queues are specified, it measures size across all available queues. This method supports both ActiveRecord and Mongoid mappers.

@param queues [Array<String, Symbol>] (optional) Names of the queues for size measurement.

If not provided, size is measured across all queues.

@return [Integer] Total job queue size. @example Calculate size across all queues

HireFire::Macro::Delayed::Job.job_queue_size

@example Calculate size of the “default” queue

HireFire::Macro::Delayed::Job.job_queue_size(:default)

@example Calculate size across “default” and “mailer” queues

HireFire::Macro::Delayed::Job.job_queue_size(:default, :mailer)
# File lib/hirefire/macro/delayed_job.rb, line 66
def job_queue_size(*queues)
  queues = normalize_queues(queues, allow_empty: true)

  query =
    ::Delayed::Job
      .where(run_at: ..Time.now)
      .where(failed_at: nil)

  if queues.any?
    case mapper
    when :active_record
      query = query.where(queue: queues)
    when :mongoid
      query = query.in(queue: queues.to_a)
    end
  end

  query.count
end

Private Instance Methods

mapper() click to toggle source
# File lib/hirefire/macro/delayed_job.rb, line 88
def mapper
  return :active_record if defined?(::ActiveRecord::Base) &&
    ::Delayed::Job.ancestors.include?(::ActiveRecord::Base)

  return :mongoid if defined?(::Mongoid::Document) &&
    ::Delayed::Job.ancestors.include?(::Mongoid::Document)

  raise MapperNotDetectedError, "Unable to detect the appropriate mapper."
end