Sha256: f923c6efd2bdd1af37bb8f68faa4172586b9fe512cabef5fb6e5433c73d4b74b

Contents?: true

Size: 1.58 KB

Versions: 5

Compression:

Stored size: 1.58 KB

Contents

require 'ddtrace/ext/sql'

require 'ddtrace/contrib/rails/utils'

module Datadog
  module Contrib
    module Rails
      # TODO[manu]: write docs
      module ActiveRecord
        def self.instrument
          # ActiveRecord is instrumented only if it's available
          return unless defined?(::ActiveRecord)

          # subscribe when the active record query has been processed
          ::ActiveSupport::Notifications.subscribe('sql.active_record') do |*args|
            sql(*args)
          end
        end

        def self.sql(_name, start, finish, _id, payload)
          tracer = ::Rails.configuration.datadog_trace.fetch(:tracer)
          database_service = ::Rails.configuration.datadog_trace.fetch(:default_database_service)
          adapter_name = ::ActiveRecord::Base.connection_config[:adapter]
          adapter_name = Datadog::Contrib::Rails::Utils.normalize_vendor(adapter_name)
          span_type = Datadog::Ext::SQL::TYPE

          span = tracer.trace(
            "#{adapter_name}.query",
            resource: payload.fetch(:sql),
            service: database_service,
            span_type: span_type
          )

          # the span should have the query ONLY in the Resource attribute,
          # so that the ``sql.query`` tag will be set in the agent with an
          # obfuscated version
          span.span_type = Datadog::Ext::SQL::TYPE
          span.set_tag('rails.db.vendor', adapter_name)
          span.start_time = start
          span.finish_at(finish)
        rescue StandardError => e
          Datadog::Tracer.log.error(e.message)
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
ddtrace-0.5.0 lib/ddtrace/contrib/rails/active_record.rb
ddtrace-0.4.3 lib/ddtrace/contrib/rails/active_record.rb
ddtrace-0.4.2 lib/ddtrace/contrib/rails/active_record.rb
ddtrace-0.4.1 lib/ddtrace/contrib/rails/active_record.rb
ddtrace-0.4.0 lib/ddtrace/contrib/rails/active_record.rb