Class: Extface::Job

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/extface/job.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#threadObject

Returns the value of attribute thread.



3
4
5
# File 'app/models/extface/job.rb', line 3

def thread
  @thread
end

Instance Method Details

#complete!Object



31
32
33
34
35
# File 'app/models/extface/job.rb', line 31

def complete!
  self.completed_at = Time.now
  save!
  notify("Job #{self.id} completed!")
end

#completed?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'app/models/extface/job.rb', line 37

def completed?
  !!completed_at
end

#connected!Object



41
42
43
44
45
46
47
# File 'app/models/extface/job.rb', line 41

def connected!
  unless connected?
    self.connected_at = Time.now
    save! unless Rails.env.test?
    notify("Job #{self.id} device connected!")
  end
end

#connected?Boolean

Returns:

  • (Boolean)


49
50
51
# File 'app/models/extface/job.rb', line 49

def connected?
  !!connected_at?
end

#failed!(message) ⇒ Object



53
54
55
56
57
58
59
# File 'app/models/extface/job.rb', line 53

def failed!(message)
  self.error = message
  self.failed_at = Time.now
  save!
  notify(message)
  notify("Job #{self.id} failed!")
end

#failed?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'app/models/extface/job.rb', line 61

def failed?
  !!failed_at
end

#notify(message) ⇒ Object



65
66
67
68
69
# File 'app/models/extface/job.rb', line 65

def notify(message)
  Extface.redis_block do |r|
    r.publish(self.id, message)
  end
end

#rpush(buffer) ⇒ Object



71
72
73
74
75
# File 'app/models/extface/job.rb', line 71

def rpush(buffer)
  Extface.redis_block do |r|
    r.rpush self.id, buffer
  end
end

#runtime(description = nil) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'app/models/extface/job.rb', line 11

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