foam-ruby 0.1.0.alpha12 → 0.1.0.alpha13

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: e0cd5d2699e7c0780b212b06e4e272f4e3510253e64df195ebbee3868bc32257
4
- data.tar.gz: 8a1625c3cd8c95898dc6f62cadc80af2a140e9b69671f542a2f2e1ed767b2aa6
3
+ metadata.gz: d499bfb9b269432b8a581f296cc917118d8da08c18ec8bcd0804d099b93a4e46
4
+ data.tar.gz: 30ed5cf79368e4b044562f9eb8e5385e72af60bf6f91a53826f47aebe01816d4
5
5
  SHA512:
6
- metadata.gz: c2b2862bed64c2bf2d9b6776c5969ae9f4424564c37d8094f8515eb3696d4be22397a5c56cc56841a28fdefc97529dcc3fa311dfb348d932370b22bf3a36d869
7
- data.tar.gz: eefce9a6236a601b986a50ccc6fc4a6b4bd9c79ffb2ea042078c472c8c1f99cf786b1ea21ab10bf970f90d93e05af0c4c8ac65ab104e5011c5f88c6546d5b5fc
6
+ metadata.gz: 01ad0c424faf4ab05e52ecff9ddb5f5695ed0ed18006f6b53a58af7950f2aedc5f66f92c9af2bfa632a7ea7512a5d4864a8210dc627cabe02277921f6d20d2ee
7
+ data.tar.gz: 53732245e699e9198dbaf25c43426e0a9811dc3901b45a93dcdadbeb15b12195c95cb2f35d4d81676481f55844c2858ccb0eef8ae9331037801f65bf418f879e
@@ -19,21 +19,47 @@ module Foam
19
19
 
20
20
  module_function
21
21
 
22
+ # -- public API (called from Foam::Ruby + Middleware) --
23
+
22
24
  def configure!(config)
25
+ require_instrumentations!
23
26
  configure_traces(config)
24
27
  configure_logs(config)
25
28
  end
26
29
 
30
+ def ensure_processor_attached!
31
+ return unless @foam_span_processor
32
+
33
+ current = OpenTelemetry.tracer_provider
34
+ return if current.equal?(@attached_provider)
35
+ return unless current.is_a?(OpenTelemetry::SDK::Trace::TracerProvider)
36
+
37
+ current.add_span_processor(@foam_span_processor)
38
+ @attached_provider = current
39
+ end
40
+
41
+ def ensure_log_processor_attached!
42
+ return unless @foam_log_processor
43
+
44
+ current = OpenTelemetry.logger_provider
45
+ return if current.equal?(@attached_logger_provider)
46
+ return unless current.is_a?(OpenTelemetry::SDK::Logs::LoggerProvider)
47
+
48
+ current.add_log_record_processor(@foam_log_processor)
49
+ @attached_logger_provider = current
50
+ end
51
+
52
+ # -- internal --
53
+
27
54
  def require_instrumentations!
28
- INSTRUMENTATIONS.each do |gem_name|
29
- require gem_name
55
+ INSTRUMENTATIONS.each do |name|
56
+ require name
30
57
  rescue LoadError
31
58
  nil
32
59
  end
33
60
  end
34
61
 
35
62
  def configure_traces(config)
36
- require_instrumentations!
37
63
  @foam_span_processor = OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
38
64
  OpenTelemetry::Exporter::OTLP::Exporter.new(
39
65
  endpoint: config.traces_endpoint,
@@ -41,9 +67,9 @@ module Foam
41
67
  )
42
68
  )
43
69
 
44
- existing = OpenTelemetry.tracer_provider
45
- if existing.is_a?(OpenTelemetry::SDK::Trace::TracerProvider)
46
- existing.add_span_processor(@foam_span_processor)
70
+ provider = OpenTelemetry.tracer_provider
71
+ if provider.is_a?(OpenTelemetry::SDK::Trace::TracerProvider)
72
+ provider.add_span_processor(@foam_span_processor)
47
73
  install_instrumentations!
48
74
  else
49
75
  OpenTelemetry::SDK.configure do |c|
@@ -56,26 +82,6 @@ module Foam
56
82
  @attached_provider = OpenTelemetry.tracer_provider
57
83
  end
58
84
 
59
- def install_instrumentations!
60
- registry = OpenTelemetry::Instrumentation.registry
61
- return unless registry
62
-
63
- registry.each do |instrumentation|
64
- instrumentation.install unless instrumentation.installed?
65
- end
66
- end
67
-
68
- def ensure_processor_attached!
69
- return unless @foam_span_processor
70
-
71
- current = OpenTelemetry.tracer_provider
72
- return if current.equal?(@attached_provider)
73
- return unless current.is_a?(OpenTelemetry::SDK::Trace::TracerProvider)
74
-
75
- current.add_span_processor(@foam_span_processor)
76
- @attached_provider = current
77
- end
78
-
79
85
  def configure_logs(config)
80
86
  @foam_log_processor = OpenTelemetry::SDK::Logs::Export::BatchLogRecordProcessor.new(
81
87
  OpenTelemetry::Exporter::OTLP::Logs::LogsExporter.new(
@@ -84,9 +90,9 @@ module Foam
84
90
  )
85
91
  )
86
92
 
87
- existing = OpenTelemetry.logger_provider
88
- if existing.is_a?(OpenTelemetry::SDK::Logs::LoggerProvider)
89
- existing.add_log_record_processor(@foam_log_processor)
93
+ provider = OpenTelemetry.logger_provider
94
+ if provider.is_a?(OpenTelemetry::SDK::Logs::LoggerProvider)
95
+ provider.add_log_record_processor(@foam_log_processor)
90
96
  else
