# KeiruaProd

## Listing DelayedJob cron jobs and schedules

A small helper that I sometimes have to run on different machines. Out of all the jobs, it finds those registered as cron tasks, and displays their schedule in yaml (the y function).

cron_jobs = Delayed::Job.where('cron is not null')
y (cron_jobs.map do |c| [c.handler.match("job_class: (.*)\n")[1], c.cron] end)
---
- - SomeJob
- 0 6 * * *
- - SomeOtherJob
- 0 0 * * *
- - AgainAnotherJob
- "* * * * *"
- - YetAnotherJob
- 0 0 1 * *
- 0 10 * * 1,2,3,4,5,6


Not the most robust code out there for sure. Yet robustness and clarity are not what you always need, and these 2 lines can be pasted in a rails console quite easily.

Another option when you want to mess with this jobs in the console is to parse the job_class using the Yaml component:

Delayed::Job.pluck(:handler).map { |h|  YAML.load(h).job_data["job_class"] }.group_by{|x| x}.map {|k, v| [k, v.count] }


Aaaaand another useful command is to list the error count. Here is a quick and dirty way: it takes the first line of the stack trace, strips the numbers (ids) and sorts the errors by count:

y Delayed::Job.where.not(last_error: nil).pluck(:last_error).map {|e| e&.lines[0].tr('0123456789', '')}.tally.sort_by(&:last)


Also, sometimes you want the objects that lead to these errors:

y Delayed::Job.where("last_error ilike '%worksheet%'").pluck(:handler).map { |h|  YAML.load(h).job_data["arguments"] }
---
- - _aj_globalid: gid://app/SomeModel/23648
- - _aj_globalid: gid://app/SomeModel/2364


Finally, in order not to lose some jobs, it can be useful to have dedicated queues:

$bin/delayed_job --queue=mailers -n 4 start delayed_job.0: process with pid 227532 started. delayed_job.1: process with pid 227534 started. delayed_job.2: process with pid 227539 started. delayed_job.3: process with pid 227543 started.$ bin/delayed_job --pool=active_storage_analysis:6 --pool=mailers:2 start


See a typo ? You can suggest a modification on Github.