foam-ruby 0.1.0.alpha6 → 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 +4 -4
- data/README.md +12 -0
- data/lib/foam/ruby/log_subscriber.rb +0 -3
- data/lib/foam/ruby/otel_setup.rb +56 -21
- data/lib/foam/ruby/version.rb +1 -1
- data/lib/foam/ruby.rb +12 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a4435b32248c007790701a7de2054f702398a2f1881bcaa571f20f209825d5e8
|
|
4
|
+
data.tar.gz: 82a9836aa895f5b1b70ace7b441dd288997ff7e2772a5c1e5f7742a2fa22dcc6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8e3792c185a39b7470ddf0b0037580fcf45ed9f906d4834ea28bd837422df5fbb365109f9525fae66e7cb68121844ad119f38228d83bcfb0946965fbf6b005d2
|
|
7
|
+
data.tar.gz: 4fab2024d4ef4e8fe3601e3836e8af28544feaefd41d80e929721f651ac7ba84c034810dc923d90bf9a540ac335dd6c25db7d4567ea30b3c039f61abd9115a84
|
data/README.md
CHANGED
|
@@ -87,6 +87,18 @@ The gem only initializes in production (`RAILS_ENV=production` or `RACK_ENV=prod
|
|
|
87
87
|
- **Rails 7.0 and below**: Falls back to `ActiveSupport::Logger.broadcast`
|
|
88
88
|
- **Ruby**: >= 3.0
|
|
89
89
|
|
|
90
|
+
## Acknowledgements
|
|
91
|
+
|
|
92
|
+
This package is built on top of the following open source projects:
|
|
93
|
+
|
|
94
|
+
| Project | License | Link |
|
|
95
|
+
|---------|---------|------|
|
|
96
|
+
| [OpenTelemetry Ruby SDK](https://github.com/open-telemetry/opentelemetry-ruby) (`opentelemetry-sdk`) | Apache-2.0 | https://github.com/open-telemetry/opentelemetry-ruby |
|
|
97
|
+
| [OpenTelemetry Ruby Logs SDK](https://github.com/open-telemetry/opentelemetry-ruby) (`opentelemetry-logs-sdk`) | Apache-2.0 | https://github.com/open-telemetry/opentelemetry-ruby |
|
|
98
|
+
| [OpenTelemetry OTLP Exporter](https://github.com/open-telemetry/opentelemetry-ruby) (`opentelemetry-exporter-otlp`) | Apache-2.0 | https://github.com/open-telemetry/opentelemetry-ruby |
|
|
99
|
+
| [OpenTelemetry OTLP Logs Exporter](https://github.com/open-telemetry/opentelemetry-ruby) (`opentelemetry-exporter-otlp-logs`) | Apache-2.0 | https://github.com/open-telemetry/opentelemetry-ruby |
|
|
100
|
+
| [OpenTelemetry Rails Instrumentation](https://github.com/open-telemetry/opentelemetry-ruby-contrib) (`opentelemetry-instrumentation-rails`) | Apache-2.0 | https://github.com/open-telemetry/opentelemetry-ruby-contrib |
|
|
101
|
+
|
|
90
102
|
## License
|
|
91
103
|
|
|
92
104
|
MIT
|
|
@@ -30,13 +30,10 @@ module Foam
|
|
|
30
30
|
def emit(severity, message)
|
|
31
31
|
return if message.nil? || (message.respond_to?(:empty?) && message.empty?)
|
|
32
32
|
|
|
33
|
-
span_context = OpenTelemetry::Trace.current_span.context
|
|
34
|
-
|
|
35
33
|
@otel_logger.on_emit(
|
|
36
34
|
body: message.to_s,
|
|
37
35
|
severity_number: SEVERITY_MAP.fetch(severity, OpenTelemetry::Logs::SeverityNumber::SEVERITY_NUMBER_INFO),
|
|
38
36
|
severity_text: SEVERITY_TEXT.fetch(severity, "INFO"),
|
|
39
|
-
span_context: span_context.valid? ? span_context : nil,
|
|
40
37
|
timestamp: Time.now
|
|
41
38
|
)
|
|
42
39
|
rescue StandardError => e
|
data/lib/foam/ruby/otel_setup.rb
CHANGED
|
@@ -17,36 +17,71 @@ module Foam
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def configure_traces(config)
|
|
20
|
-
OpenTelemetry::SDK.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
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
|
-
|
|
38
|
-
|
|
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
|
+
)
|
|
39
58
|
)
|
|
40
59
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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)
|
|
45
82
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
logger_provider.add_log_record_processor(processor)
|
|
49
|
-
OpenTelemetry.logger_provider = logger_provider
|
|
83
|
+
current.add_log_record_processor(@foam_log_processor)
|
|
84
|
+
@attached_logger_provider = current
|
|
50
85
|
end
|
|
51
86
|
end
|
|
52
87
|
end
|
data/lib/foam/ruby/version.rb
CHANGED
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.
|
|
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-
|
|
11
|
+
date: 2026-04-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: opentelemetry-api
|