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