From 888d5b8142c7fce07b44b020e94c501f933840fe Mon Sep 17 00:00:00 2001 From: "NARUSE, Yui" Date: Tue, 8 Dec 2015 19:27:42 +0900 Subject: [PATCH] Use chron.gem to speed up calculating next run time of cron --- lib/perfectsched.rb | 27 ++++----------------------- perfectsched.gemspec | 2 +- 2 files changed, 5 insertions(+), 24 deletions(-) diff --git a/lib/perfectsched.rb b/lib/perfectsched.rb index 441349c..aa00e43 100644 --- a/lib/perfectsched.rb +++ b/lib/perfectsched.rb @@ -52,7 +52,7 @@ module PerfectSched require File.expand_path(v, File.dirname(__FILE__)) } - require 'cron-spec' + require 'chrono' require 'tzinfo' def self.open(config, &block) @@ -71,28 +71,9 @@ def self.open(config, &block) end def self.cron_time(cron, timestamp, timezone) - begin - tab = CronSpec::CronSpecification.new(cron) - rescue - raise ArgumentError, "invalid cron format: #{$!}: #{cron.inspect}" - end - - begin - tz = TZInfo::Timezone.get(timezone) if timezone - rescue - raise ArgumentError, "unknown timezone: #{$!}: #{timezone.inspect}" - end - - ts = (timestamp + 59) / 60 * 60 - while true - t = Time.at(ts).utc - t = tz.utc_to_local(t) if tz - if tab.is_specification_in_effect?(t) - return ts - end - ts += 60 - # FIXME break - end + ts = timestamp - 1 # compatibility + t = Time.find_zone!(timezone || 'UTC'.freeze).at(ts) + Chrono::NextTime.new(now: t, source: cron).to_time.to_i end def self.next_time(cron, before_timestamp, timezone) diff --git a/perfectsched.gemspec b/perfectsched.gemspec index 86f89ac..5de3951 100644 --- a/perfectsched.gemspec +++ b/perfectsched.gemspec @@ -16,7 +16,7 @@ Gem::Specification.new do |gem| gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) } gem.require_paths = ['lib'] - gem.add_dependency "cron-spec", [">= 0.1.2", "<= 0.1.2"] + gem.add_dependency "chrono", "~> 0.2.0" gem.add_dependency "sequel", "~> 3.48.0" gem.add_dependency "tzinfo", "~> 1.1" gem.add_dependency "perfectqueue", "~> 0.8.41"