91
97
  resource = OpenTelemetry::SDK::Resources::Resource.create(
92
98
  "service.name" => config.service_name,
@@ -100,15 +106,10 @@ module Foam
100
106
  @attached_logger_provider = OpenTelemetry.logger_provider
101
107
  end
102
108
 
103
- def ensure_log_processor_attached!
104
- return unless @foam_log_processor
105
-
106
- current = OpenTelemetry.logger_provider
107
- return if current.equal?(@attached_logger_provider)
108
- return unless current.is_a?(OpenTelemetry::SDK::Logs::LoggerProvider)
109
-
110
- current.add_log_record_processor(@foam_log_processor)
111
- @attached_logger_provider = current
109
+ def install_instrumentations!
110
+ OpenTelemetry::Instrumentation.registry&.each do |instrumentation|
111
+ instrumentation.install unless instrumentation.installed?
112
+ end
112
113
  end
113
114
  end
114
115
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Foam
4
4
  module Ruby
5
- VERSION = "0.1.0.alpha12"
5
+ VERSION = "0.1.0.alpha13"
6
6
  end
7
7
  end
data/lib/foam/ruby.rb CHANGED
@@ -19,7 +19,7 @@ module Foam
19
19
  config.service_name = service_name if service_name
20
20
 
21
21
  unless config.valid?
22
- warn "[foam-ruby] Missing required config — set OTEL_FOAM_COLLECTOR_BEARER_TOKEN and OTEL_SERVICE_NAME, " \
22
+ warn "[foam-ruby] Missing required config — set FOAM_API_TOKEN and OTEL_SERVICE_NAME, " \
23
23
  "or pass token: and service_name: to Foam::Ruby.init"
24
24
  return
25
25
  end
@@ -29,18 +29,15 @@ module Foam
29
29
  require_relative "ruby/middleware"
30
30
 
31
31
  OtelSetup.configure!(config)
32
- insert_middleware!
33
- schedule_logger_attach!
34
- bridge_sentry!
32
+ setup_rails! if rails_app?
35
33
  @initialized = true
36
34
  rescue Exception => e # rubocop:disable Lint/RescueException
37
35
  warn "[foam-ruby] init failed: #{e.message}"
38
36
  @initialized = false
39
37
  end
40
38
 
41
- # Ensures Foam's processors and logger broadcast are attached in the
42
- # current process. Called by Middleware on the first request per worker
43
- # PID — a single integer comparison on every subsequent request.
39
+ # Re-attaches Foam's processors and logger broadcast in the current
40
+ # process. Called by Middleware on first request per worker PID.
44
41
  # Public so non-Rails apps can call it from custom fork hooks.
45
42
  def ensure_worker_setup!
46
43
  return unless initialized?
@@ -93,45 +90,37 @@ module Foam
93
90
  false
94
91
  end
95
92
 
96
- def schedule_logger_attach!
97
- return unless defined?(::Rails) && ::Rails.respond_to?(:application) && ::Rails.application
98
-
99
- ::Rails.application.config.after_initialize { attach_otel_logger! }
100
- rescue Exception # rubocop:disable Lint/RescueException
101
- nil
93
+ def rails_app?
94
+ defined?(::Rails) && ::Rails.respond_to?(:application) && ::Rails.application
102
95
  end
103
96
 
104
- def insert_middleware!
105
- return unless defined?(::Rails) && ::Rails.respond_to?(:application) && ::Rails.application
106
-
97
+ def setup_rails!
107
98
  ::Rails.application.middleware.insert(0, Foam::Ruby::Middleware)
99
+
100
+ ::Rails.application.config.after_initialize do
101
+ attach_otel_logger!
102
+ bridge_sentry!
103
+ end
108
104
  rescue Exception # rubocop:disable Lint/RescueException
109
105
  nil
110
106
  end
111
107
 
112
108
  def bridge_sentry!
113
- return unless defined?(::Rails) && ::Rails.respond_to?(:application) && ::Rails.application
114
-
115
- ::Rails.application.config.after_initialize do
116
- next unless defined?(::Sentry)
117
-
118
- ::Sentry.singleton_class.prepend(Module.new do
119
- def capture_exception(exception, **options, &block)
120
- Foam::Ruby.capture_exception(exception) if exception.is_a?(::Exception)
121
- super
122
- end
123
- end)
124
- end
109
+ return unless defined?(::Sentry)
110
+
111
+ ::Sentry.singleton_class.prepend(Module.new do
112
+ def capture_exception(exception, **options, &block)
113
+ Foam::Ruby.capture_exception(exception) if exception.is_a?(::Exception)
114
+ super
115
+ end
116
+ end)
125
117
  rescue Exception # rubocop:disable Lint/RescueException
126
118
  nil
127
119
  end
128
120
 
129
121
  def attach_otel_logger!
130
122
  return unless defined?(::Rails) && ::Rails.respond_to?(:logger) && ::Rails.logger
131
-
132
- unless OpenTelemetry.logger_provider.is_a?(OpenTelemetry::SDK::Logs::LoggerProvider)
133
- return
134
- end
123
+ return unless OpenTelemetry.logger_provider.is_a?(OpenTelemetry::SDK::Logs::LoggerProvider)
135
124
 
136
125
  logger = ::Rails.logger
137
126
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foam-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.alpha12
4
+ version: 0.1.0.alpha13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Foam