mirror of
https://github.com/plashchynski/crono.git
synced 2026-03-29 13:51:58 +02:00
Add Job class
This commit is contained in:
@@ -4,6 +4,7 @@ end
|
||||
require "active_support/all"
|
||||
require "crono/version.rb"
|
||||
require "crono/period.rb"
|
||||
require "crono/job.rb"
|
||||
require "crono/schedule.rb"
|
||||
require "crono/config.rb"
|
||||
require "crono/performer_proxy.rb"
|
||||
|
||||
@@ -3,17 +3,15 @@ require 'optparse'
|
||||
|
||||
module Crono
|
||||
mattr_accessor :schedule
|
||||
mattr_accessor :logger
|
||||
|
||||
class CLI
|
||||
include Singleton
|
||||
attr_accessor :config
|
||||
attr_accessor :schedule
|
||||
attr_accessor :logger
|
||||
|
||||
def initialize
|
||||
self.config = Config.new
|
||||
self.schedule = Schedule.new
|
||||
Crono.schedule = schedule
|
||||
Crono.schedule = Schedule.new
|
||||
end
|
||||
|
||||
def run
|
||||
@@ -44,12 +42,12 @@ module Crono
|
||||
|
||||
def init_logger
|
||||
logfile = config.daemonize ? config.logfile : STDOUT
|
||||
self.logger = Logger.new(logfile)
|
||||
Crono.logger = Logger.new(logfile)
|
||||
end
|
||||
|
||||
def print_banner
|
||||
logger.info "Loading Crono #{Crono::VERSION}"
|
||||
logger.info "Running in #{RUBY_DESCRIPTION}"
|
||||
Crono.logger.info "Loading Crono #{Crono::VERSION}"
|
||||
Crono.logger.info "Running in #{RUBY_DESCRIPTION}"
|
||||
end
|
||||
|
||||
def load_rails
|
||||
@@ -60,16 +58,11 @@ module Crono
|
||||
require File.expand_path(config.cronotab)
|
||||
end
|
||||
|
||||
def run_job(klass)
|
||||
logger.info "Perform #{klass}"
|
||||
Thread.new { klass.new.perform }
|
||||
end
|
||||
|
||||
def start_working_loop
|
||||
loop do
|
||||
klass, time = schedule.next
|
||||
sleep(time - Time.now)
|
||||
run_job(klass)
|
||||
job = Crono.schedule.next
|
||||
sleep(job.next - Time.now)
|
||||
job.perform
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
19
lib/crono/job.rb
Normal file
19
lib/crono/job.rb
Normal file
@@ -0,0 +1,19 @@
|
||||
module Crono
|
||||
class Job
|
||||
attr_accessor :performer
|
||||
attr_accessor :period
|
||||
|
||||
def initialize(performer, period)
|
||||
self.performer, self.period = performer, period
|
||||
end
|
||||
|
||||
def next
|
||||
period.next
|
||||
end
|
||||
|
||||
def perform
|
||||
Crono.logger.info "Perform #{performer}"
|
||||
Thread.new { performer.new.perform }
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -6,7 +6,8 @@ module Crono
|
||||
end
|
||||
|
||||
def every(period, *args)
|
||||
@schedule.add(@performer, Period.new(period, *args))
|
||||
job = Job.new(@performer, Period.new(period, *args))
|
||||
@schedule.add(job)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,20 +1,22 @@
|
||||
module Crono
|
||||
class Schedule
|
||||
attr_accessor :schedule
|
||||
|
||||
def initialize
|
||||
@schedule = []
|
||||
self.schedule = []
|
||||
end
|
||||
|
||||
def add(peformer, period)
|
||||
@schedule << [peformer, period]
|
||||
def add(job)
|
||||
schedule << job
|
||||
end
|
||||
|
||||
def next
|
||||
[queue.first[0], queue.first[1].next]
|
||||
queue.first
|
||||
end
|
||||
|
||||
private
|
||||
private
|
||||
def queue
|
||||
@schedule.sort { |a,b| a[1].next <=> b[1].next }
|
||||
schedule.sort { |a,b| a.next <=> b.next }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user