legionio 1.7.8 → 1.7.13
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/.rubocop.yml +3 -1
- data/CHANGELOG.md +25 -0
- data/legionio.gemspec +8 -8
- data/lib/legion/api/audit.rb +1 -1
- data/lib/legion/api/events.rb +38 -15
- data/lib/legion/api/helpers.rb +29 -7
- data/lib/legion/api/library_routes.rb +3 -0
- data/lib/legion/api/tenants.rb +5 -6
- data/lib/legion/api/workers.rb +1 -14
- data/lib/legion/api.rb +21 -2
- data/lib/legion/cli/chat/chat_logger.rb +19 -12
- data/lib/legion/cli/config_command.rb +1 -1
- data/lib/legion/cli/error_handler.rb +8 -2
- data/lib/legion/cli/start.rb +3 -2
- data/lib/legion/cli.rb +13 -2
- data/lib/legion/extensions/catalog.rb +77 -11
- data/lib/legion/extensions/core.rb +23 -6
- data/lib/legion/extensions/helpers/secret.rb +2 -0
- data/lib/legion/extensions/transport.rb +15 -2
- data/lib/legion/region.rb +36 -1
- data/lib/legion/service.rb +174 -127
- data/lib/legion/task_outcome_observer.rb +32 -8
- data/lib/legion/telemetry.rb +19 -11
- data/lib/legion/version.rb +1 -1
- data/lib/legion/webhooks.rb +169 -40
- metadata +17 -17
|
@@ -48,7 +48,7 @@ module Legion
|
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
-
def auto_create_exchange(exchange, default_exchange
|
|
51
|
+
def auto_create_exchange(exchange, default_exchange: false)
|
|
52
52
|
if Object.const_defined? exchange
|
|
53
53
|
log.warn "#{exchange} is already defined"
|
|
54
54
|
return
|
|
@@ -107,7 +107,7 @@ module Legion
|
|
|
107
107
|
end
|
|
108
108
|
|
|
109
109
|
def auto_generate_runner_messages(runner_info, messages_mod, ext_amqp)
|
|
110
|
-
runner_name
|
|
110
|
+
runner_name = runner_info[:runner_name]
|
|
111
111
|
runner_module = runner_info[:runner_module]
|
|
112
112
|
return if runner_module.nil?
|
|
113
113
|
return unless runner_module.respond_to?(:definition_for)
|
|
@@ -137,10 +137,17 @@ module Legion
|
|
|
137
137
|
binding[:to] = nil unless binding.key?(:to)
|
|
138
138
|
binding[:from] = default_exchange if !binding.key?(:from) || binding[:from].nil?
|
|
139
139
|
bind_e_to_q(**binding)
|
|
140
|
+
rescue StandardError => e
|
|
141
|
+
log.warn '[transport] failed to build exchange-to-queue binding ' \
|
|
142
|
+
"from=#{binding[:from].inspect} to=#{binding[:to].inspect} " \
|
|
143
|
+
"routing_key=#{binding[:routing_key].inspect} binding=#{binding.inspect}"
|
|
144
|
+
handle_exception(e, handled: false, level: :warn)
|
|
145
|
+
raise e
|
|
140
146
|
end
|
|
141
147
|
end
|
|
142
148
|
|
|
143
149
|
def bind_e_to_q(to:, from: default_exchange, routing_key: nil, **)
|
|
150
|
+
log.debug "[transport] building auto binding exchange: #{from}, routing_key: #{routing_key}, to: #{to}"
|
|
144
151
|
if from.is_a? String
|
|
145
152
|
from = "#{transport_class}::Exchanges::#{from.tr('.', '_').split('_').collect(&:capitalize).join}" unless from.include?('::')
|
|
146
153
|
auto_create_exchange(from) unless Object.const_defined? from
|
|
@@ -153,6 +160,9 @@ module Legion
|
|
|
153
160
|
|
|
154
161
|
routing_key = to.to_s.split('::').last.downcase if routing_key.nil?
|
|
155
162
|
bind(from, to, routing_key: routing_key)
|
|
163
|
+
rescue StandardError => e
|
|
164
|
+
handle_exception(e, handled: false, level: :warn, from: from, to: to, routing_key: routing_key)
|
|
165
|
+
raise e
|
|
156
166
|
end
|
|
157
167
|
|
|
158
168
|
def build_e_to_e
|
|
@@ -168,6 +178,9 @@ module Legion
|
|
|
168
178
|
end
|
|
169
179
|
|
|
170
180
|
bind(binding[:from], binding[:to], binding)
|
|
181
|
+
rescue StandardError => e
|
|
182
|
+
handle_exception(e, handled: false, level: :warn)
|
|
183
|
+
raise e
|
|
171
184
|
end
|
|
172
185
|
end
|
|
173
186
|
|
data/lib/legion/region.rb
CHANGED
|
@@ -4,16 +4,42 @@ require 'net/http'
|
|
|
4
4
|
|
|
5
5
|
module Legion
|
|
6
6
|
module Region
|
|
7
|
+
include Legion::Logging::Helper if defined?(Legion::Logging::Helper)
|
|
8
|
+
|
|
7
9
|
module_function
|
|
8
10
|
|
|
11
|
+
UNSET = Object.new.freeze
|
|
12
|
+
EXPECTED_METADATA_ERRORS = [
|
|
13
|
+
Net::OpenTimeout,
|
|
14
|
+
Net::ReadTimeout,
|
|
15
|
+
Errno::EHOSTUNREACH,
|
|
16
|
+
Errno::ECONNREFUSED,
|
|
17
|
+
Errno::ENETUNREACH,
|
|
18
|
+
IOError,
|
|
19
|
+
SocketError
|
|
20
|
+
].freeze
|
|
21
|
+
|
|
9
22
|
def current
|
|
10
23
|
setting = defined?(Legion::Settings) ? Legion::Settings.dig(:region, :current) : nil
|
|
11
|
-
setting
|
|
24
|
+
return setting unless blank_region?(setting)
|
|
25
|
+
|
|
26
|
+
@detected_region = UNSET unless instance_variable_defined?(:@detected_region)
|
|
27
|
+
return nil if @detected_region.equal?(UNSET) && @metadata_detection_complete == true
|
|
28
|
+
return @detected_region unless @detected_region.equal?(UNSET)
|
|
29
|
+
|
|
30
|
+
@detected_region = detect_from_metadata
|
|
31
|
+
@metadata_detection_complete = true
|
|
32
|
+
@detected_region
|
|
12
33
|
rescue StandardError => e
|
|
13
34
|
Legion::Logging.debug "Region#current failed: #{e.message}" if defined?(Legion::Logging)
|
|
14
35
|
nil
|
|
15
36
|
end
|
|
16
37
|
|
|
38
|
+
def reset!
|
|
39
|
+
remove_instance_variable(:@detected_region) if instance_variable_defined?(:@detected_region)
|
|
40
|
+
remove_instance_variable(:@metadata_detection_complete) if instance_variable_defined?(:@metadata_detection_complete)
|
|
41
|
+
end
|
|
42
|
+
|
|
17
43
|
def local?(target_region)
|
|
18
44
|
target_region.nil? || target_region == current
|
|
19
45
|
end
|
|
@@ -76,6 +102,8 @@ module Legion
|
|
|
76
102
|
response = http.request(req)
|
|
77
103
|
response.is_a?(Net::HTTPSuccess) ? response.body.strip : nil
|
|
78
104
|
end
|
|
105
|
+
rescue *EXPECTED_METADATA_ERRORS
|
|
106
|
+
nil
|
|
79
107
|
rescue StandardError => e
|
|
80
108
|
Legion::Logging.debug "Region#detect_aws_region failed: #{e.message}" if defined?(Legion::Logging)
|
|
81
109
|
nil
|
|
@@ -90,9 +118,16 @@ module Legion
|
|
|
90
118
|
response = http.request(req)
|
|
91
119
|
response.is_a?(Net::HTTPSuccess) ? response.body.strip : nil
|
|
92
120
|
end
|
|
121
|
+
rescue *EXPECTED_METADATA_ERRORS
|
|
122
|
+
nil
|
|
93
123
|
rescue StandardError => e
|
|
94
124
|
Legion::Logging.debug "Region#detect_azure_region failed: #{e.message}" if defined?(Legion::Logging)
|
|
95
125
|
nil
|
|
96
126
|
end
|
|
127
|
+
|
|
128
|
+
def blank_region?(value)
|
|
129
|
+
value.nil? || (value.respond_to?(:empty?) && value.empty?)
|
|
130
|
+
end
|
|
131
|
+
private_class_method :blank_region?
|
|
97
132
|
end
|
|
98
133
|
end
|