Module: Periodically
- Defined in:
- lib/periodically/cli.rb,
lib/periodically.rb,
lib/periodically/job.rb,
lib/periodically/debug.rb,
lib/periodically/defer.rb,
lib/periodically/locks.rb,
lib/periodically/model.rb,
lib/periodically/redis.rb,
lib/periodically/version.rb,
lib/periodically/error_counts.rb,
lib/periodically/error_handler.rb,
lib/periodically/error_messages.rb
Overview
This file handles running Periodically in another process
Defined Under Namespace
Modules: Debug, Defer, ErrorCounts, ErrorHandler, ErrorMessages, Locks, Model
Classes: CLI, Job, RedisConnection
Constant Summary
collapse
- REDIS_DEFAULTS =
{
namespace: "periodically"
}
- DEFAULT_ERROR_DELAY =
proc { |count| (count ** 4) + 15 + (rand(30)*(count+1)) }
- VERSION =
"0.1.0"
- @@registered =
[]
Class Method Summary
collapse
Class Method Details
._registered_jobs ⇒ Object
48
49
50
|
# File 'lib/periodically.rb', line 48
def self._registered_jobs
@@registered
end
|
.execute_next ⇒ Object
30
31
32
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/periodically.rb', line 30
def self.execute_next
found_job, instance = @@registered.lazy.filter_map do |job|
instance = job.poll_next_instance
[job, instance] if instance
end.first
if found_job && instance
found_job.execute_instance(instance)
true
else
false
end
end
|
.logger ⇒ Object
22
23
24
|
# File 'lib/periodically.rb', line 22
def self.logger
@logger ||= Logger.new(STDOUT)
end
|
.logger=(new_logger) ⇒ Object
19
20
21
|
# File 'lib/periodically.rb', line 19
def self.logger=(new_logger)
@logger ||= new_logger
end
|
.redis ⇒ Object
56
57
58
59
60
61
|
# File 'lib/periodically.rb', line 56
def self.redis
raise ArgumentError, "requires a block" unless block_given?
redis_pool.with do |conn|
yield conn
end
end
|
.register(klass, method, opts) ⇒ Object
44
45
46
|
# File 'lib/periodically.rb', line 44
def self.register(klass, method, opts)
@@registered.push(Periodically::Job.new(klass, method, opts))
end
|
.start ⇒ Object
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/periodically.rb', line 63
def self.start
Periodically.redis { |conn| conn.ping }
Thread.new do
while true
executed = Periodically.execute_next
if executed
sleep 1.seconds
else
sleep 10.seconds
end
end
end
end
|