lib/status_cat/checkers/delayed_job.rb
module StatusCat
module Checkers
class DelayedJob < Base
include ActionView::Helpers::DateHelper
def initialize
return if gem_missing?('delayed_job', defined?(::Delayed))
@status = fail_on_exception { test }
end
def test
@value = count_jobs
expires = 1.day.ago
expired = count_expired(expires)
expired.zero? ? nil : "#{expired} jobs more than #{time_ago_in_words(expires)} old"
end
def count_jobs
sql = 'select count(*) from delayed_jobs where failed_at is null'
result = ::ActiveRecord::Base.connection.execute(sql).first
return result.is_a?(Hash) ? result['count'] : result[0]
end
def count_expired(expires)
sql = "select count(*) from delayed_jobs where created_at < '#{expires.to_s(:db)}' and failed_at is null"
result = ::ActiveRecord::Base.connection.execute(sql).first
return result.is_a?(Hash) ? result['count'] : result[0]
end
end
end
end