mirror of
https://github.com/plashchynski/crono.git
synced 2026-04-27 19:27:22 +02:00
Refactoring
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
13
lib/crono/logging.rb
Normal 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
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user