Skip to content

Commit e745deb

Browse files
authored
feat: Enable support for Regexp patterns when subscribing to Active Support's instrumentation Events (#1296)
1 parent e3975ae commit e745deb

File tree

2 files changed

+207
-96
lines changed

2 files changed

+207
-96
lines changed

instrumentation/active_support/lib/opentelemetry/instrumentation/active_support/span_subscriber.rb

+7-6
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def self.subscribe(
2727
span_name_formatter: nil
2828
)
2929
subscriber = OpenTelemetry::Instrumentation::ActiveSupport::SpanSubscriber.new(
30-
name: pattern,
30+
pattern: pattern,
3131
tracer: tracer,
3232
notification_payload_transform: notification_payload_transform,
3333
disallowed_notification_payload_keys: disallowed_notification_payload_keys,
@@ -64,17 +64,18 @@ class SpanSubscriber
6464
ALWAYS_VALID_PAYLOAD_TYPES = [TrueClass, FalseClass, String, Numeric, Symbol].freeze
6565

6666
# rubocop:disable Metrics/ParameterLists
67-
def initialize(name:, tracer:, notification_payload_transform: nil, disallowed_notification_payload_keys: nil, kind: nil, span_name_formatter: nil)
68-
@span_name = safe_span_name_for(span_name_formatter, name).dup.freeze
67+
def initialize(pattern:, tracer:, notification_payload_transform: nil, disallowed_notification_payload_keys: nil, kind: nil, span_name_formatter: nil)
68+
@pattern = pattern
6969
@tracer = tracer
7070
@notification_payload_transform = notification_payload_transform
7171
@disallowed_notification_payload_keys = Array(disallowed_notification_payload_keys)
7272
@kind = kind || :internal
73+
@span_name_formatter = span_name_formatter
7374
end
7475
# rubocop:enable Metrics/ParameterLists
7576

7677
def start(name, id, payload)
77-
span = @tracer.start_span(@span_name, kind: @kind)
78+
span = @tracer.start_span(safe_span_name_for(name), kind: @kind)
7879
token = OpenTelemetry::Context.attach(
7980
OpenTelemetry::Trace.context_with_span(span)
8081
)
@@ -140,8 +141,8 @@ def sanitized_value(value)
140141
# Helper method to try an shield the span name formatter from errors
141142
#
142143
# It wraps the user supplied formatter in a rescue block and returns the original name if a StandardError is raised by the formatter
143-
def safe_span_name_for(span_name_formatter, name)
144-
span_name_formatter&.call(name) || name
144+
def safe_span_name_for(name)
145+
@span_name_formatter&.call(name) || name
145146
rescue StandardError => e
146147
OpenTelemetry.handle_error(exception: e, message: 'Error calling span_name_formatter. Using default span name.')
147148
name

0 commit comments

Comments
 (0)