From 5652d19e6225c11403233ee9cc5af52742ec19b4 Mon Sep 17 00:00:00 2001 From: Dzmitry Plashchynski Date: Sat, 7 Mar 2015 16:24:20 +0200 Subject: [PATCH] Write Job#job_log --- lib/crono/job.rb | 16 ++++++++++++++-- spec/job_spec.rb | 19 +++++++++++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/lib/crono/job.rb b/lib/crono/job.rb index 28a766b..2bfc7b3 100644 --- a/lib/crono/job.rb +++ b/lib/crono/job.rb @@ -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 diff --git a/spec/job_spec.rb b/spec/job_spec.rb index 5a5d1ce..432a216 100644 --- a/spec/job_spec.rb +++ b/spec/job_spec.rb @@ -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