class Sidekiq::Job

Encapsulates a pending job within a Sidekiq queue or sorted set.

The job should be considered immutable but may be removed from the queue via #delete.

Attributes

item[R]
value[R]

Public Class Methods

new(item, queue_name=nil) click to toggle source
# File lib/sidekiq/api.rb, line 283
def initialize(item, queue_name=nil)
  @value = item
  @item = item.is_a?(Hash) ? item : Sidekiq.load_json(item)
  @queue = queue_name || @item['queue']
end

Public Instance Methods

[](name) click to toggle source
# File lib/sidekiq/api.rb, line 366
def [](name)
  @item[name]
end
args() click to toggle source
# File lib/sidekiq/api.rb, line 333
def args
  @item['args']
end
created_at() click to toggle source
# File lib/sidekiq/api.rb, line 345
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/sidekiq/api.rb, line 359
def delete
  count = Sidekiq.redis do |conn|
    conn.lrem("queue:#{@queue}", 1, @value)
  end
  count != 0
end
display_args() click to toggle source
# File lib/sidekiq/api.rb, line 313
def display_args
  # Unwrap known wrappers so they show up in a human-friendly manner in the Web UI
  @args ||= case klass
            when /\ASidekiq::Extensions::Delayed/
              safe_load(args[0], args) do |_, _, arg|
                arg
              end
            when "ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper"
              job_args = @item['wrapped'] ? args[0]["arguments"] : []
              if 'ActionMailer::DeliveryJob' == (@item['wrapped'] || args[0])
               # remove MailerClass, mailer_method and 'deliver_now'
               job_args.drop(3)
              else
               job_args
              end
            else
              args
            end
end
display_class() click to toggle source
# File lib/sidekiq/api.rb, line 293
def display_class
  # Unwrap known wrappers so they show up in a human-friendly manner in the Web UI
  @klass ||= case klass
             when /\ASidekiq::Extensions::Delayed/
               safe_load(args[0], klass) do |target, method, _|
                 "#{target}.#{method}"
               end
             when "ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper"
               job_class = @item['wrapped'] || args[0]
               if 'ActionMailer::DeliveryJob' == job_class
                 # MailerClass#mailer_method
                 args[0]['arguments'][0..1].join('#')
               else
                job_class
               end
             else
               klass
             end
end
enqueued_at() click to toggle source
# File lib/sidekiq/api.rb, line 341
def enqueued_at
  @item['enqueued_at'] ? Time.at(@item['enqueued_at']).utc : nil
end
jid() click to toggle source
# File lib/sidekiq/api.rb, line 337
def jid
  @item['jid']
end
klass() click to toggle source
# File lib/sidekiq/api.rb, line 289
def klass
  @item['class']
end
latency() click to toggle source
# File lib/sidekiq/api.rb, line 353
def latency
  Time.now.to_f - (@item['enqueued_at'] || @item['created_at'])
end
queue() click to toggle source
# File lib/sidekiq/api.rb, line 349
def queue
  @queue
end

Private Instance Methods

safe_load(content, default) { |*load| ... } click to toggle source
# File lib/sidekiq/api.rb, line 372
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.
    Sidekiq.logger.warn "Unable to load YAML: #{ex.message}" unless Sidekiq.options[:environment] == 'development'
    default
  end
end