Class: Bugsnag::Middleware::DelayedJob
- Inherits:
-
Object
- Object
- Bugsnag::Middleware::DelayedJob
- Defined in:
- lib/bugsnag/middleware/delayed_job.rb
Overview
Attaches delayed_job information to an error report
Instance Method Summary collapse
- #call(report) ⇒ Object
- #construct_job_payload(payload) ⇒ Object
-
#initialize(bugsnag) ⇒ DelayedJob
constructor
A new instance of DelayedJob.
Constructor Details
#initialize(bugsnag) ⇒ DelayedJob
Returns a new instance of DelayedJob.
5 6 7 |
# File 'lib/bugsnag/middleware/delayed_job.rb', line 5 def initialize(bugsnag) @bugsnag = bugsnag end |
Instance Method Details
#call(report) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/bugsnag/middleware/delayed_job.rb', line 9 def call(report) job = report.request_data[:delayed_job] if job job_data = { :class => job.class.name, :id => job.id } job_data[:priority] = job.priority if job.respond_to?(:priority) job_data[:run_at] = job.run_at if job.respond_to?(:run_at) job_data[:locked_at] = job.locked_at if job.respond_to?(:locked_at) job_data[:locked_by] = job.locked_by if job.respond_to?(:locked_by) job_data[:created_at] = job.created_at if job.respond_to?(:created_at) job_data[:queue] = job.queue if job.respond_to?(:queue) if job.respond_to?(:payload_object) job_data[:active_job] = job.payload_object.job_data if job.payload_object.respond_to?(:job_data) payload_data = construct_job_payload(job.payload_object) report.context = payload_data[:display_name] if payload_data.include?(:display_name) report.context ||= payload_data[:class] if payload_data.include?(:class) job_data[:payload] = payload_data end if job.respond_to?(:attempts) # +1 as "attempts" is zero-based and does not include the current failed attempt job_data[:attempt] = job.attempts + 1 job_data[:max_attempts] = (job.respond_to?(:max_attempts) && job.max_attempts) || Delayed::Worker.max_attempts end report.add_tab(:job, job_data) end @bugsnag.call(report) end |
#construct_job_payload(payload) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/bugsnag/middleware/delayed_job.rb', line 42 def construct_job_payload(payload) data = { :class => payload.class.name } data[:id] = payload.id if payload.respond_to?(:id) data[:display_name] = payload.display_name if payload.respond_to?(:display_name) data[:method_name] = payload.method_name if payload.respond_to?(:method_name) if payload.respond_to?(:args) data[:args] = payload.args elsif payload.respond_to?(:to_h) data[:args] = payload.to_h elsif payload.respond_to?(:instance_values) data[:args] = payload.instance_values end if payload.is_a?(::Delayed::PerformableMethod) && (object = payload.object) data[:object] = { :class => object.class.name } data[:object][:id] = object.id if object.respond_to?(:id) end if payload.respond_to?(:job_data) && payload.job_data.respond_to?(:[]) [:job_class, :arguments, :queue_name, :job_id].each do |key| if (value = payload.job_data[key.to_s]) data[key] = value end end end data end |