legionio 1.4.45 → 1.4.47
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/CHANGELOG.md +16 -0
- data/lib/legion/extensions/builders/actors.rb +4 -0
- data/lib/legion/extensions/core.rb +9 -3
- data/lib/legion/extensions.rb +4 -3
- data/lib/legion/telemetry.rb +57 -0
- data/lib/legion/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 61d1b58d973cadaa88f3236a2d191452324ce20721fb6a41bf9b08488e077754
|
|
4
|
+
data.tar.gz: '09129066576304957d34a58a8c54731e8228b3d5a45603592ee9b9ce10f72c55'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4e9bfacc58941fb83fe9725779d8a500b514e483dfd84dc759a7184e548b43379252c638007ced10de99164ee749cc9dd7a33134e31e4c0bd8605e6307648d8f
|
|
7
|
+
data.tar.gz: 989f282c012adb51747e8bbb143e29eabf1c213fd0ad7b531737f98cb948791a6e163c13fa5c1a73d0a5da20efa4cfabad237d90e0e3adbaa21d05c2a8cbc5dc
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Legion Changelog
|
|
2
2
|
|
|
3
|
+
## [1.4.47] - 2026-03-17
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- `gem_load` rescue block referenced undefined `gem_path` variable, causing secondary NameError that masked original LoadError
|
|
7
|
+
- `meta_actors` type guard checked `is_a?(Array)` but called `each_value` (Hash method), so meta actors were never hooked
|
|
8
|
+
- `build_actor_list` crashed entire extension load when actor file didn't define expected constant (now skips gracefully)
|
|
9
|
+
- `build_transport` raised NoMethodError on extensions with custom Transport modules missing `build` (now falls back to auto-generate)
|
|
10
|
+
|
|
11
|
+
## [1.4.46] - 2026-03-17
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
- `Legion::Telemetry.configure_exporter`: OTLP and console span exporters
|
|
15
|
+
- OTLP exporter uses BatchSpanProcessor for production performance
|
|
16
|
+
- Settings: `telemetry.tracing.exporter`, `endpoint`, `headers`, `batch_size`
|
|
17
|
+
- Graceful fallback when opentelemetry-exporter-otlp gem absent
|
|
18
|
+
|
|
3
19
|
## [1.4.45] - 2026-03-17
|
|
4
20
|
|
|
5
21
|
### Added
|
|
@@ -21,6 +21,10 @@ module Legion
|
|
|
21
21
|
actor_files.each do |file|
|
|
22
22
|
actor_name = file.split('/').last.sub('.rb', '')
|
|
23
23
|
actor_class = "#{lex_class}::Actor::#{actor_name.split('_').collect(&:capitalize).join}"
|
|
24
|
+
unless Kernel.const_defined?(actor_class)
|
|
25
|
+
Legion::Logging.warn "Actor constant #{actor_class} not defined, skipping"
|
|
26
|
+
next
|
|
27
|
+
end
|
|
24
28
|
@actors[actor_name.to_sym] = {
|
|
25
29
|
extension: lex_class.to_s.downcase,
|
|
26
30
|
extension_name: extension_name,
|
|
@@ -92,13 +92,19 @@ module Legion
|
|
|
92
92
|
require "#{extension_path}/transport/autobuild"
|
|
93
93
|
extension_class::Transport::AutoBuild.build
|
|
94
94
|
log.warn 'still using transport::autobuild, please upgrade'
|
|
95
|
-
|
|
95
|
+
return
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
if File.exist? "#{extension_path}/transport.rb"
|
|
96
99
|
require "#{extension_path}/transport"
|
|
97
|
-
extension_class::Transport.build
|
|
100
|
+
unless extension_class::Transport.respond_to?(:build)
|
|
101
|
+
log.warn "#{extension_class}::Transport does not respond to build, auto-generating"
|
|
102
|
+
auto_generate_transport
|
|
103
|
+
end
|
|
98
104
|
else
|
|
99
105
|
auto_generate_transport
|
|
100
|
-
extension_class::Transport.build
|
|
101
106
|
end
|
|
107
|
+
extension_class::Transport.build
|
|
102
108
|
end
|
|
103
109
|
|
|
104
110
|
def build_settings
|
data/lib/legion/extensions.rb
CHANGED
|
@@ -108,7 +108,7 @@ module Legion
|
|
|
108
108
|
require 'legion/transport/messages/lex_register'
|
|
109
109
|
Legion::Transport::Messages::LexRegister.new(function: 'save', opts: extension.runners).publish
|
|
110
110
|
|
|
111
|
-
if extension.respond_to?(:meta_actors) && extension.meta_actors.is_a?(
|
|
111
|
+
if extension.respond_to?(:meta_actors) && extension.meta_actors.is_a?(Hash)
|
|
112
112
|
extension.meta_actors.each_value do |actor|
|
|
113
113
|
extension.log.debug("hooking meta actor: #{actor}") if has_logger
|
|
114
114
|
hook_actor(**actor)
|
|
@@ -199,12 +199,13 @@ module Legion
|
|
|
199
199
|
end
|
|
200
200
|
|
|
201
201
|
def gem_load(gem_name, name)
|
|
202
|
-
|
|
202
|
+
gem_dir = Gem::Specification.find_by_name(gem_name).gem_dir
|
|
203
|
+
require "#{gem_dir}/lib/legion/extensions/#{name}"
|
|
203
204
|
true
|
|
204
205
|
rescue LoadError => e
|
|
205
206
|
Legion::Logging.error e.message
|
|
206
207
|
Legion::Logging.error e.backtrace
|
|
207
|
-
Legion::Logging.error "gem_path: #{
|
|
208
|
+
Legion::Logging.error "gem_path: #{gem_dir}" if defined?(gem_dir) && gem_dir
|
|
208
209
|
false
|
|
209
210
|
end
|
|
210
211
|
|
data/lib/legion/telemetry.rb
CHANGED
|
@@ -56,10 +56,67 @@ module Legion
|
|
|
56
56
|
{}
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
+
def configure_exporter
|
|
60
|
+
backend = tracing_settings[:exporter]&.to_sym || :none
|
|
61
|
+
|
|
62
|
+
case backend
|
|
63
|
+
when :otlp
|
|
64
|
+
configure_otlp
|
|
65
|
+
when :console
|
|
66
|
+
configure_console
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def tracing_settings
|
|
71
|
+
telemetry = Legion::Settings[:telemetry]
|
|
72
|
+
return {} unless telemetry.is_a?(Hash)
|
|
73
|
+
|
|
74
|
+
tracing = telemetry[:tracing]
|
|
75
|
+
tracing.is_a?(Hash) ? tracing : {}
|
|
76
|
+
rescue StandardError
|
|
77
|
+
{}
|
|
78
|
+
end
|
|
79
|
+
|
|
59
80
|
def otel_init_error?(error)
|
|
60
81
|
error.message.include?('OpenTelemetry') || error.message.include?('tracer')
|
|
61
82
|
rescue StandardError
|
|
62
83
|
false
|
|
63
84
|
end
|
|
85
|
+
|
|
86
|
+
def configure_otlp
|
|
87
|
+
require 'opentelemetry-exporter-otlp'
|
|
88
|
+
|
|
89
|
+
endpoint = tracing_settings[:endpoint] || 'http://localhost:4318/v1/traces'
|
|
90
|
+
headers = tracing_settings[:headers] || {}
|
|
91
|
+
|
|
92
|
+
exporter = OpenTelemetry::Exporter::OTLP::Exporter.new(
|
|
93
|
+
endpoint: endpoint,
|
|
94
|
+
headers: headers
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
processor = OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
|
|
98
|
+
exporter,
|
|
99
|
+
max_queue_size: 2048,
|
|
100
|
+
max_export_batch_size: tracing_settings[:batch_size] || 512
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
OpenTelemetry.tracer_provider.add_span_processor(processor)
|
|
104
|
+
Legion::Logging.info "OTLP exporter configured: #{endpoint}"
|
|
105
|
+
true
|
|
106
|
+
rescue LoadError
|
|
107
|
+
Legion::Logging.warn 'opentelemetry-exporter-otlp gem not available'
|
|
108
|
+
false
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def configure_console
|
|
112
|
+
return false unless defined?(OpenTelemetry::SDK::Trace::Export::ConsoleSpanExporter)
|
|
113
|
+
|
|
114
|
+
exporter = OpenTelemetry::SDK::Trace::Export::ConsoleSpanExporter.new
|
|
115
|
+
processor = OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(exporter)
|
|
116
|
+
OpenTelemetry.tracer_provider.add_span_processor(processor)
|
|
117
|
+
true
|
|
118
|
+
rescue StandardError
|
|
119
|
+
false
|
|
120
|
+
end
|
|
64
121
|
end
|
|
65
122
|
end
|
data/lib/legion/version.rb
CHANGED