Class: EventSubscribers::AppsignalSubscriber

Inherits:
Object
  • Object
show all
Defined in:
app/services/event_subscribers/appsignal_subscriber.rb

Overview

Promotes severity-prefixed Rails.events to AppSignal via the project's
ErrorReporting wrapper. Subscribed with a filter (see
config/initializers/360_rails_event_subscribers.rb) so it only ever receives
events whose name signals a severity:

error.* -> ErrorReporting.error (web / background namespace)
warning.* -> ErrorReporting.warning (web_warning / background_warning)

Every other event stays log-only (LogSubscriber) to keep AppSignal volume
bounded. Telemetry events worth tracking in AppSignal as custom data get an
explicit entry here as they're adopted (see the 0818 task doc).

Constant Summary collapse

SEVERITY_PREFIXES =

Event-name prefix => ErrorReporting severity method.

{ "error." => :error, "warning." => :warning }.freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.relevant?(event) ⇒ Boolean

Subscribe filter: whether this subscriber wants the event at all. Used as
the block passed to Rails.event.subscribe so non-severity events never
reach #emit.

Parameters:

  • event (Hash)

Returns:

  • (Boolean)


25
26
27
# File 'app/services/event_subscribers/appsignal_subscriber.rb', line 25

def self.relevant?(event)
  SEVERITY_PREFIXES.keys.any? { |prefix| event[:name].start_with?(prefix) }
end

Instance Method Details

#emit(event) ⇒ void

This method returns an undefined value.

Parameters:

  • event (Hash)


31
32
33
34
35
36
# File 'app/services/event_subscribers/appsignal_subscriber.rb', line 31

def emit(event)
  severity = severity_for(event[:name])
  return unless severity

  ErrorReporting.public_send(severity, event[:name], context_for(event))
end