Sha256: 780ba4abed79061a97da618bbed1f2d924ef3d5d360df0089bebe9a2a26a2f9e

Contents?: true

Size: 1.57 KB

Versions: 7

Compression:

Stored size: 1.57 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 => 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

7 entries across 7 versions & 1 rubygems

Version Path
sidekiq-cron-0.1.7 lib/sidekiq/cron/poller.rb
sidekiq-cron-0.1.6 lib/sidekiq/cron/poller.rb
sidekiq-cron-0.1.5 lib/sidekiq/cron/poller.rb
sidekiq-cron-0.1.4 lib/sidekiq/cron/poller.rb
sidekiq-cron-0.1.3 lib/sidekiq/cron/poller.rb
sidekiq-cron-0.1.2 lib/sidekiq/cron/poller.rb
sidekiq-cron-0.1.0 lib/sidekiq/cron/poller.rb