Class: RailsErrorDashboard::PagerdutyErrorNotificationJob

Inherits:
ApplicationJob
  • Object
show all
Defined in:
app/jobs/rails_error_dashboard/pagerduty_error_notification_job.rb

Overview

Job to send critical error notifications to PagerDuty Only triggers for critical severity errors

Constant Summary collapse

PAGERDUTY_EVENTS_API =
"https://events.pagerduty.com/v2/enqueue"

Instance Method Summary collapse

Instance Method Details

#perform(error_log_id, locale = nil) ⇒ Object

Parameters:

  • locale (String, nil) (defaults to: nil)

    resolved at enqueue time. nil for jobs enqueued by a pre-Phase-4 version still draining from the queue.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'app/jobs/rails_error_dashboard/pagerduty_error_notification_job.rb', line 13

def perform(error_log_id, locale = nil)
  error_log = ErrorLog.find(error_log_id)

  # Only trigger PagerDuty for critical errors
  return unless error_log.critical?

  routing_key = RailsErrorDashboard.configuration.pagerduty_integration_key
  return unless routing_key.present?

  payload = Services::PagerdutyPayloadBuilder.call(
    error_log, routing_key: routing_key, locale: job_locale(locale)
  )
  response = post_json(PAGERDUTY_EVENTS_API, payload)

  unless response_success?(response)
    Rails.logger.error("[RailsErrorDashboard] PagerDuty API error: #{response_code(response)} - #{response_body(response)}")
  end
rescue StandardError => e
  Rails.logger.error("[RailsErrorDashboard] Failed to send PagerDuty notification: #{e.message}")
  Rails.logger.error(e.backtrace&.first(5)&.join("\n")) if e.backtrace
end