class ElasticAPM::Normalizers::ActiveRecord::SqlNormalizer
@api private
Constants
- ACTION
- SKIP_NAMES
- TYPE
- UNKNOWN
Public Class Methods
new(*args)
click to toggle source
Calls superclass method
ElasticAPM::Normalizers::Normalizer::new
# File lib/elastic_apm/normalizers/rails/active_record.rb, line 34 def initialize(*args) super @summarizer = Sql::Signature::Summarizer.new @adapters = {} end
Public Instance Methods
normalize(_transaction, _name, payload)
click to toggle source
# File lib/elastic_apm/normalizers/rails/active_record.rb, line 42 def normalize(_transaction, _name, payload) return :skip if SKIP_NAMES.include?(payload[:name]) name = summarize(payload[:sql]) || payload[:name] subtype = subtype_for(payload) context = Span::Context.new( db: { statement: payload[:sql], type: 'sql' }, destination: { service: { name: subtype, resource: subtype, type: TYPE } } ) [name, TYPE, subtype, ACTION, context] end
Private Instance Methods
cached_adapter_name(adapter_name)
click to toggle source
# File lib/elastic_apm/normalizers/rails/active_record.rb, line 81 def cached_adapter_name(adapter_name) return UNKNOWN if adapter_name.nil? || adapter_name.empty? @adapters[adapter_name] || (@adapters[adapter_name] = adapter_name.downcase) rescue StandardError nil end
can_attempt_connection_id_lookup?(payload)
click to toggle source
# File lib/elastic_apm/normalizers/rails/active_record.rb, line 90 def can_attempt_connection_id_lookup?(payload) RUBY_ENGINE == "ruby" && payload[:connection_id] && ObjectSpace.respond_to?(:_id2ref) end
subtype_for(payload)
click to toggle source
# File lib/elastic_apm/normalizers/rails/active_record.rb, line 59 def subtype_for(payload) if payload[:connection] return cached_adapter_name(payload[:connection].adapter_name) end if can_attempt_connection_id_lookup?(payload) begin loaded_object = ObjectSpace._id2ref(payload[:connection_id]) if loaded_object.respond_to?(:adapter_name) return cached_adapter_name(loaded_object.adapter_name) end rescue RangeError # if connection object has somehow been garbage collected end end cached_adapter_name(::ActiveRecord::Base.connection_config[:adapter]) end
summarize(sql)
click to toggle source
# File lib/elastic_apm/normalizers/rails/active_record.rb, line 77 def summarize(sql) @summarizer.summarize(sql) end