Class: Resque::Durable::QueueAudit

Inherits:
ActiveRecord::Base
  • Object
show all
Extended by:
Recovery
Defined in:
lib/resque/durable/queue_audit.rb

Defined Under Namespace

Modules: Recovery

Constant Summary collapse

DEFAULT_DURATION =

id enqueued_id queue_name payload enqueue_count enqueued_at completed_at timeout_at updated_at created_at

10.minutes

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Recovery

cleanup, recover

Class Method Details

.initialize_by_klass_and_args(job_klass, args) ⇒ Object



56
57
58
# File 'lib/resque/durable/queue_audit.rb', line 56

def self.initialize_by_klass_and_args(job_klass, args)
  new(:job_klass => job_klass, :payload => args, :enqueued_id => GUID.generate)
end

Instance Method Details

#complete!Object



103
104
105
106
# File 'lib/resque/durable/queue_audit.rb', line 103

def complete!
  self.completed_at = Time.now.utc
  save!
end

#complete?Boolean

Returns:

  • (Boolean)


108
109
110
# File 'lib/resque/durable/queue_audit.rb', line 108

def complete?
  completed_at.present?
end

#delayObject

1, 8, 27, 64, 125, 216, etc. minutes.



117
118
119
# File 'lib/resque/durable/queue_audit.rb', line 117

def delay
  (enqueue_count ** 3).minutes
end

#durationObject



84
85
86
# File 'lib/resque/durable/queue_audit.rb', line 84

def duration
  job_klass.job_timeout
end

#enqueueObject



80
81
82
# File 'lib/resque/durable/queue_audit.rb', line 80

def enqueue
  job_klass.enqueue(*(payload.push(self)))
end

#enqueued!Object



96
97
98
99
100
101
# File 'lib/resque/durable/queue_audit.rb', line 96

def enqueued!
  self.enqueued_at    = Time.now.utc
  self.timeout_at     = enqueued_at + duration
  self.enqueue_count += 1
  save!
end

#fail!Object



92
93
94
# File 'lib/resque/durable/queue_audit.rb', line 92

def fail!
  update_attribute(:timeout_at, Time.now.utc)
end

#heartbeat!Object



88
89
90
# File 'lib/resque/durable/queue_audit.rb', line 88

def heartbeat!
  update_attribute(:timeout_at, Time.now.utc + duration)
end

#job_klassObject



60
61
62
# File 'lib/resque/durable/queue_audit.rb', line 60

def job_klass
  read_attribute(:job_klass).constantize
end

#job_klass=(klass) ⇒ Object



64
65
66
# File 'lib/resque/durable/queue_audit.rb', line 64

def job_klass=(klass)
  write_attribute(:job_klass, klass.to_s)
end

#payloadObject



68
69
70
# File 'lib/resque/durable/queue_audit.rb', line 68

def payload
  ActiveSupport::JSON.decode(super)
end

#payload=(value) ⇒ Object



72
73
74
# File 'lib/resque/durable/queue_audit.rb', line 72

def payload=(value)
  super value.to_json
end

#queueObject



76
77
78
# File 'lib/resque/durable/queue_audit.rb', line 76

def queue
  Resque.queue_from_class(job_klass)
end

#retryable?Boolean

Returns:

  • (Boolean)


112
113
114
# File 'lib/resque/durable/queue_audit.rb', line 112

def retryable?
  Time.now.utc > (timeout_at + delay)
end