app/models/extface/job.rb in extface-0.5.4 vs app/models/extface/job.rb in extface-0.5.5
- old
+ new
@@ -2,12 +2,32 @@
class Job < ActiveRecord::Base
attr_accessor :thread
belongs_to :device, inverse_of: :jobs
- scope :active, ->{ where(arel_table[:completed_at].eq(nil).and(arel_table[:failed_at].eq(nil))) }
+ scope :active, ->{ where(arel_table[:completed_at].eq(nil).and(arel_table[:failed_at].eq(nil)).and(arel_table[:started_at].not_eq(nil))) }
scope :completed, ->{ where(arel_table[:completed_at].not_eq(nil)) }
scope :failed, ->{ where(arel_table[:failed_at].not_eq(nil)) }
+
+ def runtime(description = nil)
+ update!(description: description, started_at: Time.now)
+ begin
+ raise 'No device assigned' unless device.present?
+ raise 'No driver configured' unless device.driver.present?
+ if device.driver.set_job(self)
+ yield device.driver
+ complete!
+ else
+ raise device.driver.errors.full_messages.join(', ')
+ end
+ rescue => e
+ STDERR.puts e.message
+ e.backtrace.each do |line|
+ p line
+ end
+ failed! e.message
+ end
+ end
def complete!
self.completed_at = Time.now
save!
notify("Job #{self.id} completed!")