Class: RailsErrorDashboard::PagerdutyErrorNotificationJob
- Inherits:
-
ApplicationJob
- Object
- ActiveJob::Base
- ApplicationJob
- RailsErrorDashboard::PagerdutyErrorNotificationJob
- 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) ⇒ Object
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 |
# File 'app/jobs/rails_error_dashboard/pagerduty_error_notification_job.rb', line 13 def perform(error_log_id) 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 = build_pagerduty_payload(error_log, routing_key) response = HTTParty.post( PAGERDUTY_EVENTS_API, body: payload.to_json, headers: { "Content-Type" => "application/json" }, timeout: 10 # CRITICAL: 10 second timeout to prevent hanging ) unless response.success? Rails.logger.error("[RailsErrorDashboard] PagerDuty API error: #{response.code} - #{response.body}") end rescue StandardError => e Rails.logger.error("[RailsErrorDashboard] Failed to send PagerDuty notification: #{e.}") Rails.logger.error(e.backtrace&.first(5)&.join("\n")) if e.backtrace end |