Module: ActiveRecord::RailsOpentracer
- Defined in:
- lib/rails_opentracer/active_record/rails_opentracer.rb
Constant Summary collapse
- DEFAULT_OPERATION_NAME =
"sql.query".freeze
Class Method Summary collapse
- .disable ⇒ Object (also: clear_subscribers)
- .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
.disable ⇒ Object Also known as: clear_subscribers
15 16 17 18 19 20 21 22 |
# File 'lib/rails_opentracer/active_record/rails_opentracer.rb', line 15 def disable if @subscriber ActiveSupport::Notifications.unsubscribe(@subscriber) @subscriber = nil end self end |
.instrument(tracer: OpenTracing.global_tracer, active_span: nil) ⇒ Object
6 7 8 9 10 11 12 13 |
# File 'lib/rails_opentracer/active_record/rails_opentracer.rb', line 6 def instrument(tracer: OpenTracing.global_tracer, active_span: nil) clear_subscribers @subscriber = ::ActiveSupport::Notifications.subscribe('sql.active_record') do |*args| ActiveRecord::RailsOpentracer.sql(tracer: tracer, active_span: active_span, args: args) end self end |
.sql(tracer: OpenTracing.global_tracer, active_span: nil, args:) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/rails_opentracer/active_record/rails_opentracer.rb', line 25 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)) if payload[:exception] ::RailsOpentracer::SpanHelpers.set_error(span, payload[:exception_object] || payload[:exception]) end span.finish(end_time: finish) end |
.start_span(operation_name, tracer: OpenTracing.global_tracer, active_span: nil, start_time: Time.now, **fields) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/rails_opentracer/active_record/rails_opentracer.rb', line 44 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 |