Write Job#job_log

This commit is contained in:
Dzmitry Plashchynski
2015-03-07 16:24:20 +02:00
parent dc1f55e13b
commit 5652d19e62
2 changed files with 31 additions and 4 deletions

View File

@@ -1,3 +1,6 @@
require 'stringio'
require 'logger'
module Crono
class Job
include Logging
@@ -5,9 +8,13 @@ module Crono
attr_accessor :performer
attr_accessor :period
attr_accessor :last_performed_at
attr_accessor :job_log
attr_accessor :job_logger
def initialize(performer, period)
self.performer, self.period = performer, period
self.job_log = StringIO.new
self.job_logger = Logger.new(job_log)
end
def next
@@ -24,12 +31,12 @@ module Crono
end
def perform
logger.info "Perform #{performer}"
log "Perform #{performer}"
self.last_performed_at = Time.now
save
Thread.new do
performer.new.perform
logger.info "Finished #{performer} in %.2f seconds" % (Time.now - last_performed_at)
log "Finished #{performer} in %.2f seconds" % (Time.now - last_performed_at)
end
end
@@ -42,6 +49,11 @@ module Crono
end
private
def log(message)
logger.info message
job_logger.info message
end
def model
@model ||= Crono::CronoJob.find_or_create_by(job_id: job_id)
end

View File

@@ -19,7 +19,7 @@ describe Crono::Job do
expect(thread).to be_stop
end
it "should call Job#save after run" do
it "should call Job#save during perform" do
expect(job).to receive(:save)
job.perform.join
job.send(:model).destroy
@@ -53,10 +53,25 @@ describe Crono::Job do
job.save
end
it "should load info from DB" do
it "should load last_performed_at from DB" do
@job = Crono::Job.new(TestJob, period)
@job.load
expect(@job.last_performed_at.utc).to be_eql @saved_last_performed_at.utc
end
end
describe "#log" do
it "should write log messages to both common and job log" do
message = "Test message"
expect(job.logger).to receive(:info).with(message)
expect(job.job_logger).to receive(:info).with(message)
job.send(:log, message)
end
it "should write job log to Job#job_log" do
message = "Test message"
job.send(:log, message)
expect(job.job_log.string).to include(message)
end
end
end