foam-ruby 0.1.0.alpha7 → 0.1.0.alpha8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6357c1e7accb580c8cec51b5ca55500a49c84964984f1037176dccd242240e82
4
- data.tar.gz: 85b970210911bc6bbacf876c25407f13ab1d8900a0466a83d92d267f065d1bb6
3
+ metadata.gz: a4435b32248c007790701a7de2054f702398a2f1881bcaa571f20f209825d5e8
4
+ data.tar.gz: 82a9836aa895f5b1b70ace7b441dd288997ff7e2772a5c1e5f7742a2fa22dcc6
5
5
  SHA512:
6
- metadata.gz: 127fbcc2b2c88659c61d20404fb6361e090cdc2dc352221b87d123efeb3121e2727414f6b4f05ba4140b2748b330a137e2c8e1eda6205f27097ad2be592d896c
7
- data.tar.gz: 9d5718f4db88c948a6787632687cf9081c4c0a0425e5b45ae4c349e4b3e333aed3d075980bf54ece6fdea8427b95139a8cb7ddcd7faea59ac2bf5d7ec56053f3
6
+ metadata.gz: 8e3792c185a39b7470ddf0b0037580fcf45ed9f906d4834ea28bd837422df5fbb365109f9525fae66e7cb68121844ad119f38228d83bcfb0946965fbf6b005d2
7
+ data.tar.gz: 4fab2024d4ef4e8fe3601e3836e8af28544feaefd41d80e929721f651ac7ba84c034810dc923d90bf9a540ac335dd6c25db7d4567ea30b3c039f61abd9115a84
@@ -17,37 +17,71 @@ module Foam
17
17
  end
18
18
 
19
19
  def configure_traces(config)
20
- OpenTelemetry::SDK.configure do |c|
21
- c.service_name = config.service_name
22
-
23
- c.add_span_processor(
24
- OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
25
- OpenTelemetry::Exporter::OTLP::Exporter.new(
26
- endpoint: config.traces_endpoint,
27
- headers: config.otel_headers
28
- )
29
- )
20
+ @foam_span_processor = OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
21
+ OpenTelemetry::Exporter::OTLP::Exporter.new(
22
+ endpoint: config.traces_endpoint,
23
+ headers: config.otel_headers
30
24
  )
25
+ )
31
26
 
32
- c.use_all
27
+ existing = OpenTelemetry.tracer_provider
28
+ if existing.is_a?(OpenTelemetry::SDK::Trace::TracerProvider)
29
+ existing.add_span_processor(@foam_span_processor)
30
+ else
31
+ OpenTelemetry::SDK.configure do |c|
32
+ c.service_name = config.service_name
33
+ c.add_span_processor(@foam_span_processor)
34
+ c.use_all
35
+ end
33
36
  end
37
+
38
+ @attached_provider = OpenTelemetry.tracer_provider
39
+ end
40
+
41
+ def ensure_processor_attached!
42
+ return unless @foam_span_processor
43
+
44
+ current = OpenTelemetry.tracer_provider
45
+ return if current.equal?(@attached_provider)
46
+ return unless current.is_a?(OpenTelemetry::SDK::Trace::TracerProvider)
47
+
48
+ current.add_span_processor(@foam_span_processor)
49
+ @attached_provider = current
34
50
  end
35
51
 
36
52
  def configure_logs(config)
37
- resource = OpenTelemetry::SDK::Resources::Resource.create(
38
- "service.name" => config.service_name,
39
- "deployment.environment" => ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "production"
53
+ @foam_log_processor = OpenTelemetry::SDK::Logs::Export::BatchLogRecordProcessor.new(
54
+ OpenTelemetry::Exporter::OTLP::Logs::LogsExporter.new(
55
+ endpoint: config.logs_endpoint,
56
+ headers: config.otel_headers
57
+ )
40
58
  )
41
59
 
42
- exporter = OpenTelemetry::Exporter::OTLP::Logs::LogsExporter.new(
43
- endpoint: config.logs_endpoint,
44
- headers: config.otel_headers
45
- )
60
+ existing = OpenTelemetry.logger_provider
61
+ if existing.is_a?(OpenTelemetry::SDK::Logs::LoggerProvider)
62
+ existing.add_log_record_processor(@foam_log_processor)
63
+ else
64
+ resource = OpenTelemetry::SDK::Resources::Resource.create(
65
+ "service.name" => config.service_name,
66
+ "deployment.environment" => ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "production"
67
+ )
68
+ provider = OpenTelemetry::SDK::Logs::LoggerProvider.new(resource: resource)
69
+ provider.add_log_record_processor(@foam_log_processor)
70
+ OpenTelemetry.logger_provider = provider
71
+ end
72
+
73
+ @attached_logger_provider = OpenTelemetry.logger_provider
74
+ end
75
+
76
+ def ensure_log_processor_attached!
77
+ return unless @foam_log_processor
78
+
79
+ current = OpenTelemetry.logger_provider
80
+ return if current.equal?(@attached_logger_provider)
81
+ return unless current.is_a?(OpenTelemetry::SDK::Logs::LoggerProvider)
46
82
 
47
- processor = OpenTelemetry::SDK::Logs::Export::BatchLogRecordProcessor.new(exporter)
48
- logger_provider = OpenTelemetry::SDK::Logs::LoggerProvider.new(resource: resource)
49
- logger_provider.add_log_record_processor(processor)
50
- OpenTelemetry.logger_provider = logger_provider
83
+ current.add_log_record_processor(@foam_log_processor)
84
+ @attached_logger_provider = current
51
85
  end
52
86
  end
53
87
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Foam
4
4
  module Ruby
5
- VERSION = "0.1.0.alpha7"
5
+ VERSION = "0.1.0.alpha8"
6
6
  end
7
7
  end
data/lib/foam/ruby.rb CHANGED
@@ -26,6 +26,7 @@ module Foam
26
26
  require_relative "ruby/log_subscriber"
27
27
 
28
28
  OtelSetup.configure!(config)
29
+ schedule_trace_reattach!
29
30
  schedule_logger_attach!
30
31
  bridge_sentry!
31
32
  @initialized = true
@@ -100,6 +101,17 @@ module Foam
100
101
  nil
101
102
  end
102
103
 
104
+ def schedule_trace_reattach!
105
+ return unless defined?(::Rails) && ::Rails.respond_to?(:application) && ::Rails.application
106
+
107
+ ::Rails.application.config.after_initialize do
108
+ OtelSetup.ensure_processor_attached!
109
+ OtelSetup.ensure_log_processor_attached!
110
+ end
111
+ rescue Exception # rubocop:disable Lint/RescueException
112
+ nil
113
+ end
114
+
103
115
  def do_attach_otel_logger!
104
116
  return unless ::Rails.respond_to?(:logger) && ::Rails.logger
105
117
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foam-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.alpha7
4
+ version: 0.1.0.alpha8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Foam
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-04-14 00:00:00.000000000 Z
11
+ date: 2026-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentelemetry-api