Class: Julewire::Rails::Subscribers::Error

Inherits:
Object
  • Object
show all
Extended by:
Core::Integration::SubscriberInstall
Defined in:
lib/julewire/rails/subscribers/error.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(configuration = Configuration.new) ⇒ Error

Returns a new instance of Error.



22
23
24
# File 'lib/julewire/rails/subscribers/error.rb', line 22

def initialize(configuration = Configuration.new)
  @configuration = configuration
end

Instance Attribute Details

#configuration=(value) ⇒ Object (writeonly)

Sets the attribute configuration

Parameters:

  • value

    the value to set the attribute configuration to.



26
27
28
# File 'lib/julewire/rails/subscribers/error.rb', line 26

def configuration=(value)
  @configuration = value
end

Class Method Details

.install!(configuration) ⇒ Object



10
11
12
13
14
15
16
17
18
19
# File 'lib/julewire/rails/subscribers/error.rb', line 10

def install!(configuration)
  return reset! unless configuration.error_reports?
  return unless defined?(::Rails) && ::Rails.respond_to?(:error)
  return unless ::Rails.error.respond_to?(:subscribe)

  reporter = ::Rails.error
  install_subscriber(configuration, enabled: true) do |subscriber|
    Julewire::RailsSupport::EventReporter.subscribe(reporter, subscriber)
  end
end

Instance Method Details

#report(error, handled:, severity:, context:, source:) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/julewire/rails/subscribers/error.rb', line 28

def report(error, handled:, severity:, context:, source:)
  return unless @configuration.error_reports?
  return if Suppression.active?
  return if request_owned_dispatch_error?(error, handled, source)

  Core::Integration::Facade.emit(
    severity: julewire_severity(severity),
    event: "rails.error",
    logger: "Rails.error",
    source: @configuration.source,
    context: hash_or_empty(context),
    attributes: { rails: {
      handled: handled,
      source: source
    } },
    error: error
  )
  IntegrationHealth.record_success(action: :report, component: :error_subscriber)
rescue StandardError => e
  IntegrationHealth.record_failure(
    e,
    action: :report,
    component: :error_subscriber
  )
end