foam-ruby 0.1.0.alpha8 → 0.1.0.alpha9
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 +4 -4
- data/lib/foam/ruby/log_subscriber.rb +3 -2
- data/lib/foam/ruby/middleware.rb +16 -0
- data/lib/foam/ruby/version.rb +1 -1
- data/lib/foam/ruby.rb +38 -24
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 87d1563f7f755555866b2b250981864ab47631e4bd751bbc9b9c74cc039bcf3f
|
|
4
|
+
data.tar.gz: 12f4674411cdc386042fca764ec96b7e38c4c19a7632a913b8b940bc0cfa8df5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ae75e5573553e9e9dc3df56dfd474a80ea1aebdabf47868524ceed505d7cdfbdc7d8b20721dcf85c8d97a4711d802d7fe3a2678b2ca47651f39d37585426db21
|
|
7
|
+
data.tar.gz: c6f2ac7466bd9d53c2d434d43f0f8378a396ed859a1dae5af523d18ce7564a3242c87eea117bd07179b2f181b415204ba57997288b8b393d75223b1fd6b72baa
|
|
@@ -24,13 +24,14 @@ module Foam
|
|
|
24
24
|
}.freeze
|
|
25
25
|
|
|
26
26
|
def initialize
|
|
27
|
-
@
|
|
27
|
+
@logger_name = "foam-ruby"
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def emit(severity, message)
|
|
31
31
|
return if message.nil? || (message.respond_to?(:empty?) && message.empty?)
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
otel_logger = OpenTelemetry.logger_provider.logger(name: @logger_name)
|
|
34
|
+
otel_logger.on_emit(
|
|
34
35
|
body: message.to_s,
|
|
35
36
|
severity_number: SEVERITY_MAP.fetch(severity, OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_INFO),
|
|
36
37
|
severity_text: SEVERITY_TEXT.fetch(severity, "INFO"),
|
data/lib/foam/ruby/version.rb
CHANGED
data/lib/foam/ruby.rb
CHANGED
|
@@ -11,6 +11,7 @@ module Foam
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def init(token: nil, service_name: nil)
|
|
14
|
+
return if initialized?
|
|
14
15
|
return unless production?
|
|
15
16
|
|
|
16
17
|
config = configuration
|
|
@@ -24,10 +25,10 @@ module Foam
|
|
|
24
25
|
|
|
25
26
|
require_relative "ruby/otel_setup"
|
|
26
27
|
require_relative "ruby/log_subscriber"
|
|
28
|
+
require_relative "ruby/middleware"
|
|
27
29
|
|
|
28
30
|
OtelSetup.configure!(config)
|
|
29
|
-
|
|
30
|
-
schedule_logger_attach!
|
|
31
|
+
insert_middleware!
|
|
31
32
|
bridge_sentry!
|
|
32
33
|
@initialized = true
|
|
33
34
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
|
@@ -35,6 +36,24 @@ module Foam
|
|
|
35
36
|
@initialized = false
|
|
36
37
|
end
|
|
37
38
|
|
|
39
|
+
# Ensures Foam's processors and logger broadcast are attached in the
|
|
40
|
+
# current process. Called by Middleware on the first request per worker
|
|
41
|
+
# PID — a single integer comparison on every subsequent request.
|
|
42
|
+
# Public so non-Rails apps can call it from custom fork hooks.
|
|
43
|
+
def ensure_worker_setup!
|
|
44
|
+
return unless initialized?
|
|
45
|
+
|
|
46
|
+
pid = Process.pid
|
|
47
|
+
return if @worker_pid == pid
|
|
48
|
+
@worker_pid = pid
|
|
49
|
+
|
|
50
|
+
OtelSetup.ensure_processor_attached!
|
|
51
|
+
OtelSetup.ensure_log_processor_attached!
|
|
52
|
+
attach_otel_logger!
|
|
53
|
+
rescue Exception # rubocop:disable Lint/RescueException
|
|
54
|
+
nil
|
|
55
|
+
end
|
|
56
|
+
|
|
38
57
|
def capture_exception(error, attributes: {})
|
|
39
58
|
return unless initialized?
|
|
40
59
|
|
|
@@ -72,14 +91,10 @@ module Foam
|
|
|
72
91
|
false
|
|
73
92
|
end
|
|
74
93
|
|
|
75
|
-
def
|
|
76
|
-
return unless defined?(::Rails)
|
|
94
|
+
def insert_middleware!
|
|
95
|
+
return unless defined?(::Rails) && ::Rails.respond_to?(:application) && ::Rails.application
|
|
77
96
|
|
|
78
|
-
|
|
79
|
-
::Rails.application.config.after_initialize { do_attach_otel_logger! }
|
|
80
|
-
else
|
|
81
|
-
do_attach_otel_logger!
|
|
82
|
-
end
|
|
97
|
+
::Rails.application.middleware.insert(0, Foam::Ruby::Middleware)
|
|
83
98
|
rescue Exception # rubocop:disable Lint/RescueException
|
|
84
99
|
nil
|
|
85
100
|
end
|
|
@@ -101,31 +116,30 @@ module Foam
|
|
|
101
116
|
nil
|
|
102
117
|
end
|
|
103
118
|
|
|
104
|
-
def
|
|
105
|
-
return unless defined?(::Rails) && ::Rails.respond_to?(:
|
|
119
|
+
def attach_otel_logger!
|
|
120
|
+
return unless defined?(::Rails) && ::Rails.respond_to?(:logger) && ::Rails.logger
|
|
106
121
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
OtelSetup.ensure_log_processor_attached!
|
|
122
|
+
unless OpenTelemetry.logger_provider.is_a?(OpenTelemetry::SDK::Logs::LoggerProvider)
|
|
123
|
+
return
|
|
110
124
|
end
|
|
111
|
-
rescue Exception # rubocop:disable Lint/RescueException
|
|
112
|
-
nil
|
|
113
|
-
end
|
|
114
125
|
|
|
115
|
-
|
|
116
|
-
return unless ::Rails.respond_to?(:logger) && ::Rails.logger
|
|
126
|
+
logger = ::Rails.logger
|
|
117
127
|
|
|
118
|
-
|
|
119
|
-
return
|
|
128
|
+
if logger.respond_to?(:broadcasts)
|
|
129
|
+
return if logger.broadcasts.any? { |l| l.is_a?(OtelLogger) }
|
|
130
|
+
else
|
|
131
|
+
return if logger.equal?(@attached_rails_logger)
|
|
120
132
|
end
|
|
121
133
|
|
|
122
134
|
otel_logger = OtelLogger.new
|
|
123
135
|
|
|
124
|
-
if
|
|
125
|
-
|
|
136
|
+
if logger.respond_to?(:broadcast_to)
|
|
137
|
+
logger.broadcast_to(otel_logger)
|
|
126
138
|
elsif defined?(::ActiveSupport::Logger) && ::ActiveSupport::Logger.respond_to?(:broadcast)
|
|
127
|
-
|
|
139
|
+
logger.extend(::ActiveSupport::Logger.broadcast(otel_logger))
|
|
128
140
|
end
|
|
141
|
+
|
|
142
|
+
@attached_rails_logger = logger
|
|
129
143
|
rescue Exception # rubocop:disable Lint/RescueException
|
|
130
144
|
nil
|
|
131
145
|
end
|
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.
|
|
4
|
+
version: 0.1.0.alpha9
|
|
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-
|
|
11
|
+
date: 2026-04-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: opentelemetry-api
|
|
@@ -218,6 +218,7 @@ files:
|
|
|
218
218
|
- lib/foam/ruby.rb
|
|
219
219
|
- lib/foam/ruby/configuration.rb
|
|
220
220
|
- lib/foam/ruby/log_subscriber.rb
|
|
221
|
+
- lib/foam/ruby/middleware.rb
|
|
221
222
|
- lib/foam/ruby/otel_setup.rb
|
|
222
223
|
- lib/foam/ruby/version.rb
|
|
223
224
|
homepage: https://github.com/nicktesh/packages
|