class Airbrake::Rails::Event

Event is a wrapper around ActiveSupport::Notifications::Event.

@since v9.0.3 @api private

Constants

HTML_RESPONSE_WILDCARD

@see github.com/rails/rails/issues/8987

MILLISECOND

@return [Integer]

Public Class Methods

new(*args) click to toggle source
# File lib/airbrake/rails/event.rb, line 18
def initialize(*args)
  @event = ActiveSupport::Notifications::Event.new(*args)
  @rails_7_or_greater = ::Rails::VERSION::MAJOR >= 7
end

Public Instance Methods

db_runtime() click to toggle source
# File lib/airbrake/rails/event.rb, line 40
def db_runtime
  @db_runtime ||= @event.payload[:db_runtime] || 0
end
duration() click to toggle source
# File lib/airbrake/rails/event.rb, line 88
def duration
  @event.duration
end
groups() click to toggle source
# File lib/airbrake/rails/event.rb, line 60
def groups
  groups = {}
  groups[:db] = db_runtime if db_runtime > 0
  groups[:view] = view_runtime if view_runtime > 0
  groups
end
method() click to toggle source
# File lib/airbrake/rails/event.rb, line 23
def method
  @event.payload[:method]
end
params() click to toggle source
# File lib/airbrake/rails/event.rb, line 32
def params
  @event.payload[:params]
end
response_type() click to toggle source
# File lib/airbrake/rails/event.rb, line 27
def response_type
  response_type = @event.payload[:format]
  response_type == HTML_RESPONSE_WILDCARD ? :html : response_type
end
sql() click to toggle source
# File lib/airbrake/rails/event.rb, line 36
def sql
  @event.payload[:sql]
end
status_code() click to toggle source
# File lib/airbrake/rails/event.rb, line 67
def status_code
  return @event.payload[:status] if @event.payload[:status]

  if @event.payload[:exception]
    status = ActionDispatch::ExceptionWrapper.status_code_for_exception(
      @event.payload[:exception].first,
    )
    status = 500 if status == 0

    return status
  end

  # The ActiveSupport event doesn't have status only in two cases:
  #   - an exception was thrown
  #   - unauthorized access
  # We have already handled the exception so what's left is unauthorized
  # access. There's no way to know for sure it's unauthorized access, so
  # we are rather optimistic here.
  401
end
time() click to toggle source
# File lib/airbrake/rails/event.rb, line 48
def time
  # On RailsĀ 7+ `ActiveSupport::Notifications::Event#time` returns an
  # instance of Float. It represents monotonic time in milliseconds.
  # Airbrake Ruby expects that the provided time is in seconds. Hence,
  # we need to convert it from milliseconds to seconds. In the
  # versions below Rails 7, time is an instance of Time.
  #
  # Relevant commit:
  # https://github.com/rails/rails/commit/81d0dc90becfe0b8e7f7f26beb66c25d84b8ec7f
  @rails_7_or_greater ? @event.time / MILLISECOND : @event.time
end
view_runtime() click to toggle source
# File lib/airbrake/rails/event.rb, line 44
def view_runtime
  @view_runtime ||= @event.payload[:view_runtime] || 0
end