From d0a143d76a366b5b0a21b197d6da9d1a300eeea5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Hendricksen?= Date: Tue, 2 Aug 2016 19:44:33 -0400 Subject: [PATCH] ensure that the Time.now builds get started and tag the Sentry errors from cron --- lib/travis/api/v3/models/cron.rb | 2 +- lib/travis/api/v3/queries/crons.rb | 3 ++- spec/v3/models/cron_spec.rb | 22 ++++++++++++++-------- spec/v3/queries/cron_spec.rb | 2 +- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/lib/travis/api/v3/models/cron.rb b/lib/travis/api/v3/models/cron.rb index 68f664f2..e86527a9 100644 --- a/lib/travis/api/v3/models/cron.rb +++ b/lib/travis/api/v3/models/cron.rb @@ -13,7 +13,7 @@ module Travis::API::V3 elsif last_cron_build_date >= planned_time(LastBuild) planned_time(ThisBuild) else - Time.now + Time.now - 5.minutes end end diff --git a/lib/travis/api/v3/queries/crons.rb b/lib/travis/api/v3/queries/crons.rb index d5799d58..b5daefdd 100644 --- a/lib/travis/api/v3/queries/crons.rb +++ b/lib/travis/api/v3/queries/crons.rb @@ -7,10 +7,11 @@ module Travis::API::V3 def start_all() Models::Cron.all.select do |cron| + @cron = cron start(cron) if cron.next_enqueuing <= Time.now end rescue => e - Raven.capture_exception(e) + Raven.capture_exception(e, tags: { 'cron_id' => @cron.try(:id) }) end def start(cron) diff --git a/spec/v3/models/cron_spec.rb b/spec/v3/models/cron_spec.rb index 9e323e66..7b9dd93a 100644 --- a/spec/v3/models/cron_spec.rb +++ b/spec/v3/models/cron_spec.rb @@ -43,11 +43,13 @@ describe Travis::API::V3::Models::Cron do describe "push build is ignored if disable by build is false" do before do + Timecop.return Timecop.travel(DateTime.new(2015, 12, 31, 16)) end after do Timecop.return + Timecop.freeze(Time.now.utc) end it "for daily builds" do @@ -85,11 +87,13 @@ describe Travis::API::V3::Models::Cron do describe "disable by build works with build" do before do + Timecop.return Timecop.travel(DateTime.new(2015, 12, 31, 16)) end after do Timecop.return + Timecop.freeze(Time.now.utc) end it "for daily builds" do @@ -121,11 +125,13 @@ describe Travis::API::V3::Models::Cron do describe "disable by build works without build" do before do + Timecop.return Timecop.travel(DateTime.new(2015, 12, 31, 16)) end after do Timecop.return + Timecop.freeze(Time.now.utc) end it "for daily builds" do @@ -157,12 +163,12 @@ describe Travis::API::V3::Models::Cron do describe "build starts now if next build time is in the past" do before do - # nothing, this time - # time freeze is performed in examples + Timecop.return end after do Timecop.return + Timecop.freeze(Time.now.utc) end it "for daily builds with disable_by_build true" do @@ -170,7 +176,7 @@ describe Travis::API::V3::Models::Cron do cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'daily', disable_by_build: true) build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron') Timecop.freeze(DateTime.new(2016, 1, 1, 19)) - expect(cron.next_enqueuing).to be == DateTime.now + expect(cron.next_enqueuing).to be == DateTime.now - 5.minutes build.destroy cron.destroy end @@ -180,7 +186,7 @@ describe Travis::API::V3::Models::Cron do cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'daily', disable_by_build: false) build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron') Timecop.freeze(DateTime.new(2016, 1, 1, 19)) - expect(cron.next_enqueuing).to be == DateTime.now + expect(cron.next_enqueuing).to be == DateTime.now - 5.minutes build.destroy cron.destroy end @@ -190,7 +196,7 @@ describe Travis::API::V3::Models::Cron do cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'weekly', disable_by_build: true) build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron') Timecop.freeze(DateTime.new(2016, 1, 7, 19)) - expect(cron.next_enqueuing).to be == DateTime.now + expect(cron.next_enqueuing).to be == DateTime.now - 5.minutes build.destroy cron.destroy end @@ -200,7 +206,7 @@ describe Travis::API::V3::Models::Cron do cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'weekly', disable_by_build: false) build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron') Timecop.freeze(DateTime.new(2016, 1, 7, 19)) - expect(cron.next_enqueuing).to be == DateTime.now + expect(cron.next_enqueuing).to be == DateTime.now - 5.minutes build.destroy cron.destroy end @@ -210,7 +216,7 @@ describe Travis::API::V3::Models::Cron do cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'monthly', disable_by_build: true) build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron') Timecop.freeze(DateTime.new(2016, 1, 31, 19)) - expect(cron.next_enqueuing).to be == DateTime.now + expect(cron.next_enqueuing).to be == DateTime.now - 5.minutes build.destroy cron.destroy end @@ -220,7 +226,7 @@ describe Travis::API::V3::Models::Cron do cron = Travis::API::V3::Models::Cron.create(branch_id: branch.id, interval: 'monthly', disable_by_build: false) build = Travis::API::V3::Models::Build.create(:repository_id => repo.id, :branch_name => branch.name, :event_type => 'cron') Timecop.freeze(DateTime.new(2016, 1, 31, 19)) - expect(cron.next_enqueuing).to be == DateTime.now + expect(cron.next_enqueuing).to be == DateTime.now - 5.minutes build.destroy cron.destroy end diff --git a/spec/v3/queries/cron_spec.rb b/spec/v3/queries/cron_spec.rb index d6d16889..7013495b 100644 --- a/spec/v3/queries/cron_spec.rb +++ b/spec/v3/queries/cron_spec.rb @@ -26,7 +26,7 @@ describe Travis::API::V3::Queries::Crons do cron = Travis::API::V3::Models::Cron.create(branch_id: existing_branch.id, interval: 'daily', disable_by_build: false) error = StandardError.new('Konstantin broke all the thingz!') Travis::API::V3::Models::Cron.any_instance.stubs(:branch).raises(error) - Raven.expects(:capture_exception).with(error) + Raven.expects(:capture_exception).with(error, tags: {'cron_id' => cron.id }) query.start_all end end