Class: Railswatch::Gems::DelayedJobExt::Plugin

Inherits:
Delayed::Plugin
  • Object
show all
Defined in:
lib/railswatch/gems/delayed_job_ext.rb

Class Method Summary collapse

Class Method Details

.filtered_args(payload_object) ⇒ Object



57
58
59
60
61
62
# File 'lib/railswatch/gems/delayed_job_ext.rb', line 57

def self.filtered_args(payload_object)
  raw = payload_object.args if payload_object.respond_to?(:args)
  Railswatch::Utils.filter_params({ 'args' => Array.wrap(raw) })['args']
rescue StandardError
  nil
end

.meta(payload_object) ⇒ Object

source_type, class_name, method_name


43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/railswatch/gems/delayed_job_ext.rb', line 43

def self.meta(payload_object) # rubocop:disable Metrics/MethodLength
  if payload_object.is_a?(::Delayed::PerformableMethod)
    if payload_object.object.is_a?(Module)
      [:class_method, payload_object.object.name, payload_object.method_name.to_s]
    else
      [:instance_method, payload_object.object.class.name, payload_object.method_name.to_s]
    end
  else
    [:instance_method, payload_object.class.name, 'perform']
  end
rescue StandardError
  %i[unknown unknown unknown]
end

.persist(job, now, status, error) ⇒ Object

rubocop:disable Metrics/AbcSize, Metrics/MethodLength



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/railswatch/gems/delayed_job_ext.rb', line 22

def self.persist(job, now, status, error) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
   = meta(job.payload_object)
  error_bt = error ? error.backtrace&.take(20)&.join("\n") : nil
  record = Railswatch::Models::DelayedJobRecord.new(
    jid: job.id,
    duration: (Railswatch::Utils.time - now) * 1000,
    datetime: now.strftime(Railswatch::FORMAT),
    datetimei: now.to_i,
    source_type: [0],
    class_name: [1],
    method_name: [2],
    status: status,
    job_args: filtered_args(job.payload_object),
    error_message: error&.message,
    error_backtrace: error_bt
  )
  record.save
  CurrentRequest.cleanup
end