Skip to content

Open Telemetry for Primary#1

Open
DamonGroove wants to merge 1 commit intomainfrom
damon__otlp_gem
Open

Open Telemetry for Primary#1
DamonGroove wants to merge 1 commit intomainfrom
damon__otlp_gem

Conversation

@DamonGroove
Copy link
Copy Markdown
Contributor

No description provided.

@DamonGroove DamonGroove changed the title Open Telemtry for Primary Open Telemetry for Primary Jul 11, 2025
class Logger
class << self
def increment(name, tags: {}, by: 1)
if OpenTelemetryExporter.configuration.opentelemetry_enabled?
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe you could have a class method OpenTelemetryExporter.enabled?

Comment on lines +9 to +23
if OpenTelemetryExporter.configuration.opentelemetry_enabled?
begin
meter = OpenTelemetryExporter.configuration.opentelemetry_meter
raise "OpenTelemetry meter not configured" unless meter

meter.create_counter(name).add(by, attributes: convert_tags(tags))
by
rescue => e
log_error("OpenTelemetry error for metric '#{name}': #{e.message}")
log_error("Falling back to configured fallback")
call_fallback_increment(name, tags: tags, by: by)
end
else
call_fallback_increment(name, tags: tags, by: by)
end
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And perhaps better as guard clause?

Suggested change
if OpenTelemetryExporter.configuration.opentelemetry_enabled?
begin
meter = OpenTelemetryExporter.configuration.opentelemetry_meter
raise "OpenTelemetry meter not configured" unless meter
meter.create_counter(name).add(by, attributes: convert_tags(tags))
by
rescue => e
log_error("OpenTelemetry error for metric '#{name}': #{e.message}")
log_error("Falling back to configured fallback")
call_fallback_increment(name, tags: tags, by: by)
end
else
call_fallback_increment(name, tags: tags, by: by)
end
call_fallback_increment(name, tags: tags, by: by) unless OpenTelemetryExporter.enabled?
meter = OpenTelemetryExporter.configuration.opentelemetry_meter
raise "OpenTelemetry meter not configured" unless meter
meter.create_counter(name).add(by, attributes: convert_tags(tags))
by
rescue => e
log_error("OpenTelemetry error for metric '#{name}': #{e.message}")
log_error("Falling back to configured fallback")
call_fallback_increment(name, tags: tags, by: by)

return by
end

if defined?(Datadog::Statsd) && fallback_object.is_a?(Datadog::Statsd)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's a lot of duplication, and if this is meant to be "extensible" (to other libraries), it shouldn't be hard-coded to Datadog::Statsd. Feels like these belong in some OpenTelemetryExporter::DataDogAdapter or something like that, with some sort of factory method returning whatever the configured (or default) fallback adapter is.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a matter of fact, maybe even OpenTelemetry itself should be an adapter, and then this gem is a more "generic", non-OpenTelemetry specific gem (maybe just TelemetryExporter?) and you can specify OpenTelemetry as your adapter of choice, or Datadog). Similar to how ActiveJob abstracts away whichever background job system you want to use

Comment on lines +128 to +131
tags.each_with_object({}) do |tag, result|
key, value = tag.split(":", 2)
result[key] = value
end
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
tags.each_with_object({}) do |tag, result|
key, value = tag.split(":", 2)
result[key] = value
end
tags.map { |tag| tag.split(":", 2) }.to_h

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants