Class: Workhorse::DbJob
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Workhorse::DbJob
- Defined in:
- lib/workhorse/db_job.rb
Constant Summary collapse
- STATE_WAITING =
:waiting- STATE_LOCKED =
:locked- STATE_STARTED =
:started- STATE_SUCCEEDED =
:succeeded- STATE_FAILED =
:failed
Instance Method Summary collapse
- #assert_locked_by!(worker_id) ⇒ Object
- #assert_state!(*states) ⇒ Object
- #mark_failed!(exception) ⇒ Object
- #mark_locked!(worker_id) ⇒ Object
- #mark_started! ⇒ Object
- #mark_succeeded! ⇒ Object
Instance Method Details
#assert_locked_by!(worker_id) ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'lib/workhorse/db_job.rb', line 61 def assert_locked_by!(worker_id) assert_state! STATE_WAITING if locked_by.nil? fail "Job #{id} is not locked by any worker." elsif locked_by != worker_id fail "Job #{id} is locked by another worker (#{locked_by})." end end |
#assert_state!(*states) ⇒ Object
55 56 57 58 59 |
# File 'lib/workhorse/db_job.rb', line 55 def assert_state!(*states) unless states.include?(state.to_sym) fail "Job #{id} is not in state #{states.inspect} but in state #{state.inspect}." end end |
#mark_failed!(exception) ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/workhorse/db_job.rb', line 38 def mark_failed!(exception) assert_state! STATE_LOCKED, STATE_STARTED self.failed_at = Time.now self.last_error = %(#{exception.}\n#{exception.backtrace.join("\n")}) self.state = STATE_FAILED save! end |
#mark_locked!(worker_id) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/workhorse/db_job.rb', line 15 def mark_locked!(worker_id) if changed? fail "Dirty jobs can't be locked." end if locked_at fail "Job #{id} is already locked by #{locked_by.inspect}." end self.locked_at = Time.now self.locked_by = worker_id self.state = STATE_LOCKED save! end |
#mark_started! ⇒ Object
30 31 32 33 34 35 36 |
# File 'lib/workhorse/db_job.rb', line 30 def mark_started! assert_state! STATE_LOCKED self.started_at = Time.now self.state = STATE_STARTED save! end |
#mark_succeeded! ⇒ Object
47 48 49 50 51 52 53 |
# File 'lib/workhorse/db_job.rb', line 47 def mark_succeeded! assert_state! STATE_STARTED self.succeeded_at = Time.now self.state = STATE_SUCCEEDED save! end |