lib/zhong.rb in zhong-0.1.5 vs lib/zhong.rb in zhong-0.1.6
- old
+ new
@@ -1,43 +1,51 @@
require "digest"
+require "forwardable"
require "logger"
require "msgpack"
require "redis"
require "suo"
require "active_support/time"
require "zhong/version"
+require "zhong/util"
require "zhong/every"
require "zhong/at"
require "zhong/job"
require "zhong/scheduler"
module Zhong
class << self
+ extend Forwardable
attr_writer :logger, :redis
attr_accessor :tz
+
+ def_delegators :scheduler, :start, :stop, :clear, :jobs, :redis_time
end
def self.schedule(&block)
scheduler.instance_eval(&block) if block_given?
end
- def self.start
- scheduler.start
+ def self.scheduler
+ @scheduler ||= Scheduler.new(logger: logger, redis: redis, tz: tz)
end
- def self.stop
- scheduler.stop
+ def self.any_running?(grace = 60.seconds)
+ latest_heartbeat > (redis_time - grace)
end
- def self.scheduler
- @scheduler ||= Scheduler.new(logger: logger, redis: redis, tz: tz)
+ def self.latest_heartbeat
+ all_heartbeats.map { |h| h[:last_seen] }.sort.last
end
- def self.jobs
- scheduler.jobs
+ def self.all_heartbeats
+ Zhong::Util.safe_mget(Zhong.redis.scan_each(match: "zhong:heartbeat:*").to_a).map do |k, v|
+ host, pid = k.split("zhong:heartbeat:", 2)[1].split("#", 2)
+ {host: host, pid: pid, last_seen: Time.at(v.to_i)}
+ end
end
def self.logger
@logger ||= Logger.new(STDOUT).tap do |logger|
logger.formatter = -> (_, datetime, _, msg) { "#{datetime}: #{msg}\n" }