diff options
Diffstat (limited to 'app/models/bulk_imports')
-rw-r--r-- | app/models/bulk_imports/entity.rb | 13 | ||||
-rw-r--r-- | app/models/bulk_imports/export_status.rb | 6 | ||||
-rw-r--r-- | app/models/bulk_imports/tracker.rb | 5 |
3 files changed, 20 insertions, 4 deletions
diff --git a/app/models/bulk_imports/entity.rb b/app/models/bulk_imports/entity.rb index a7e1384641c..dee533944e9 100644 --- a/app/models/bulk_imports/entity.rb +++ b/app/models/bulk_imports/entity.rb @@ -51,11 +51,15 @@ class BulkImports::Entity < ApplicationRecord enum source_type: { group_entity: 0, project_entity: 1 } scope :by_user_id, ->(user_id) { joins(:bulk_import).where(bulk_imports: { user_id: user_id }) } + scope :stale, -> { where('created_at < ?', 8.hours.ago).where(status: [0, 1]) } + scope :by_bulk_import_id, ->(bulk_import_id) { where(bulk_import_id: bulk_import_id)} + scope :order_by_created_at, -> (direction) { order(created_at: direction) } state_machine :status, initial: :created do state :created, value: 0 state :started, value: 1 state :finished, value: 2 + state :timeout, value: 3 state :failed, value: -1 event :start do @@ -70,6 +74,11 @@ class BulkImports::Entity < ApplicationRecord event :fail_op do transition any => :failed end + + event :cleanup_stale do + transition created: :timeout + transition started: :timeout + end end def self.all_human_statuses @@ -83,9 +92,9 @@ class BulkImports::Entity < ApplicationRecord def pipelines @pipelines ||= case source_type when 'group_entity' - BulkImports::Groups::Stage.new(bulk_import).pipelines + BulkImports::Groups::Stage.new(self).pipelines when 'project_entity' - BulkImports::Projects::Stage.new(bulk_import).pipelines + BulkImports::Projects::Stage.new(self).pipelines end end diff --git a/app/models/bulk_imports/export_status.rb b/app/models/bulk_imports/export_status.rb index cae6aad27da..a9750a76987 100644 --- a/app/models/bulk_imports/export_status.rb +++ b/app/models/bulk_imports/export_status.rb @@ -32,10 +32,12 @@ module BulkImports strong_memoize(:export_status) do status = fetch_export_status + relation_export_status = status&.find { |item| item['relation'] == relation } + # Consider empty response as failed export - raise StandardError, 'Empty export status response' unless status&.present? + raise StandardError, 'Empty relation export status' unless relation_export_status&.present? - status.find { |item| item['relation'] == relation } + relation_export_status end rescue StandardError => e { 'status' => Export::FAILED, 'error' => e.message } diff --git a/app/models/bulk_imports/tracker.rb b/app/models/bulk_imports/tracker.rb index cfe33c013ba..a994cc3f8ce 100644 --- a/app/models/bulk_imports/tracker.rb +++ b/app/models/bulk_imports/tracker.rb @@ -46,6 +46,7 @@ class BulkImports::Tracker < ApplicationRecord state :started, value: 1 state :finished, value: 2 state :enqueued, value: 3 + state :timeout, value: 4 state :failed, value: -1 state :skipped, value: -2 @@ -76,5 +77,9 @@ class BulkImports::Tracker < ApplicationRecord event :fail_op do transition any => :failed end + + event :cleanup_stale do + transition [:created, :started] => :timeout + end end end |