Sha256: 46813bc875ca9e505703879abb491cc24def651fa917f123957b4104aee315d4
Contents?: true
Size: 1.93 KB
Versions: 1
Compression:
Stored size: 1.93 KB
Contents
# frozen_string_literal: true module ActiveRecord module OpenTracing 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, 'peer.address' => db_address } ) 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 ||= db_config.fetch(:database) end def db_address @db_address ||= 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 def db_config @db_config ||= ActiveRecord::Base.connection_config end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
activerecord-opentracing-dox-fork-0.2.2.doximity1 | lib/active_record/opentracing/processor.rb |