aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Van Ryseghem2018-02-13 09:08:18 +0100
committerGitHub2018-02-13 09:08:18 +0100
commit81cb1f8251e3506f7c75a229aabeaba3a83e6d8a (patch)
tree1f35d87dba085495d31cf4588e67e3c3fa15089d
parent551c1117a4b9872c99508da71427f5a28fc31ddc (diff)
parent2e346505cbf2f82c5aaf6fca37966a39b6c9656c (diff)
downloadchouette-core-81cb1f8251e3506f7c75a229aabeaba3a83e6d8a.tar.bz2
Merge pull request #287 from af83/4963-import-cron-should-abort-old-imports
4963 import cron should abort old imports
-rw-r--r--app/models/import.rb8
-rw-r--r--config/schedule.rb1
-rw-r--r--lib/tasks/imports.rake5
-rw-r--r--spec/models/import_spec.rb52
4 files changed, 66 insertions, 0 deletions
diff --git a/app/models/import.rb b/app/models/import.rb
index d8e763bf3..29aadcd56 100644
--- a/app/models/import.rb
+++ b/app/models/import.rb
@@ -44,6 +44,14 @@ class Import < ActiveRecord::Base
%w(successful failed warning aborted canceled)
end
+ def self.abort_old
+ where(
+ 'created_at < ? AND status NOT IN (?)',
+ 4.hours.ago,
+ finished_statuses
+ ).update_all(status: 'aborted')
+ end
+
def notify_parent
parent.child_change
update(notified_parent_at: DateTime.now)
diff --git a/config/schedule.rb b/config/schedule.rb
index 532707470..0d2a24f31 100644
--- a/config/schedule.rb
+++ b/config/schedule.rb
@@ -40,6 +40,7 @@ every :day, :at => '4:00 am' do
end
every 5.minutes do
+ rake "import:netex_abort_old"
rake "import:notify_parent"
end
diff --git a/lib/tasks/imports.rake b/lib/tasks/imports.rake
index 55e017e7f..02e32fd3d 100644
--- a/lib/tasks/imports.rake
+++ b/lib/tasks/imports.rake
@@ -3,4 +3,9 @@ namespace :import do
task notify_parent: :environment do
ParentNotifier.new(Import).notify_when_finished
end
+
+ desc "Mark old unfinished Netex imports as 'aborted'"
+ task netex_abort_old: :environment do
+ NetexImport.abort_old
+ end
end
diff --git a/spec/models/import_spec.rb b/spec/models/import_spec.rb
index ffb2360c2..8b85f151b 100644
--- a/spec/models/import_spec.rb
+++ b/spec/models/import_spec.rb
@@ -29,6 +29,58 @@ RSpec.describe Import, type: :model do
)
end
+ describe ".abort_old" do
+ it "changes imports older than 4 hours to aborted" do
+ Timecop.freeze(Time.now) do
+ old_import = create(
+ :workbench_import,
+ status: 'pending',
+ created_at: 4.hours.ago - 1.minute
+ )
+ current_import = create(:workbench_import, status: 'pending')
+
+ Import.abort_old
+
+ expect(current_import.reload.status).to eq('pending')
+ expect(old_import.reload.status).to eq('aborted')
+ end
+ end
+
+ it "doesn't work on imports with a `finished_status`" do
+ Timecop.freeze(Time.now) do
+ import = create(
+ :workbench_import,
+ status: 'successful',
+ created_at: 4.hours.ago - 1.minute
+ )
+
+ Import.abort_old
+
+ expect(import.reload.status).to eq('successful')
+ end
+ end
+
+ it "only works on the caller type" do
+ Timecop.freeze(Time.now) do
+ workbench_import = create(
+ :workbench_import,
+ status: 'pending',
+ created_at: 4.hours.ago - 1.minute
+ )
+ netex_import = create(
+ :netex_import,
+ status: 'pending',
+ created_at: 4.hours.ago - 1.minute
+ )
+
+ NetexImport.abort_old
+
+ expect(workbench_import.reload.status).to eq('pending')
+ expect(netex_import.reload.status).to eq('aborted')
+ end
+ end
+ end
+
describe "#destroy" do
it "must destroy all child imports" do
netex_import = create(:netex_import)