class Roundhouse::Job
Encapsulates a pending job within a Roundhouse
queue or sorted set.
The job should be considered immutable but may be removed from the queue via Job#delete
.
Attributes
item[R]
Public Class Methods
new(item, queue_name=nil)
click to toggle source
# File lib/roundhouse/api.rb, line 320 def initialize(item, queue_name=nil) @value = item @item = item.is_a?(Hash) ? item : Roundhouse.load_json(item) @queue_id = queue_name || @item['queue_id'] end
Public Instance Methods
[](name)
click to toggle source
# File lib/roundhouse/api.rb, line 391 def [](name) @item.__send__(:[], name) end
args()
click to toggle source
# File lib/roundhouse/api.rb, line 358 def args @item['args'] end
created_at()
click to toggle source
# File lib/roundhouse/api.rb, line 370 def created_at Time.at(@item['created_at'] || @item['enqueued_at'] || 0).utc end
delete()
click to toggle source
Remove this job from the queue.
# File lib/roundhouse/api.rb, line 384 def delete count = Roundhouse.redis do |conn| conn.lrem("#{Roundhouse::Monitor::QUEUE}:#{@queue_id}", 1, @value) end count != 0 end
display_args()
click to toggle source
# File lib/roundhouse/api.rb, line 344 def display_args # Unwrap known wrappers so they show up in a human-friendly manner in the Web UI @args ||= case klass when /\ARoundhouse::Extensions::Delayed/ safe_load(args[0], args) do |_, _, arg| arg end when "ActiveJob::QueueAdapters::RoundhouseAdapter::JobWrapper" @item['wrapped'] ? args[0]["arguments"] : [] else args end end
display_class()
click to toggle source
# File lib/roundhouse/api.rb, line 330 def display_class # Unwrap known wrappers so they show up in a human-friendly manner in the Web UI @klass ||= case klass when /\ARoundhouse::Extensions::Delayed/ safe_load(args[0], klass) do |target, method, _| "#{target}.#{method}" end when "ActiveJob::QueueAdapters::RoundhouseAdapter::JobWrapper" @item['wrapped'] || args[0] else klass end end
enqueued_at()
click to toggle source
# File lib/roundhouse/api.rb, line 366 def enqueued_at @item['enqueued_at'] ? Time.at(@item['enqueued_at']).utc : nil end
jid()
click to toggle source
# File lib/roundhouse/api.rb, line 362 def jid @item['jid'] end
klass()
click to toggle source
# File lib/roundhouse/api.rb, line 326 def klass @item['class'] end
latency()
click to toggle source
# File lib/roundhouse/api.rb, line 378 def latency Time.now.to_f - (@item['enqueued_at'] || @item['created_at']) end
queue_id()
click to toggle source
# File lib/roundhouse/api.rb, line 374 def queue_id @queue_id end
Private Instance Methods
safe_load(content, default) { |*load| ... }
click to toggle source
# File lib/roundhouse/api.rb, line 397 def safe_load(content, default) begin yield(*YAML.load(content)) rescue => ex # #1761 in dev mode, it's possible to have jobs enqueued which haven't been loaded into # memory yet so the YAML can't be loaded. Roundhouse.logger.warn "Unable to load YAML: #{ex.message}" unless Roundhouse.options[:environment] == 'development' default end end