Module: ActiveRecord::Tracer
- Defined in:
- lib/rails/active_record/tracer.rb
Constant Summary collapse
- DEFAULT_OPERATION_NAME =
"sql.query".freeze
Class Method Summary collapse
- .instrument(tracer: OpenTracing.global_tracer, active_span: nil) ⇒ Object
- .sql(tracer: OpenTracing.global_tracer, active_span: nil, args:) ⇒ Object
- .start_span(operation_name, tracer: OpenTracing.global_tracer, active_span: nil, start_time: Time.now, **fields) ⇒ Object
Class Method Details
.instrument(tracer: OpenTracing.global_tracer, active_span: nil) ⇒ Object
6 7 8 9 10 |
# File 'lib/rails/active_record/tracer.rb', line 6 def instrument(tracer: OpenTracing.global_tracer, active_span: nil) ::ActiveSupport::Notifications.subscribe('sql.active_record') do |*args| ActiveRecord::Tracer.sql(tracer: tracer, active_span: active_span, args: args) end end |
.sql(tracer: OpenTracing.global_tracer, active_span: nil, args:) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/rails/active_record/tracer.rb', line 12 def sql(tracer: OpenTracing.global_tracer, active_span: nil, args:) _, start, finish, _, payload = *args span = start_span(payload.fetch(:name), tracer: tracer, active_span: active_span, start_time: start, sql: payload.fetch(:sql), cached: payload.fetch(:cached, false), connection_id: payload.fetch(:connection_id)) span.finish(end_time: finish) end |
.start_span(operation_name, tracer: OpenTracing.global_tracer, active_span: nil, start_time: Time.now, **fields) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/rails/active_record/tracer.rb', line 27 def start_span(operation_name, tracer: OpenTracing.global_tracer, active_span: nil, start_time: Time.now, **fields) connection_config = ::ActiveRecord::Base.connection_config span = tracer.start_span(operation_name || DEFAULT_OPERATION_NAME, child_of: active_span.respond_to?(:call) ? active_span.call : active_span, start_time: start_time, tags: { 'component' => 'ActiveRecord', 'span.kind' => 'client', 'db.user' => connection_config.fetch(:username, 'unknown'), 'db.instance' => connection_config.fetch(:database), 'db.vendor' => connection_config.fetch(:adapter), 'db.connection_id' => fields.fetch(:connection_id, 'unknown'), 'db.cached' => fields.fetch(:cached, false), 'db.statement' => fields.fetch(:sql), 'db.type' => 'sql' }) span end |