Module: ActionView::Tracer
- Defined in:
- lib/rails/action_view/tracer.rb
Constant Summary collapse
- COMPONENT =
"ActionView".freeze
Class Method Summary collapse
- .disable ⇒ Object
- .handle_notification(tracer:, active_span:, id:, name:, tags:, start:, finish:) ⇒ Object
- .instrument(tracer: OpenTracing.global_tracer, active_span: nil) ⇒ Object
- .render_collection(tracer: OpenTracing.global_tracer, active_span: nil, args: {}) ⇒ Object
- .render_partial(tracer: OpenTracing.global_tracer, active_span: nil, args: {}) ⇒ Object
- .render_template(tracer: OpenTracing.global_tracer, active_span: nil, args: {}) ⇒ Object
Class Method Details
.disable ⇒ Object
20 21 22 23 24 25 26 |
# File 'lib/rails/action_view/tracer.rb', line 20 def disable @subscribers.each do |subscriber| ::ActiveSupport::Notifications.unsubscribe(subscriber) end @subscribers = [] self end |
.handle_notification(tracer:, active_span:, id:, name:, tags:, start:, finish:) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/rails/action_view/tracer.rb', line 84 def handle_notification(tracer:, active_span:, id:, name:, tags:, start:, finish:) if !Rails::Tracer::Defer.enabled span = tracer.start_span(name, child_of: active_span.respond_to?(:call) ? active_span.call : active_span, start_time: start, tags: ) span.finish(end_time: finish) else spaninfo = { 'event' => name, 'name' => name, 'start' => start, 'finish' => finish, 'tags' => , } Rails::Tracer::Defer.defer_span(id: id, spaninfo: spaninfo) end end |
.instrument(tracer: OpenTracing.global_tracer, active_span: nil) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/rails/action_view/tracer.rb', line 7 def instrument(tracer: OpenTracing.global_tracer, active_span: nil) @subscribers = [] @subscribers << ::ActiveSupport::Notifications.subscribe('render_template.action_view') do |*args| ActionView::Tracer.render_template(tracer: tracer, active_span: active_span, args: args) end @subscribers << ::ActiveSupport::Notifications.subscribe('render_partial.action_view') do |*args| ActionView::Tracer.render_partial(tracer: tracer, active_span: active_span, args: args) end @subscribers << ::ActiveSupport::Notifications.subscribe('render_collection.action_view') do |*args| ActionView::Tracer.render_collection(tracer: tracer, active_span: active_span, args: args) end end |
.render_collection(tracer: OpenTracing.global_tracer, active_span: nil, args: {}) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/rails/action_view/tracer.rb', line 65 def render_collection(tracer: OpenTracing.global_tracer, active_span: nil, args: {}) event, start, finish, id, payload = *args = { 'component' => COMPONENT, 'span.kind' => 'client', 'template_path' => payload.fetch(:identifier), 'collection_size' => payload.fetch(:count), } handle_notification(tracer: tracer, active_span: active_span, id: id, name: event, tags: , start: start, finish: finish) end |
.render_partial(tracer: OpenTracing.global_tracer, active_span: nil, args: {}) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/rails/action_view/tracer.rb', line 47 def render_partial(tracer: OpenTracing.global_tracer, active_span: nil, args: {}) event, start, finish, id, payload = *args = { 'component' => COMPONENT, 'span.kind' => 'client', 'template_path' => payload.fetch(:identifier), } handle_notification(tracer: tracer, active_span: active_span, id: id, name: event, tags: , start: start, finish: finish) end |
.render_template(tracer: OpenTracing.global_tracer, active_span: nil, args: {}) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/rails/action_view/tracer.rb', line 28 def render_template(tracer: OpenTracing.global_tracer, active_span: nil, args: {}) event, start, finish, id, payload = *args = { 'component' => COMPONENT, 'span.kind' => 'client', 'template_path' => payload.fetch(:identifier), 'layout' => payload.fetch(:layout), } handle_notification(tracer: tracer, active_span: active_span, id: id, name: event, tags: , start: start, finish: finish) end |