Skip to content

Instantly share code, notes, and snippets.

@joeyAghion
Last active April 8, 2018 02:14
Show Gist options
  • Save joeyAghion/9274268 to your computer and use it in GitHub Desktop.
Save joeyAghion/9274268 to your computer and use it in GitHub Desktop.
delayed jobs by queue and priority
# Number of queued jobs per queue and priority
pp Delayed::Job.distinct(:queue).sort.map{|q| Delayed::Job.where(queue: q).distinct(:priority).sort.map{|p| [q, p, Delayed::Job.where(queue: q, priority: p).count] } }.sort; nil
# [[["any", 2, 3], ["any", 3, 3323], ["any", 4, 5542], ["any", 5, 2]],
# [["bidding", 3, 15]],
# [["default", 3, 10]],
# [["fair", 3, 246]]]
# First 20 jobs, in order that workers dequeue them
pp Delayed::Job.where(:run_at.lte => Time.now.utc, failed_at: nil).any_of({locked_by: /worker/}, {locked_at: nil}, {locked_at: {'$lt' => (Time.now.utc - 14400)}}).any_in(queue: %w{any imgs}).desc(:locked_by).asc(:priority).asc(:run_at).limit(20).map{|j| [j.id, j.handler.inspect[0..250], j.locked_by, j.run_at, (Time.now.utc - j.locked_at if j.locked_at)] }; nil
# [[<BSON::ObjectId:0x135554220 data=5629067d7261696db2000040>,
# "\"--- !ruby/object:Delayed::PerformableMethod\\nobject: !ruby/struct:Delayed::ShallowMongoid::DocumentStub\\n klass: !ruby/class 'Artwork'\\n id: 561fbb78726169264100002a\\n selector: \\nmethod_name: :es_update\\nargs: []\\n\"",
# "delayed_job.gravity-4 host:worker8",
# Thu, 22 Oct 2015 15:53:33 UTC +00:00,
# 2.518255397],
# ...
# Failing jobs by queue and error start
pp Delayed::Job.where(:last_error.exists => true).group_by{|j| [j.queue, j.priority] }.map{|(q,p),js| [q,p,js.group_by{|j| j.last_error[0...60]}.map{|err,jobs| [err,jobs.size] }] }; nil
# [["any",
# 3,
# [["undefined method `artworks' for nil:NilClass\n/srv/www/gravity/releases/20151019161803/app/models/dom",
# 1],
# ["undefined method `artworks' for nil:NilClass\n/srv/www/gravity/releases/20151019161820/app/models/dom",
# 1],
# ["403 Forbidden\n/usr/local/lib/ruby/2.0.0/open-uri.rb:353:in `open_http'\n/usr/local/lib/ruby/2.0.0/ope",
# 3]]],
# ["any",
# 5,
# [["\nProblem:\n Validation of Artwork failed.\nSummary:\n The following errors were found: Unpublish requ",
# 2]]]]
# Counts by "method"
grouped = Delayed::Job.where(queue: 'any', priority: 3).group_by{|j| j.handler.match(/method_name: (.*)$/).try('[]', 1) || j.handler.inspect[0...50] }; pp grouped.map{|k,v| [v.size,k] }.sort.reverse; nil
# [[":end_show!", 2250],
# [":start_show!", 1051],
# [":welcome!", 17],
# [":set_default_image!", 2],
# [":transfer_file_and_calculate_size!", 3]]
# Counts by queue and priority excluding jobs scheduled for the future
criteria = Delayed::Job.where(:run_at.lt => Time.now); pp criteria.distinct(:queue).sort.map{|q| criteria.where(queue: q).distinct(:priority).sort.map{|p| [q, p, criteria.where(queue: q, priority: p).count] } }.sort; nil
# [[["any", 3, 1]], [["fair", 3, 536]]]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment