module Datadog::Contrib::ActiveRecord::Utils
Common utilities for Rails
Constants
- EMPTY_CONFIG
Public Class Methods
adapter_host()
click to toggle source
# File lib/ddtrace/contrib/active_record/utils.rb, line 16 def self.adapter_host connection_config[:host] end
adapter_name()
click to toggle source
# File lib/ddtrace/contrib/active_record/utils.rb, line 8 def self.adapter_name Datadog::Utils::Database.normalize_vendor(connection_config[:adapter]) end
adapter_port()
click to toggle source
# File lib/ddtrace/contrib/active_record/utils.rb, line 20 def self.adapter_port connection_config[:port] end
connection_config(connection = nil, connection_id = nil)
click to toggle source
In newer Rails
versions, the `payload` contains both the `connection` and its `object_id` named `connection_id`.
So, if rails is recent we'll have a direct access to the connection. Else, we'll find it thanks to the passed `connection_id`.
See this PR for more details: github.com/rails/rails/pull/34602
# File lib/ddtrace/contrib/active_record/utils.rb, line 31 def self.connection_config(connection = nil, connection_id = nil) return default_connection_config if connection.nil? && connection_id.nil? conn = if !connection.nil? connection # Rails 3.0 - 3.2 elsif Gem.loaded_specs['activerecord'].version < Gem::Version.new('4.0') ::ActiveRecord::Base .connection_handler .connection_pools .values .flat_map(&:connections) .find { |c| c.object_id == connection_id } # Rails 4.2+ else ::ActiveRecord::Base .connection_handler .connection_pool_list .flat_map(&:connections) .find { |c| c.object_id == connection_id } end if conn.instance_variable_defined?(:@config) conn.instance_variable_get(:@config) else EMPTY_CONFIG end end
database_name()
click to toggle source
# File lib/ddtrace/contrib/active_record/utils.rb, line 12 def self.database_name connection_config[:database] end
default_connection_config()
click to toggle source
# File lib/ddtrace/contrib/active_record/utils.rb, line 60 def self.default_connection_config return @default_connection_config if instance_variable_defined?(:@default_connection_config) current_connection_name = if ::ActiveRecord::Base.respond_to?(:connection_specification_name) ::ActiveRecord::Base.connection_specification_name else ::ActiveRecord::Base end connection_pool = ::ActiveRecord::Base.connection_handler.retrieve_connection_pool(current_connection_name) connection_pool.nil? ? EMPTY_CONFIG : (@default_connection_config = connection_pool.spec.config) rescue StandardError EMPTY_CONFIG end