Class: Honeybadger::ActiveJobSubscriber

Inherits:
RailsSubscriber show all
Defined in:
lib/honeybadger/notification_subscriber.rb

Instance Method Summary collapse

Methods inherited from NotificationSubscriber

#finish, #process?, #start

Methods included from InstrumentationHelper

#decrement_counter, #extract_attributes, #extract_callable, #gauge, #histogram, #increment_counter, #metric_agent, #metric_attributes, #metric_instrumentation, #metric_source, #monotonic_timer, #time

Instance Method Details

#format_payload(name, payload) ⇒ Object



156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# File 'lib/honeybadger/notification_subscriber.rb', line 156

def format_payload(name, payload)
  job = payload[:job]
  jobs = payload[:jobs]
  adapter = payload[:adapter]

  base_payload = payload.except(:job, :jobs, :adapter).merge({
    adapter_class: adapter&.class&.to_s
  })

  # Add status for perform events based on whether an exception occurred
  if name == "perform.active_job"
    base_payload[:status] = payload[:exception_object] ? "failure" : "success"
  end

  if jobs
    base_payload.merge({
      jobs: jobs.compact.map { |j| {job_class: j.class.to_s, job_id: j.job_id, queue_name: j.queue_name} }
    })
  elsif job
    base_payload.merge({
      job_class: job.class.to_s,
      job_id: job.job_id,
      queue_name: job.queue_name
    })
  else
    base_payload
  end
end

#record(name, payload) ⇒ Object



132
133
134
135
# File 'lib/honeybadger/notification_subscriber.rb', line 132

def record(name, payload)
  return unless Honeybadger.config.load_plugin_insights?(:active_job, feature: :events)
  Honeybadger.event(name, payload)
end

#record_metrics(name, payload) ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/honeybadger/notification_subscriber.rb', line 137

def record_metrics(name, payload)
  return unless Honeybadger.config.load_plugin_insights?(:active_job, feature: :metrics)

  metric_source "active_job"

  case name
  when "perform.active_job"
    gauge("duration.perform.active_job", value: payload[:duration], **payload.slice(:job_class, :queue_name, :status))
  when "enqueue.active_job", "enqueue_at.active_job"
    gauge("duration.enqueue.active_job", value: payload[:duration], **payload.slice(:job_class, :queue_name))
  when "enqueue_retry.active_job"
    gauge("duration.enqueue_retry.active_job", value: payload[:duration], **payload.slice(:job_class, :queue_name))
  when "discard.active_job"
    gauge("duration.discard.active_job", value: payload[:duration], **payload.slice(:job_class, :queue_name))
  when "retry_stopped.active_job"
    gauge("duration.retry_stopped.active_job", value: payload[:duration], **payload.slice(:job_class, :queue_name))
  end
end