Sha256: 05c8edee3c3f1449e8cbe2e71ff7064046055043a9e219810524912a56b95c88

Contents?: true

Size: 1.58 KB

Versions: 11

Compression:

Stored size: 1.58 KB

Contents

# frozen_string_literal: true

module Airbrake
  module Rack
    # Adds context (URL, User-Agent, framework version, controller and more).
    #
    # @since v5.7.0
    class ContextFilter
      # @return [Integer]
      attr_reader :weight

      def initialize
        @weight = 99
      end

      # @see Airbrake::FilterChain#refine
      def call(notice)
        return unless (request = notice.stash[:rack_request])

        context = notice[:context]

        context[:url] = request.url
        context[:userAddr] =
          if request.respond_to?(:remote_ip)
            request.remote_ip
          else
            request.ip
          end
        context[:userAgent] = request.user_agent

        add_framework_version(context)

        controller = request.env['action_controller.instance']
        return unless controller

        context[:component] = controller.controller_name
        context[:action] = controller.action_name
      end

      private

      def add_framework_version(context)
        if context.key?(:versions)
          context[:versions].merge!(framework_version)
        else
          context[:versions] = framework_version
        end
      end

      def framework_version
        @framework_version ||=
          if defined?(::Rails) && ::Rails.respond_to?(:version)
            { 'rails' => ::Rails.version }
          elsif defined?(::Sinatra)
            { 'sinatra' => Sinatra::VERSION }
          else
            {
              'rack_version' => ::Rack.version,
              'rack_release' => ::Rack.release,
            }
          end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
airbrake-11.0.3 lib/airbrake/rack/context_filter.rb
airbrake-11.0.2 lib/airbrake/rack/context_filter.rb
airbrake-11.0.1 lib/airbrake/rack/context_filter.rb
airbrake-10.0.6 lib/airbrake/rack/context_filter.rb
airbrake-11.0.0 lib/airbrake/rack/context_filter.rb
airbrake-10.1.0.rc.1 lib/airbrake/rack/context_filter.rb
airbrake-10.0.5 lib/airbrake/rack/context_filter.rb
airbrake-10.0.4 lib/airbrake/rack/context_filter.rb
airbrake-10.0.3 lib/airbrake/rack/context_filter.rb
airbrake-10.0.2 lib/airbrake/rack/context_filter.rb
airbrake-10.0.1 lib/airbrake/rack/context_filter.rb