Browse Source

Added methods to queue registered import backends as import jobs and start them easily via the scheduler.

Thorsten Eckel 8 years ago
parent
commit
feef4211f7
1 changed files with 51 additions and 0 deletions
  1. 51 0
      app/models/import_job.rb

+ 51 - 0
app/models/import_job.rb

@@ -59,6 +59,17 @@ class ImportJob < ApplicationModel
     end
   end
 
+  # Queues and starts all import backends as import jobs.
+  #
+  # @example
+  #  ImportJob.start_registered
+  #
+  # return [nil]
+  def self.start_registered
+    queue_registered
+    start
+  end
+
   # Starts all import jobs that have not started yet and are no dry runs.
   #
   # @example
@@ -68,4 +79,44 @@ class ImportJob < ApplicationModel
   def self.start
     where(started_at: nil, dry_run: false).each(&:start)
   end
+
+  # Queues all configured import backends from Setting 'import_backends' as import jobs
+  # that are not yet queued.
+  #
+  # @example
+  #  ImportJob.queue_registered
+  #
+  # return [nil]
+  def self.queue_registered
+    import_backends = Setting.get('import_backends')
+    return if import_backends.blank?
+
+    import_backends.each do |backend|
+
+      if !backend_valid?(backend)
+        Rails.logger.error "Invalid import backend '#{backend}'"
+        next
+      end
+
+      # skip if no entry exists
+      # skip if a not finished entry exists
+      next if ImportJob.exists?(name: backend, finished_at: nil)
+
+      ImportJob.create(name: backend)
+    end
+  end
+
+  # Checks if the given import backend is valid.
+  #
+  # @example
+  #  ImportJob.backend_valid?('Import::Ldap')
+  #  # => true
+  #
+  # return [Boolean]
+  def self.backend_valid?(backend)
+    backend.constantize
+    true
+  rescue NameError
+    false
+  end
 end