Class: Workhorse::Jobs::DetectStaleJobsJob
- Inherits:
-
Object
- Object
- Workhorse::Jobs::DetectStaleJobsJob
- Defined in:
- lib/workhorse/jobs/detect_stale_jobs_job.rb
Overview
This job picks up jobs that remained ‘locked` or `started` (running) for more than a certain amount of time. If any of these jobs are found, an exception is thrown (which may cause a notification if you configured `on_exception` accordingly).
The thresholds are obtained from the configuration options config.stale_detection_locked_to_started_threshold and config.stale_detection_run_time_threshold.
Instance Method Summary collapse
-
#initialize ⇒ DetectStaleJobsJob
constructor
A new instance of DetectStaleJobsJob.
- #perform ⇒ Object
Constructor Details
#initialize ⇒ DetectStaleJobsJob
Returns a new instance of DetectStaleJobsJob.
14 15 16 17 |
# File 'lib/workhorse/jobs/detect_stale_jobs_job.rb', line 14 def initialize @locked_to_started_threshold = Workhorse.stale_detection_locked_to_started_threshold @run_time_threshold = Workhorse.stale_detection_run_time_threshold end |
Instance Method Details
#perform ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/workhorse/jobs/detect_stale_jobs_job.rb', line 20 def perform = [] # Detect jobs that are locked for too long # if @locked_to_started_threshold != 0 rel = Workhorse::DbJob.locked rel = rel.where('locked_at < ?', @locked_to_started_threshold.seconds.ago) ids = rel.pluck(:id) unless ids.empty? << "Detected #{ids.size} jobs that were locked more than " \ "#{@locked_to_started_threshold}s ago and might be stale: #{ids.inspect}." end end # Detect jobs that are running for too long # if @run_time_threshold != 0 rel = Workhorse::DbJob.started rel = rel.where('started_at < ?', @run_time_threshold.seconds.ago) ids = rel.pluck(:id) unless ids.empty? << "Detected #{ids.size} jobs that are running for longer than " \ "#{@run_time_threshold}s ago and might be stale: #{ids.inspect}." end end if .any? fail .join(' ') end end |