schrodingersbox/status_cat

View on GitHub
lib/status_cat/checkers/delayed_job.rb

Summary

Maintainability
A
0 mins
Test Coverage
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