Module: Zhong
- Extended by:
- Forwardable
- Defined in:
- lib/zhong.rb,
lib/zhong/at.rb,
lib/zhong/job.rb,
lib/zhong/web.rb,
lib/zhong/util.rb,
lib/zhong/every.rb,
lib/zhong/version.rb,
lib/zhong/scheduler.rb,
lib/zhong/web_helpers.rb
Defined Under Namespace
Modules: Util, WebHelpers
Classes: At, Every, Job, MultiAt, Scheduler, Web
Constant Summary
collapse
- VERSION =
"0.3.0".freeze
Class Attribute Summary collapse
Class Method Summary
collapse
Class Attribute Details
.heartbeat_key ⇒ Object
71
72
73
|
# File 'lib/zhong.rb', line 71
def self.heartbeat_key
@heartbeat_key ||= "zhong:heartbeat"
end
|
.logger ⇒ Object
61
62
63
64
65
|
# File 'lib/zhong.rb', line 61
def self.logger
@logger ||= Logger.new(STDOUT).tap do |logger|
logger.formatter = -> (_, datetime, _, msg) { "#{datetime}: #{msg}\n" }
end
end
|
.redis ⇒ Object
67
68
69
|
# File 'lib/zhong.rb', line 67
def self.redis
@redis ||= Redis.new(url: ENV["REDIS_URL"])
end
|
.tz ⇒ Object
Returns the value of attribute tz.
22
23
24
|
# File 'lib/zhong.rb', line 22
def tz
@tz
end
|
Class Method Details
.all_heartbeats ⇒ Object
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/zhong.rb', line 43
def self.all_heartbeats
heartbeats = redis.hgetall(heartbeat_key)
now = redis_time
old_beats, new_beats = heartbeats.partition do |_, v|
Time.at(v.to_i) < (now - 15.minutes)
end
redis.multi do
old_beats.each { |b| redis.hdel(heartbeat_key, b) }
end
new_beats.map do |k, v|
host, pid = k.split("#", 2)
{host: host, pid: pid, last_seen: Time.at(v.to_i)}
end
end
|
.any_running?(grace = 60.seconds) ⇒ Boolean
35
36
37
|
# File 'lib/zhong.rb', line 35
def self.any_running?(grace = 60.seconds)
latest_heartbeat && latest_heartbeat > (redis_time - grace)
end
|
.latest_heartbeat ⇒ Object
39
40
41
|
# File 'lib/zhong.rb', line 39
def self.latest_heartbeat
all_heartbeats.map { |h| h[:last_seen] }.sort.last
end
|
.schedule(&block) ⇒ Object
27
28
29
|
# File 'lib/zhong.rb', line 27
def self.schedule(&block)
scheduler.instance_eval(&block) if block_given?
end
|
.scheduler ⇒ Object
31
32
33
|
# File 'lib/zhong.rb', line 31
def self.scheduler
@scheduler ||= Scheduler.new
end
|