Class: Sidekiq::Job
- Inherits:
-
Object
- Object
- Sidekiq::Job
- Defined in:
- lib/sidekiq/api.rb
Overview
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 Job#delete.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#item ⇒ Object
readonly
Returns the value of attribute item.
-
#queue ⇒ Object
readonly
Returns the value of attribute queue.
-
#value ⇒ Object
readonly
Returns the value of attribute value.
Instance Method Summary collapse
- #[](name) ⇒ Object
- #args ⇒ Object
- #created_at ⇒ Object
-
#delete ⇒ Object
Remove this job from the queue.
- #display_args ⇒ Object
- #display_class ⇒ Object
- #enqueued_at ⇒ Object
- #error_backtrace ⇒ Object
-
#initialize(item, queue_name = nil) ⇒ Job
constructor
A new instance of Job.
- #jid ⇒ Object
- #klass ⇒ Object
- #latency ⇒ Object
- #parse(item) ⇒ Object
- #tags ⇒ Object
Constructor Details
#initialize(item, queue_name = nil) ⇒ Job
Returns a new instance of Job.
295 296 297 298 299 300 |
# File 'lib/sidekiq/api.rb', line 295 def initialize(item, queue_name = nil) @args = nil @value = item @item = item.is_a?(Hash) ? item : parse(item) @queue = queue_name || @item["queue"] end |
Instance Attribute Details
#item ⇒ Object (readonly)
Returns the value of attribute item.
292 293 294 |
# File 'lib/sidekiq/api.rb', line 292 def item @item end |
#queue ⇒ Object (readonly)
Returns the value of attribute queue.
394 395 396 |
# File 'lib/sidekiq/api.rb', line 394 def queue @queue end |
#value ⇒ Object (readonly)
Returns the value of attribute value.
293 294 295 |
# File 'lib/sidekiq/api.rb', line 293 def value @value end |
Instance Method Details
#[](name) ⇒ Object
410 411 412 413 414 415 |
# File 'lib/sidekiq/api.rb', line 410 def [](name) # nil will happen if the JSON fails to parse. # We don't guarantee Sidekiq will work with bad job JSON but we should # make a best effort to minimize the damage. @item ? @item[name] : nil end |
#args ⇒ Object
364 365 366 |
# File 'lib/sidekiq/api.rb', line 364 def args @args || @item["args"] end |
#created_at ⇒ Object
376 377 378 |
# File 'lib/sidekiq/api.rb', line 376 def created_at Time.at(self["created_at"] || self["enqueued_at"] || 0).utc end |
#delete ⇒ Object
Remove this job from the queue.
403 404 405 406 407 408 |
# File 'lib/sidekiq/api.rb', line 403 def delete count = Sidekiq.redis { |conn| conn.lrem("queue:#{@queue}", 1, @value) } count != 0 end |
#display_args ⇒ Object
337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 |
# File 'lib/sidekiq/api.rb', line 337 def display_args # Unwrap known wrappers so they show up in a human-friendly manner in the Web UI @display_args ||= case klass when /\ASidekiq::Extensions::Delayed/ safe_load(args[0], args) do |_, _, arg| arg end when "ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper" job_args = self["wrapped"] ? args[0]["arguments"] : [] if (self["wrapped"] || args[0]) == "ActionMailer::DeliveryJob" # remove MailerClass, mailer_method and 'deliver_now' job_args.drop(3) elsif (self["wrapped"] || args[0]) == "ActionMailer::MailDeliveryJob" # remove MailerClass, mailer_method and 'deliver_now' job_args.drop(3).first["args"] else job_args end else if self["encrypt"] # no point in showing 150+ bytes of random garbage args[-1] = "[encrypted data]" end args end end |
#display_class ⇒ Object
317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 |
# File 'lib/sidekiq/api.rb', line 317 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 job_class == "ActionMailer::DeliveryJob" || job_class == "ActionMailer::MailDeliveryJob" # MailerClass#mailer_method args[0]["arguments"][0..1].join("#") else job_class end else klass end end |
#enqueued_at ⇒ Object
372 373 374 |
# File 'lib/sidekiq/api.rb', line 372 def enqueued_at self["enqueued_at"] ? Time.at(self["enqueued_at"]).utc : nil end |
#error_backtrace ⇒ Object
384 385 386 387 388 389 390 391 392 |
# File 'lib/sidekiq/api.rb', line 384 def error_backtrace # Cache nil values if defined?(@error_backtrace) @error_backtrace else value = self["error_backtrace"] @error_backtrace = value && uncompress_backtrace(value) end end |
#jid ⇒ Object
368 369 370 |
# File 'lib/sidekiq/api.rb', line 368 def jid self["jid"] end |
#klass ⇒ Object
313 314 315 |
# File 'lib/sidekiq/api.rb', line 313 def klass self["class"] end |
#latency ⇒ Object
396 397 398 399 |
# File 'lib/sidekiq/api.rb', line 396 def latency now = Time.now.to_f now - (@item["enqueued_at"] || @item["created_at"] || now) end |
#parse(item) ⇒ Object
302 303 304 305 306 307 308 309 310 311 |
# File 'lib/sidekiq/api.rb', line 302 def parse(item) Sidekiq.load_json(item) rescue JSON::ParserError # If the job payload in Redis is invalid JSON, we'll load # the item as an empty hash and store the invalid JSON as # the job 'args' for display in the Web UI. @invalid = true @args = [item] {} end |
#tags ⇒ Object
380 381 382 |
# File 'lib/sidekiq/api.rb', line 380 def self["tags"] || [] end |