mirror of
https://github.com/plashchynski/crono.git
synced 2026-07-07 05:15:14 +02:00
Save performing errors to DB
This commit is contained in:
@@ -75,7 +75,6 @@ module Crono
|
|||||||
end
|
end
|
||||||
|
|
||||||
def start_working_loop
|
def start_working_loop
|
||||||
Thread.abort_on_exception = true
|
|
||||||
while job = Crono.scheduler.next do
|
while job = Crono.scheduler.next do
|
||||||
sleep(job.next - Time.now)
|
sleep(job.next - Time.now)
|
||||||
job.perform
|
job.perform
|
||||||
|
|||||||
+11
-3
@@ -34,10 +34,18 @@ module Crono
|
|||||||
def perform
|
def perform
|
||||||
log "Perform #{performer}"
|
log "Perform #{performer}"
|
||||||
self.last_performed_at = Time.now
|
self.last_performed_at = Time.now
|
||||||
save
|
|
||||||
Thread.new do
|
Thread.new do
|
||||||
performer.new.perform
|
begin
|
||||||
log "Finished #{performer} in %.2f seconds" % (Time.now - last_performed_at)
|
performer.new.perform
|
||||||
|
rescue Exception => e
|
||||||
|
log "Finished #{performer} in %.2f seconds with error: #{e.message}" % (Time.now - last_performed_at)
|
||||||
|
log e.backtrace.join("\n")
|
||||||
|
else
|
||||||
|
log "Finished #{performer} in %.2f seconds" % (Time.now - last_performed_at)
|
||||||
|
ensure
|
||||||
|
save
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
+16
-6
@@ -4,9 +4,16 @@ class TestJob
|
|||||||
def perform;end
|
def perform;end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class TestFailingJob
|
||||||
|
def perform
|
||||||
|
raise "Some error"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe Crono::Job do
|
describe Crono::Job do
|
||||||
let(:period) { Crono::Period.new(2.day) }
|
let(:period) { Crono::Period.new(2.day) }
|
||||||
let(:job) { Crono::Job.new(TestJob, period) }
|
let(:job) { Crono::Job.new(TestJob, period) }
|
||||||
|
let(:failing_job) { Crono::Job.new(TestFailingJob, period) }
|
||||||
|
|
||||||
it "should contain performer and period" do
|
it "should contain performer and period" do
|
||||||
expect(job.performer).to be TestJob
|
expect(job.performer).to be TestJob
|
||||||
@@ -15,14 +22,17 @@ describe Crono::Job do
|
|||||||
|
|
||||||
describe "#perform" do
|
describe "#perform" do
|
||||||
it "should run performer in separate thread" do
|
it "should run performer in separate thread" do
|
||||||
|
expect(job).to receive(:save)
|
||||||
thread = job.perform.join
|
thread = job.perform.join
|
||||||
expect(thread).to be_stop
|
expect(thread).to be_stop
|
||||||
|
job.send(:model).destroy
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should call Job#save during perform" do
|
it "should save performin errors to log" do
|
||||||
expect(job).to receive(:save)
|
thread = failing_job.perform.join
|
||||||
job.perform.join
|
expect(thread).to be_stop
|
||||||
job.send(:model).destroy
|
saved_log = Crono::CronoJob.find_by(job_id: failing_job.job_id).log
|
||||||
|
expect(saved_log).to include "Some error"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -43,7 +53,7 @@ describe Crono::Job do
|
|||||||
job.last_performed_at = Time.now
|
job.last_performed_at = Time.now
|
||||||
job.save
|
job.save
|
||||||
@crono_job = Crono::CronoJob.find_by(job_id: job.job_id)
|
@crono_job = Crono::CronoJob.find_by(job_id: job.job_id)
|
||||||
expect(@crono_job.last_performed_at.utc).to be_eql job.last_performed_at.utc
|
expect(@crono_job.last_performed_at.utc.to_s).to be_eql job.last_performed_at.utc.to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should save and truncate job log" do
|
it "should save and truncate job log" do
|
||||||
@@ -64,7 +74,7 @@ describe Crono::Job do
|
|||||||
it "should load last_performed_at from DB" do
|
it "should load last_performed_at from DB" do
|
||||||
@job = Crono::Job.new(TestJob, period)
|
@job = Crono::Job.new(TestJob, period)
|
||||||
@job.load
|
@job.load
|
||||||
expect(@job.last_performed_at.utc).to be_eql @saved_last_performed_at.utc
|
expect(@job.last_performed_at.utc.to_s).to be_eql @saved_last_performed_at.utc.to_s
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user