Sha256: 253dd92639e1e49993bebb934a18747f00531699f71336b7c11b97df9c333f16

Contents?: true

Size: 1.37 KB

Versions: 7

Compression:

Stored size: 1.37 KB

Contents

module Airbrake
  module Rack
    ##
    # Adds context (URL, User-Agent, framework version, controller and more).
    #
    # @since v5.7.0
    class ContextFilter
      def initialize
        @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.freeze
      end

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

        context = notice[:context]

        context[:url] = request.url
        context[:userAgent] = request.user_agent

        add_framework_version(context)

        controller = request.env['action_controller.instance']
        if controller
          context[:component] = controller.controller_name
          context[:action] = controller.action_name
        end

        user = Airbrake::Rack::User.extract(request.env)
        notice[:context].merge!(user.as_json) if user
      end

      private

      def add_framework_version(context)
        if context.key?(:version)
          context[:version] += " #{@framework_version}"
        else
          context[:version] = @framework_version
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
airbrake-6.0.0 lib/airbrake/rack/context_filter.rb
airbrake-5.8.1 lib/airbrake/rack/context_filter.rb
airbrake-5.8.0 lib/airbrake/rack/context_filter.rb
airbrake-5.8.0.rc.3 lib/airbrake/rack/context_filter.rb
airbrake-5.8.0.rc.2 lib/airbrake/rack/context_filter.rb
airbrake-5.8.0.rc.1 lib/airbrake/rack/context_filter.rb
airbrake-5.7.1 lib/airbrake/rack/context_filter.rb