Sha256: cafb6b9b2e5f16459c3362154fa608a0532ca9fabdd036b2a4b7683ed792422f

Contents?: true

Size: 1.51 KB

Versions: 3

Compression:

Stored size: 1.51 KB

Contents

# frozen_string_literal: true

require "rails/railtie"
require "honeycomb/integrations/active_support"
require "honeycomb/integrations/rack"
require "honeycomb/integrations/warden"

module Honeycomb
  # Rails specific methods for building middleware
  module Rails
    def add_package_information(env)
      yield "meta.package", "rails"
      yield "meta.package_version", ::Rails::VERSION::STRING

      ::ActionDispatch::Request.new(env).tap do |request|
        yield "request.controller", request.params[:controller]
        yield "request.action", request.params[:action]

        break unless request.respond_to? :routes
        break unless request.routes.respond_to? :router

        found_route = false
        request.routes.router.recognize(request) do |route, _|
          break if found_route

          found_route = true
          yield "request.route", "#{env['REQUEST_METHOD']} #{route.path.spec}"
        end
      end
    end

    # Rails middleware
    class Middleware
      include Rack
      include Warden
      include Rails
    end
  end

  # Automatically capture rack requests and create a trace
  class Railtie < ::Rails::Railtie
    initializer("honeycomb.install_middleware",
                after: :load_config_initializers) do |app|
      if Honeycomb.client
        # what location should we insert the middleware at?
        app.config.middleware.insert_before(
          ::Rails::Rack::Logger,
          Honeycomb::Rails::Middleware,
          client: Honeycomb.client,
        )
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
honeycomb-beeline-1.0.1 lib/honeycomb/integrations/rails.rb
honeycomb-beeline-1.0.0 lib/honeycomb/integrations/rails.rb
honeycomb-beeline-1.0.0.pre.beta4 lib/honeycomb/integrations/rails.rb