Refactoring

This commit is contained in:
Dzmitry Plashchynski
2015-03-05 15:17:34 +02:00
parent 59e71e89f3
commit 0f32f8a5a4
7 changed files with 35 additions and 15 deletions

View File

@@ -3,6 +3,7 @@ end
require "active_support/all" require "active_support/all"
require "crono/version.rb" require "crono/version.rb"
require "crono/logging.rb"
require "crono/period.rb" require "crono/period.rb"
require "crono/job.rb" require "crono/job.rb"
require "crono/scheduler.rb" require "crono/scheduler.rb"

View File

@@ -3,12 +3,12 @@ require 'optparse'
module Crono module Crono
mattr_accessor :scheduler mattr_accessor :scheduler
mattr_accessor :logger
class CLI class CLI
include Singleton include Singleton
include Logging
attr_accessor :config attr_accessor :config
attr_accessor :logger
def initialize def initialize
self.config = Config.new self.config = Config.new
@@ -17,11 +17,18 @@ module Crono
def run def run
parse_options(ARGV) parse_options(ARGV)
init_logger
daemonize if config.daemonize if config.daemonize
set_log_to(config.logfile)
daemonize
else
set_log_to(STDOUT)
end
write_pid write_pid
load_rails load_rails
print_banner print_banner
start_working_loop start_working_loop
end end
@@ -33,6 +40,7 @@ module Crono
File.open(config.logfile, 'ab') { |f| io.reopen(f) } File.open(config.logfile, 'ab') { |f| io.reopen(f) }
io.sync = true io.sync = true
end end
$stdin.reopen("/dev/null") $stdin.reopen("/dev/null")
end end
@@ -41,14 +49,10 @@ module Crono
File.write(pidfile, ::Process.pid) File.write(pidfile, ::Process.pid)
end end
def init_logger
logfile = config.daemonize ? config.logfile : STDOUT
Crono.logger = self.logger = Logger.new(logfile)
end
def print_banner def print_banner
logger.info "Loading Crono #{Crono::VERSION}" logger.info "Loading Crono #{Crono::VERSION}"
logger.info "Running in #{RUBY_DESCRIPTION}" logger.info "Running in #{RUBY_DESCRIPTION}"
logger.info "Jobs:" logger.info "Jobs:"
Crono.scheduler.jobs.each do |job| Crono.scheduler.jobs.each do |job|
logger.info job.description logger.info job.description

View File

@@ -1,5 +1,7 @@
module Crono module Crono
class Job class Job
include Logging
attr_accessor :performer attr_accessor :performer
attr_accessor :period attr_accessor :period
attr_accessor :last_performed_at attr_accessor :last_performed_at
@@ -17,11 +19,11 @@ module Crono
end end
def perform def perform
Crono.logger.info "Perform #{performer}" logger.info "Perform #{performer}"
self.last_performed_at = Time.now self.last_performed_at = Time.now
Thread.new do Thread.new do
performer.new.perform performer.new.perform
Crono.logger.info "Finished #{performer} in %.2f seconds" % (Time.now - last_performed_at) logger.info "Finished #{performer} in %.2f seconds" % (Time.now - last_performed_at)
end end
end end
end end

13
lib/crono/logging.rb Normal file
View File

@@ -0,0 +1,13 @@
module Crono
mattr_accessor :logger
module Logging
def set_log_to(logfile)
Crono.logger = Logger.new(logfile)
end
def logger
Crono.logger
end
end
end

View File

@@ -7,7 +7,7 @@ module Crono
def every(period, *args) def every(period, *args)
job = Job.new(@performer, Period.new(period, *args)) job = Job.new(@performer, Period.new(period, *args))
@scheduler.add(job) @scheduler.add_job(job)
end end
end end

View File

@@ -6,7 +6,7 @@ module Crono
self.jobs = [] self.jobs = []
end end
def add(job) def add_job(job)
jobs << job jobs << job
end end
@@ -16,7 +16,7 @@ module Crono
private private
def queue def queue
jobs.sort { |a,b| a.next <=> b.next } jobs.sort_by(&:next)
end end
end end
end end

View File

@@ -6,7 +6,7 @@ end
describe Crono::PerformerProxy do describe Crono::PerformerProxy do
it "should add job to schedule" do it "should add job to schedule" do
expect(Crono.scheduler).to receive(:add).with(kind_of(Crono::Job)) expect(Crono.scheduler).to receive(:add_job).with(kind_of(Crono::Job))
Crono.perform(TestJob).every(2.days, at: "15:30") Crono.perform(TestJob).every(2.days, at: "15:30")
end end
end end