Sha256: 578a0d3e8bad7397102280e1c34dd962f02c603b67bd9188c9b63e7e20b2a356

Contents?: true

Size: 1.21 KB

Versions: 2

Compression:

Stored size: 1.21 KB

Contents

module Airbrake
  module Rails
    # @since v8.3.0
    class ActionControllerPerformanceBreakdownSubscriber
      # @see https://github.com/rails/rails/issues/8987
      HTML_RESPONSE_WILDCARD = "*/*".freeze

      def call(*args)
        routes = Airbrake::Rack::RequestStore[:routes]
        return if !routes || routes.none?

        event = ActiveSupport::Notifications::Event.new(*args)
        payload = event.payload

        routes.each do |route, method|
          next if (groups = build_groups(payload)).none?

          Airbrake.notify_performance_breakdown(
            method: method,
            route: route,
            response_type: normalize_response_type(payload[:format]),
            groups: groups,
            start_time: event.time
          )
        end
      end

      private

      def build_groups(payload)
        groups = {}

        db_runtime = payload[:db_runtime] || 0
        groups[:db] = db_runtime if db_runtime > 0

        view_runtime = payload[:view_runtime] || 0
        groups[:view] = view_runtime if view_runtime > 0

        groups
      end

      def normalize_response_type(response_type)
        response_type == HTML_RESPONSE_WILDCARD ? :html : response_type
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
airbrake-9.0.2 lib/airbrake/rails/action_controller_performance_breakdown_subscriber.rb
airbrake-9.0.1 lib/airbrake/rails/action_controller_performance_breakdown_subscriber.rb