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