Sha256: ecbcd33a684953284a7f8eeb969f2edaed11f11760d841fc78d14906b30832f0

Contents?: true

Size: 1.71 KB

Versions: 1

Compression:

Stored size: 1.71 KB

Contents

# frozen_string_literal: true

module ActiveRecord
  module Tracer
    class Processor
      DEFAULT_OPERATION_NAME = 'sql.query'.freeze
      COMPONENT_NAME = 'ActiveRecord'.freeze
      SPAN_KIND = 'client'.freeze
      DB_TYPE = 'sql'.freeze

      def initialize(tracer)
        @tracer = tracer
      end

      def call(_event_name, start, finish, _id, payload)
        span = @tracer.start_span(
          payload[:name] || DEFAULT_OPERATION_NAME,
          start_time: start,
          tags: {
            component: COMPONENT_NAME,
            :'span.kind' => SPAN_KIND,
            :'db.instance' => db_instance,
            :'db.cached' => payload.fetch(:cached, false),
            :'db.statement' => payload.fetch(:sql).squish,
            :'db.type' => DB_TYPE
          }
        )

        if (exception = payload[:exception_object])
          span.set_tag(:error, true)
          span.log_kv(
            event: 'error',
            :'error.kind' => exception.class.to_s,
            :'error.object' => exception,
            message: exception.message,
            stack: exception.backtrace.join("\n")
          )
        end

        span.finish(end_time: finish)
      end

      private

      def db_instance
        @db_instance ||= begin
          connection_config = ActiveRecord::Base.connection_config
          username = connection_config[:username]
          host = connection_config[:host]
          database = connection_config.fetch(:database)
          vendor = connection_config.fetch(:adapter)

          str = String.new('')
          str << "#{vendor}://"
          str << username if username
          str << "@#{host}" if host
          str << "/#{database}"
          str
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
active_record-tracer-0.1.0 lib/active_record/tracer/processor.rb