Class: OpenTelemetry::Instrumentation::ActionView::SpanSubscriber
- Inherits:
-
Object
- Object
- OpenTelemetry::Instrumentation::ActionView::SpanSubscriber
- Defined in:
- lib/opentelemetry/instrumentation/action_view/span_subscriber.rb
Overview
The SpanSubscriber is a special ActiveSupport::Notification subscription handler which turns notifications into generic spans, taking care to handle context appropriately.
Constant Summary collapse
- ALWAYS_VALID_PAYLOAD_TYPES =
[TrueClass, FalseClass, String, Numeric, Symbol].freeze
Instance Method Summary collapse
-
#finish(_name, _id, payload) ⇒ Object
rubocop:disable Metrics/AbcSize.
-
#initialize(name:, tracer:) ⇒ SpanSubscriber
constructor
A new instance of SpanSubscriber.
- #start(_name, _id, payload) ⇒ Object
Constructor Details
#initialize(name:, tracer:) ⇒ SpanSubscriber
Returns a new instance of SpanSubscriber.
16 17 18 19 |
# File 'lib/opentelemetry/instrumentation/action_view/span_subscriber.rb', line 16 def initialize(name:, tracer:) @span_name = name.split('.')[0..1].reverse.join(' ').freeze @tracer = tracer end |
Instance Method Details
#finish(_name, _id, payload) ⇒ Object
rubocop:disable Metrics/AbcSize
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/opentelemetry/instrumentation/action_view/span_subscriber.rb', line 30 def finish(_name, _id, payload) # rubocop:disable Metrics/AbcSize span = payload.delete(:__opentelemetry_span) token = payload.delete(:__opentelemetry_ctx_token) return unless span && token payload = transform_payload(payload) attrs = payload.map do |k, v| [k.to_s, sanitized_value(v)] if valid_payload_key?(k) && valid_payload_value?(v) end span.add_attributes(attrs.compact.to_h) if (e = payload[:exception_object]) span.record_exception(e) span.status = OpenTelemetry::Trace::Status.error("Unhandled exception of type: #{e.class}") end span.finish OpenTelemetry::Context.detach(token) end |
#start(_name, _id, payload) ⇒ Object
21 22 23 24 25 26 27 28 |
# File 'lib/opentelemetry/instrumentation/action_view/span_subscriber.rb', line 21 def start(_name, _id, payload) span = @tracer.start_span(@span_name, kind: :internal) token = OpenTelemetry::Context.attach( OpenTelemetry::Trace.context_with_span(span) ) [span, token] end |