Sha256: 008d005ec05a009a993d81a2f7858aad24a6d5dbbc434691451a3ddd571112a8

Contents?: true

Size: 919 Bytes

Versions: 8

Compression:

Stored size: 919 Bytes

Contents

module Rails
  module Rack
    class Tracer
      def initialize(app)
        @app = app
      end

      def call(env)
        @app.call(env)
      ensure
        enhance_rack_span(env)
      end

      private

      def enhance_rack_span(env)
        span = extract_span(env)
        if span && route_found?(env)
          span.operation_name = operation_name(env)
        end
      end

      def extract_span(env)
        env['rack.span']
      end

      def route_found?(env)
        env["action_dispatch.request.path_parameters"]
      end

      def operation_name(env)
        path_parameters = env["action_dispatch.request.path_parameters"]
        action_controller = env["action_controller.instance"]
        controller = action_controller ? action_controller.class.to_s : path_parameters[:controller]
        action = path_parameters[:action]
        "#{controller}##{action}"
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
rails-tracer-0.4.3 lib/rails/rack/tracer.rb
rails-tracer-0.4.2 lib/rails/rack/tracer.rb
rails-tracer-0.4.1 lib/rails/rack/tracer.rb
rails-tracer-0.4.0 lib/rails/rack/tracer.rb
rails-tracer-0.3.0 lib/rails/rack/tracer.rb
rails-tracer-0.2.0 lib/rails/rack/tracer.rb
rails-tracer-0.1.1 lib/rails/rack/tracer.rb
rails-tracer-0.1.0 lib/rails/rack/tracer.rb