Module: Periodically

Defined in:
lib/periodically/cli.rb,
lib/periodically.rb,
lib/periodically/job.rb,
lib/periodically/debug.rb,
lib/periodically/model.rb,
lib/periodically/redis.rb

Overview

This file handles running Periodically in another process

Defined Under Namespace

Modules: Debug, Model Classes: CLI, Job, RedisConnection

Constant Summary collapse

REDIS_DEFAULTS =
{
  namespace: "periodically"
}
DEFAULT_ERROR_DELAY =
proc { |count| (count ** 4) + 15 + (rand(30)*(count+1)) }
@@registered =
[]

Class Method Summary collapse

Class Method Details

._registered_jobsObject



32
33
34
# File 'lib/periodically.rb', line 32

def self._registered_jobs
  @@registered
end

.execute_nextObject



19
20
21
22
23
24
25
26
# File 'lib/periodically.rb', line 19

def self.execute_next
  job, instance = @@registered.lazy.filter_map do |job|
    instance = job.poll_next_instance
    [job, instance] if instance
  end.first

  job.execute_instance(instance) if job && instance
end

.loggerObject



11
12
13
# File 'lib/periodically.rb', line 11

def self.logger
  Rails.logger # TODO
end

.redisObject

Raises:

  • (ArgumentError)


40
41
42
43
44
45
# File 'lib/periodically.rb', line 40

def self.redis
  raise ArgumentError, "requires a block" unless block_given?
  redis_pool.with do |conn|
    yield conn
  end
end

.redis_poolObject



36
37
38
# File 'lib/periodically.rb', line 36

def self.redis_pool
  @redis ||= Periodically::RedisConnection.create(REDIS_DEFAULTS)
end

.register(klass, method, opts) ⇒ Object



28
29
30
# File 'lib/periodically.rb', line 28

def self.register(klass, method, opts)
  @@registered.push(Periodically::Job.new(klass, method, opts))
end

.startObject



47
48
49
50
51
52
53
54
55
56
# File 'lib/periodically.rb', line 47

def self.start
  require "rufus-scheduler"
  scheduler = Rufus::Scheduler.new

  Periodically.redis { |conn| conn.ping }
  
  scheduler.interval "10s" do
    Periodically.execute_next
  end
end