Sha256: 2421629f7cbc4ad338aed6b866ca05c2b008af8c68ac9edcbfb73d10bae9e6a7

Contents?: true

Size: 1.58 KB

Versions: 5

Compression:

Stored size: 1.58 KB

Contents

require 'sidekiq'
require 'sidekiq/util'
require 'sidekiq/actor'
require 'sidekiq/cron'

module Sidekiq
  module Cron

    POLL_INTERVAL = 10

    ##
    # The Poller checks Redis every N seconds for sheduled cron jobs
    class Poller
      include Util
      include Actor

      def poll(first_time=false)
        watchdog('scheduling cron poller thread died!') do
          add_jitter if first_time

          begin
            time_now = Time.now

            #go through all jobs
            Sidekiq::Cron::Job.all.each do |job|
              #test if job should be enequed
              # if yes add job to queue
              begin
                job.test_and_enque_for_time! time_now if job && job.valid?
              rescue => ex
                #problem somewhere in one job
                logger.error "CRON JOB: #{ex.message}"
                logger.error "CRON JOB: #{ex.backtrace.first}"
              end
            end

          rescue Exception => ex
            # Most likely a problem with redis networking.
            # Punt and try again at the next interval
            logger.error ex.message
            logger.error ex.backtrace.first
          end

          after(poll_interval) { poll }
        end
      end

      private

      def poll_interval
        Sidekiq.options[:poll_interval] || POLL_INTERVAL
      end

      def add_jitter
        begin
          sleep(poll_interval * rand)
        rescue Celluloid::Task::TerminatedError
          # Hit Ctrl-C when Sidekiq is finished booting and we have a chance
          # to get here.
        end
      end

    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
sidekiq-cron-0.3.1 lib/sidekiq/cron/poller.rb
sidekiq-cron-0.3.0 lib/sidekiq/cron/poller.rb
sidekiq-cron-0.2.0 lib/sidekiq/cron/poller.rb
sidekiq-cron-0.1.9 lib/sidekiq/cron/poller.rb
sidekiq-cron-0.1.8 lib/sidekiq/cron/poller.rb