class OneApm::Collector::Samplers::DelayedJobSampler

Constants

OA_FAILED_QUERY
OA_LOCKED_QUERY
OA_QUEUE_QUERY_CONDITION

Public Class Methods

new() click to toggle source
# File lib/one_apm/collector/samplers/delayed_job_sampler.rb, line 16
def initialize
  raise Unsupported, "DJ queue sampler disabled" if OneApm::Manager.config[:disable_dj]
  raise Unsupported, "DJ queue sampling unsupported with backend '#{::Delayed::Worker.backend}'" unless self.class.supported_backend?
  raise Unsupported, "No DJ worker present. Skipping DJ queue sampler" unless OneApm::DelayedJobInjection.worker_name
end
supported_backend?() click to toggle source
# File lib/one_apm/collector/samplers/delayed_job_sampler.rb, line 12
def self.supported_backend?
  ::Delayed::Worker.backend.to_s == "Delayed::Backend::ActiveRecord::Job"
end
supported_on_this_platform?() click to toggle source
# File lib/one_apm/collector/samplers/delayed_job_sampler.rb, line 49
def self.supported_on_this_platform?
  defined?(::Delayed::Job)
end

Public Instance Methods

count(query) click to toggle source
# File lib/one_apm/collector/samplers/delayed_job_sampler.rb, line 41
def count(query)
  if ::ActiveRecord::VERSION::MAJOR.to_i < 4
    ::Delayed::Job.count(query)
  else
    ::Delayed::Job.where(query).count
  end
end
failed_jobs() click to toggle source
# File lib/one_apm/collector/samplers/delayed_job_sampler.rb, line 33
def failed_jobs
  count(OA_FAILED_QUERY)
end
locked_jobs() click to toggle source
# File lib/one_apm/collector/samplers/delayed_job_sampler.rb, line 37
def locked_jobs
  count(OA_LOCKED_QUERY)
end
poll() click to toggle source
# File lib/one_apm/collector/samplers/delayed_job_sampler.rb, line 53
def poll
  record_failed_jobs(failed_jobs)
  record_locked_jobs(locked_jobs)
  record_queue_length_metrics
end
record_failed_jobs(value) click to toggle source
# File lib/one_apm/collector/samplers/delayed_job_sampler.rb, line 22
def record_failed_jobs(value)
  OneApm::Manager.record_metric("Workers/DelayedJob/failed_jobs", value)
end
record_locked_jobs(value) click to toggle source
# File lib/one_apm/collector/samplers/delayed_job_sampler.rb, line 26
def record_locked_jobs(value)
  OneApm::Manager.record_metric("Workers/DelayedJob/locked_jobs", value)
end

Private Instance Methods

queue_counts(column_name) click to toggle source
# File lib/one_apm/collector/samplers/delayed_job_sampler.rb, line 83
def queue_counts(column_name)
  now = ::Delayed::Job.db_time_now
  result = if ::ActiveRecord::VERSION::MAJOR.to_i < 4
    ::Delayed::Job.count(:group => column_name,
                         :conditions => [OA_QUEUE_QUERY_CONDITION, now])
  else
    ::Delayed::Job.where(OA_QUEUE_QUERY_CONDITION, now).
                   group(column_name).
                   count
  end
  result.to_a
end
record_counts_by(column_name, metric_segment = column_name) click to toggle source
# File lib/one_apm/collector/samplers/delayed_job_sampler.rb, line 72
def record_counts_by(column_name, metric_segment = column_name)
  all_count = 0
  queue_counts(column_name).each do |column_val, count|
    all_count += count
    column_val = "default" if column_val.nil? || column_val == ""
    metric = "Workers/DelayedJob/queue_length/#{metric_segment}/#{column_val}"
    OneApm::Manager.record_metric(metric, count)
  end
  all_count
end
record_queue_length_metrics() click to toggle source
# File lib/one_apm/collector/samplers/delayed_job_sampler.rb, line 61
def record_queue_length_metrics
  counts = []
  counts << record_counts_by("queue", "name") if ::Delayed::Job.instance_methods.include?(:queue)
  counts << record_counts_by("priority")

  all_metric = "Workers/DelayedJob/queue_length/all"
  OneApm::Manager.record_metric(all_metric, counts.max)
end