Module: CloseYourIt::Rails::ActiveJobExtension

Defined in:
lib/closeyourit/rails/active_job_extension.rb

Overview

Incluso in ActiveJob::Base (via railtie ‘on_load(:active_job)`): cattura gli errori dei job (oggi persi) con il contesto del job, poi ri-solleva. La logica vive in `.monitor` per essere testabile senza ActiveSupport/ActiveJob.

Class Method Summary collapse

Class Method Details

.apply_job_scope(job) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/closeyourit/rails/active_job_extension.rb', line 31

def self.apply_job_scope(job)
  CloseYourIt.set_tag("job.class", job.class.name)
  CloseYourIt.set_tag("job.queue", job.queue_name) if job.respond_to?(:queue_name)

  context = {}
  context["job_id"] = job.job_id if job.respond_to?(:job_id)
  context["executions"] = job.executions if job.respond_to?(:executions)
  CloseYourIt.set_context("active_job", context) unless context.empty?
end

.included(base) ⇒ Object



9
10
11
12
13
# File 'lib/closeyourit/rails/active_job_extension.rb', line 9

def self.included(base)
  base.around_perform do |job, block|
    CloseYourIt::Rails::ActiveJobExtension.monitor(job) { block.call }
  end
end

.monitor(job) ⇒ Object

Esegue il job arricchendo lo scope con tag/context; cattura l’errore (handled:false) e ri-solleva; resetta lo scope a fine job (no bleed tra job sullo stesso thread).



17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/closeyourit/rails/active_job_extension.rb', line 17

def self.monitor(job)
  return yield unless CloseYourIt.configuration.report_active_job_errors

  begin
    apply_job_scope(job)
    yield
  rescue Exception => e # rubocop:disable Lint/RescueException
    CloseYourIt.capture_exception(e, handled: false)
    raise
  ensure
    CloseYourIt::Scope.reset!
  end
end