openc3 5.9.1 → 5.10.0
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.
Potentially problematic release.
This version of openc3 might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/openc3/accessors/binary_accessor.rb +5 -2
- data/lib/openc3/api/limits_api.rb +3 -3
- data/lib/openc3/microservices/decom_microservice.rb +5 -1
- data/lib/openc3/models/interface_model.rb +2 -0
- data/lib/openc3/models/microservice_status_model.rb +1 -1
- data/lib/openc3/models/plugin_model.rb +2 -0
- data/lib/openc3/models/target_model.rb +2 -0
- data/lib/openc3/models/tool_model.rb +2 -0
- data/lib/openc3/models/widget_model.rb +2 -0
- data/lib/openc3/packets/structure.rb +2 -2
- data/lib/openc3/packets/structure_item.rb +7 -24
- data/lib/openc3/script/api_shared.rb +45 -48
- data/lib/openc3/script/web_socket_api.rb +2 -2
- data/lib/openc3/system/target.rb +3 -3
- data/lib/openc3/top_level.rb +1 -1
- data/lib/openc3/utilities/authentication.rb +0 -1
- data/lib/openc3/utilities/aws_bucket.rb +4 -0
- data/lib/openc3/utilities/store_autoload.rb +5 -5
- data/lib/openc3/version.rb +6 -6
- data/templates/tool_angular/package.json +2 -2
- data/templates/tool_react/package.json +1 -1
- data/templates/tool_vue/package.json +2 -2
- data/templates/widget/package.json +2 -2
- 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: 9c37c79f2062a5921e13c3370ce281c443b9abba929ca36f152df7cd1bcea92e
|
4
|
+
data.tar.gz: 643d74e05f61eb9016eaefbe5dca61316939e3d4e063fcf4150423cee4d95474
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 25285376d600c16a3d0b6d485a359998fda7226fc3781f639cdde992370291fa7d23b0ce6ca89e02ddcf4e6386dd596839ed4d8c704003b893e37e726ed1a7e4
|
7
|
+
data.tar.gz: 3ae81b7ea67047a8e23cfb161aeb77b4e7224e44b2c9c1dc4fa2dd78cb06eae50710b0a5c882cfcaf8da9e0214b6b96e517ec2a6af0b7671f5b8e8a0dc1448fe
|
@@ -17,7 +17,7 @@
|
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
19
|
#
|
20
|
-
# This file may also be used under the terms of a commercial license
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
21
|
# if purchased from OpenC3, Inc.
|
22
22
|
|
23
23
|
# This file contains the implementation of the BinaryAccessor class.
|
@@ -280,7 +280,10 @@ module OpenC3
|
|
280
280
|
|
281
281
|
if upper_bound > lower_bound
|
282
282
|
# Combine bytes into a FixNum
|
283
|
-
temp_data[1..temp_upper].each_byte
|
283
|
+
temp_data[1..temp_upper].each_byte do |temp_value|
|
284
|
+
temp = temp << 8
|
285
|
+
temp = temp + temp_value
|
286
|
+
end
|
284
287
|
end
|
285
288
|
|
286
289
|
# Shift off unwanted bits at end
|
@@ -172,7 +172,7 @@ module OpenC3
|
|
172
172
|
|
173
173
|
TargetModel.set_packet(target_name, packet_name, packet, scope: scope)
|
174
174
|
|
175
|
-
message = "Disabling Limits
|
175
|
+
message = "Disabling Limits for '#{target_name} #{packet_name} #{item_name}'"
|
176
176
|
Logger.info(message, scope: scope)
|
177
177
|
|
178
178
|
event = { type: :LIMITS_ENABLE_STATE, target_name: target_name, packet_name: packet_name,
|
@@ -344,11 +344,11 @@ module OpenC3
|
|
344
344
|
if action == :enable
|
345
345
|
enabled = true
|
346
346
|
item['limits']['enabled'] = true
|
347
|
-
message = "Enabling Limits
|
347
|
+
message = "Enabling Limits for '#{target_name} #{packet_name} #{item_name}'"
|
348
348
|
elsif action == :disable
|
349
349
|
enabled = false
|
350
350
|
item['limits'].delete('enabled')
|
351
|
-
message = "Disabling Limits
|
351
|
+
message = "Disabling Limits for '#{target_name} #{packet_name} #{item_name}'"
|
352
352
|
end
|
353
353
|
Logger.info(message, scope: scope)
|
354
354
|
|
@@ -115,7 +115,11 @@ module OpenC3
|
|
115
115
|
def limits_change_callback(packet, item, old_limits_state, value, log_change)
|
116
116
|
return if @cancel_thread
|
117
117
|
packet_time = packet.packet_time
|
118
|
-
|
118
|
+
if value
|
119
|
+
message = "#{packet.target_name} #{packet.packet_name} #{item.name} = #{value} is #{item.limits.state}"
|
120
|
+
else
|
121
|
+
message = "#{packet.target_name} #{packet.packet_name} #{item.name} is disabled"
|
122
|
+
end
|
119
123
|
message << " (#{packet.packet_time.sys.formatted})" if packet_time
|
120
124
|
|
121
125
|
time_nsec = packet_time ? packet_time.to_nsec_from_epoch : Time.now.to_nsec_from_epoch
|
@@ -389,6 +389,8 @@ module OpenC3
|
|
389
389
|
status_model = RouterStatusModel.get_model(name: @name, scope: @scope)
|
390
390
|
end
|
391
391
|
status_model.destroy if status_model
|
392
|
+
rescue Exception => error
|
393
|
+
Logger.error("Error undeploying interface/router model #{@name} in scope #{@scope} due to #{error}")
|
392
394
|
end
|
393
395
|
|
394
396
|
def unmap_target(target_name, cmd_only: false, tlm_only: false)
|
@@ -17,7 +17,7 @@
|
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
19
|
#
|
20
|
-
# This file may also be used under the terms of a commercial license
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
21
|
# if purchased from OpenC3, Inc.
|
22
22
|
|
23
23
|
require 'openc3/models/model'
|
@@ -639,6 +639,8 @@ module OpenC3
|
|
639
639
|
@@item_map_cache[@name] = nil
|
640
640
|
|
641
641
|
ConfigTopic.write({ kind: 'deleted', type: 'target', name: @name, plugin: @plugin }, scope: @scope)
|
642
|
+
rescue Exception => error
|
643
|
+
Logger.error("Error undeploying target model #{@name} in scope #{@scope} due to #{error}")
|
642
644
|
end
|
643
645
|
|
644
646
|
##################################################
|
@@ -247,6 +247,8 @@ module OpenC3
|
|
247
247
|
ConfigTopic.write({ kind: 'deleted', type: 'tool', name: @folder_name, plugin: @plugin }, scope: @scope)
|
248
248
|
end
|
249
249
|
end
|
250
|
+
rescue Exception => error
|
251
|
+
Logger.error("Error undeploying tool model #{@name} in scope #{@scope} due to #{error}")
|
250
252
|
end
|
251
253
|
|
252
254
|
##################################################
|
@@ -139,6 +139,8 @@ module OpenC3
|
|
139
139
|
bucket = Bucket.getClient()
|
140
140
|
bucket.delete_object(bucket: ENV['OPENC3_TOOLS_BUCKET'], key: @bucket_key)
|
141
141
|
bucket.delete_object(bucket: ENV['OPENC3_TOOLS_BUCKET'], key: @bucket_key + '.map')
|
142
|
+
rescue Exception => error
|
143
|
+
Logger.error("Error undeploying widget model #{@name} in scope #{@scope} due to #{error}")
|
142
144
|
end
|
143
145
|
end
|
144
146
|
end
|
@@ -17,7 +17,7 @@
|
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
19
|
#
|
20
|
-
# This file may also be used under the terms of a commercial license
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
21
|
# if purchased from OpenC3, Inc.
|
22
22
|
|
23
23
|
require 'openc3/packets/binary_accessor'
|
@@ -518,7 +518,7 @@ module OpenC3
|
|
518
518
|
# Take the structure mutex to ensure the buffer does not change while you perform activities
|
519
519
|
def synchronize
|
520
520
|
setup_mutex()
|
521
|
-
@mutex.synchronize { || yield }
|
521
|
+
@mutex.synchronize { || yield } #|
|
522
522
|
end
|
523
523
|
|
524
524
|
# Take the structure mutex to ensure the buffer does not change while you perform activities
|
@@ -17,7 +17,7 @@
|
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
19
|
#
|
20
|
-
# This file may also be used under the terms of a commercial license
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
21
|
# if purchased from OpenC3, Inc.
|
22
22
|
|
23
23
|
require 'openc3/ext/packet' if RUBY_ENGINE == 'ruby' and !ENV['OPENC3_NO_EXT']
|
@@ -135,14 +135,7 @@ module OpenC3
|
|
135
135
|
end
|
136
136
|
|
137
137
|
def bit_offset=(bit_offset)
|
138
|
-
|
139
|
-
# Ruby version >= 2.4.0
|
140
|
-
raise ArgumentError, "#{@name}: bit_offset must be an Integer" unless Integer === bit_offset
|
141
|
-
else
|
142
|
-
# Ruby version < 2.4.0
|
143
|
-
raise ArgumentError, "#{@name}: bit_offset must be a Fixnum" unless Fixnum === bit_offset
|
144
|
-
end
|
145
|
-
|
138
|
+
raise ArgumentError, "#{@name}: bit_offset must be an Integer" unless Integer === bit_offset
|
146
139
|
byte_aligned = ((bit_offset % 8) == 0)
|
147
140
|
if (@data_type == :FLOAT or @data_type == :STRING or @data_type == :BLOCK) and !byte_aligned
|
148
141
|
raise ArgumentError, "#{@name}: bit_offset for :FLOAT, :STRING, and :BLOCK items must be byte aligned"
|
@@ -156,18 +149,14 @@ module OpenC3
|
|
156
149
|
end
|
157
150
|
|
158
151
|
def bit_size=(bit_size)
|
159
|
-
|
160
|
-
# Ruby version >= 2.4.0
|
161
|
-
raise ArgumentError, "#{name}: bit_size must be an Integer" unless Integer === bit_size
|
162
|
-
else
|
163
|
-
# Ruby version < 2.4.0
|
164
|
-
raise ArgumentError, "#{name}: bit_size must be a Fixnum" unless Fixnum === bit_size
|
165
|
-
end
|
152
|
+
raise ArgumentError, "#{@name}: bit_size must be an Integer" unless Integer === bit_size
|
166
153
|
byte_multiple = ((bit_size % 8) == 0)
|
167
154
|
if bit_size <= 0 and (@data_type == :INT or @data_type == :UINT or @data_type == :FLOAT)
|
168
155
|
raise ArgumentError, "#{@name}: bit_size cannot be negative or zero for :INT, :UINT, and :FLOAT items: #{bit_size}"
|
169
156
|
end
|
170
|
-
|
157
|
+
if (@data_type == :STRING or @data_type == :BLOCK) and !byte_multiple
|
158
|
+
raise ArgumentError, "#{@name}: bit_size for STRING and BLOCK items must be byte multiples"
|
159
|
+
end
|
171
160
|
if @data_type == :FLOAT and bit_size != 32 and bit_size != 64
|
172
161
|
raise ArgumentError, "#{@name}: bit_size for FLOAT items must be 32 or 64. Given: #{bit_size}"
|
173
162
|
end
|
@@ -195,13 +184,7 @@ module OpenC3
|
|
195
184
|
|
196
185
|
def array_size=(array_size)
|
197
186
|
if array_size
|
198
|
-
|
199
|
-
# Ruby version >= 2.4.0
|
200
|
-
raise ArgumentError, "#{@name}: array_size must be an Integer" unless Integer === array_size
|
201
|
-
else
|
202
|
-
# Ruby version < 2.4.0
|
203
|
-
raise ArgumentError, "#{@name}: array_size must be a Fixnum" unless Fixnum === array_size
|
204
|
-
end
|
187
|
+
raise ArgumentError, "#{@name}: array_size must be an Integer" unless Integer === array_size
|
205
188
|
raise ArgumentError, "#{@name}: array_size must be a multiple of bit_size" unless @bit_size == 0 or (array_size % @bit_size == 0) or array_size < 0
|
206
189
|
raise ArgumentError, "#{@name}: bit_size cannot be negative or zero for array items" if @bit_size <= 0
|
207
190
|
end
|
@@ -44,17 +44,14 @@ module OpenC3
|
|
44
44
|
_check(*args, scope: scope) { |tgt, pkt, item| tlm(tgt, pkt, item, type: type, scope: scope, token: token) }
|
45
45
|
end
|
46
46
|
|
47
|
-
# @deprecated Use check with type: :RAW
|
48
47
|
def check_raw(*args, scope: $openc3_scope, token: $openc3_token)
|
49
48
|
check(*args, type: :RAW, scope: scope, token: token)
|
50
49
|
end
|
51
50
|
|
52
|
-
# @deprecated Use check with type: :FORMATTED
|
53
51
|
def check_formatted(*args, scope: $openc3_scope, token: $openc3_token)
|
54
52
|
check(*args, type: :FORMATTED, scope: scope, token: token)
|
55
53
|
end
|
56
54
|
|
57
|
-
# @deprecated Use check with type: :WITH_UNITS
|
58
55
|
def check_with_units(*args, scope: $openc3_scope, token: $openc3_token)
|
59
56
|
check(*args, type: :WITH_UNITS, scope: scope, token: token)
|
60
57
|
end
|
@@ -90,10 +87,10 @@ module OpenC3
|
|
90
87
|
raise "Invalid type '#{type}' for check_tolerance" unless %i(RAW CONVERTED).include?(type)
|
91
88
|
|
92
89
|
target_name, packet_name, item_name, expected_value, tolerance =
|
93
|
-
_check_tolerance_process_args(args
|
90
|
+
_check_tolerance_process_args(args)
|
94
91
|
value = tlm(target_name, packet_name, item_name, type: type, scope: scope, token: token)
|
95
92
|
if value.is_a?(Array)
|
96
|
-
expected_value, tolerance =
|
93
|
+
expected_value, tolerance = _array_tolerance_process_args(value.size, expected_value, tolerance, 'check_tolerance')
|
97
94
|
|
98
95
|
message = ""
|
99
96
|
all_checks_ok = true
|
@@ -166,23 +163,23 @@ module OpenC3
|
|
166
163
|
# @param args [String|Array<String>] See the description for calling style
|
167
164
|
# @param type [Symbol] Telemetry type, :RAW, :CONVERTED (default), :FORMATTED, or :WITH_UNITS
|
168
165
|
def wait(*args, type: :CONVERTED, quiet: false, scope: $openc3_scope, token: $openc3_token)
|
169
|
-
|
166
|
+
time_diff = nil
|
170
167
|
|
171
168
|
case args.length
|
172
169
|
# wait() # indefinitely until they click Go
|
173
170
|
when 0
|
174
171
|
start_time = Time.now.sys
|
175
172
|
openc3_script_sleep()
|
176
|
-
|
177
|
-
Logger.info("WAIT: Indefinite for actual time of #{
|
173
|
+
time_diff = Time.now.sys - start_time
|
174
|
+
Logger.info("WAIT: Indefinite for actual time of #{time_diff} seconds") unless quiet
|
178
175
|
|
179
176
|
# wait(5) # absolute wait time
|
180
177
|
when 1
|
181
178
|
if args[0].kind_of? Numeric
|
182
179
|
start_time = Time.now.sys
|
183
180
|
openc3_script_sleep(args[0])
|
184
|
-
|
185
|
-
Logger.info("WAIT: #{args[0]} seconds with actual time of #{
|
181
|
+
time_diff = Time.now.sys - start_time
|
182
|
+
Logger.info("WAIT: #{args[0]} seconds with actual time of #{time_diff} seconds") unless quiet
|
186
183
|
else
|
187
184
|
raise "Non-numeric wait time specified"
|
188
185
|
end
|
@@ -216,7 +213,7 @@ module OpenC3
|
|
216
213
|
# Invalid number of arguments
|
217
214
|
raise "ERROR: Invalid number of arguments (#{args.length}) passed to wait()"
|
218
215
|
end
|
219
|
-
|
216
|
+
time_diff
|
220
217
|
end
|
221
218
|
|
222
219
|
# @deprecated Use wait with type: :RAW
|
@@ -235,11 +232,11 @@ module OpenC3
|
|
235
232
|
def wait_tolerance(*args, type: :CONVERTED, quiet: false, scope: $openc3_scope, token: $openc3_token)
|
236
233
|
raise "Invalid type '#{type}' for wait_tolerance" unless %i(RAW CONVERTED).include?(type)
|
237
234
|
|
238
|
-
target_name, packet_name, item_name, expected_value, tolerance, timeout, polling_rate = _wait_tolerance_process_args(args
|
235
|
+
target_name, packet_name, item_name, expected_value, tolerance, timeout, polling_rate = _wait_tolerance_process_args(args)
|
239
236
|
start_time = Time.now.sys
|
240
237
|
value = tlm(target_name, packet_name, item_name, type: type, scope: scope, token: token)
|
241
238
|
if value.is_a?(Array)
|
242
|
-
expected_value, tolerance =
|
239
|
+
expected_value, tolerance = _array_tolerance_process_args(value.size, expected_value, tolerance, 'wait_tolerance')
|
243
240
|
|
244
241
|
success, value = openc3_script_wait_implementation_array_tolerance(value.size, target_name, packet_name, item_name, type, expected_value, tolerance, timeout, polling_rate, scope: scope, token: token)
|
245
242
|
time = Time.now.sys - start_time
|
@@ -285,13 +282,13 @@ module OpenC3
|
|
285
282
|
def wait_expression(exp_to_eval, timeout, polling_rate = DEFAULT_TLM_POLLING_RATE, context = nil, quiet: false, scope: $openc3_scope, token: $openc3_token)
|
286
283
|
start_time = Time.now.sys
|
287
284
|
success = openc3_script_wait_implementation_expression(exp_to_eval, timeout, polling_rate, context, scope: scope, token: token)
|
288
|
-
|
285
|
+
time_diff = Time.now.sys - start_time
|
289
286
|
if success
|
290
|
-
Logger.info "WAIT: #{exp_to_eval} is TRUE after waiting #{
|
287
|
+
Logger.info "WAIT: #{exp_to_eval} is TRUE after waiting #{time_diff} seconds" unless quiet
|
291
288
|
else
|
292
|
-
Logger.warn "WAIT: #{exp_to_eval} is FALSE after waiting #{
|
289
|
+
Logger.warn "WAIT: #{exp_to_eval} is FALSE after waiting #{time_diff} seconds" unless quiet
|
293
290
|
end
|
294
|
-
|
291
|
+
time_diff
|
295
292
|
end
|
296
293
|
|
297
294
|
# Wait for the converted value of a telmetry item against a condition or for a timeout
|
@@ -304,13 +301,13 @@ module OpenC3
|
|
304
301
|
# @param args [String|Array<String>] See the description for calling style
|
305
302
|
# @param type [Symbol] Telemetry type, :RAW, :CONVERTED (default), :FORMATTED, or :WITH_UNITS
|
306
303
|
def wait_check(*args, type: :CONVERTED, scope: $openc3_scope, token: $openc3_token, &block)
|
307
|
-
target_name, packet_name, item_name, comparison_to_eval, timeout, polling_rate = _wait_check_process_args(args
|
304
|
+
target_name, packet_name, item_name, comparison_to_eval, timeout, polling_rate = _wait_check_process_args(args)
|
308
305
|
start_time = Time.now.sys
|
309
306
|
success, value = openc3_script_wait_implementation(target_name, packet_name, item_name, type, comparison_to_eval, timeout, polling_rate, scope: scope, token: token, &block)
|
310
307
|
value = "'#{value}'" if value.is_a? String # Show user the check against a quoted string
|
311
|
-
|
308
|
+
time_diff = Time.now.sys - start_time
|
312
309
|
check_str = "CHECK: #{_upcase(target_name, packet_name, item_name)} #{comparison_to_eval}"
|
313
|
-
with_value_str = "with value == #{value} after waiting #{
|
310
|
+
with_value_str = "with value == #{value} after waiting #{time_diff} seconds"
|
314
311
|
if success
|
315
312
|
Logger.info "#{check_str} success #{with_value_str}"
|
316
313
|
else
|
@@ -321,7 +318,7 @@ module OpenC3
|
|
321
318
|
raise CheckError, message
|
322
319
|
end
|
323
320
|
end
|
324
|
-
|
321
|
+
time_diff
|
325
322
|
end
|
326
323
|
|
327
324
|
# @deprecated use wait_check with type: :RAW
|
@@ -341,20 +338,20 @@ module OpenC3
|
|
341
338
|
def wait_check_tolerance(*args, type: :CONVERTED, scope: $openc3_scope, token: $openc3_token, &block)
|
342
339
|
raise "Invalid type '#{type}' for wait_check_tolerance" unless %i(RAW CONVERTED).include?(type)
|
343
340
|
|
344
|
-
target_name, packet_name, item_name, expected_value, tolerance, timeout, polling_rate = _wait_tolerance_process_args(args
|
341
|
+
target_name, packet_name, item_name, expected_value, tolerance, timeout, polling_rate = _wait_tolerance_process_args(args)
|
345
342
|
start_time = Time.now.sys
|
346
343
|
value = tlm(target_name, packet_name, item_name, type: type, scope: scope, token: token)
|
347
344
|
if value.is_a?(Array)
|
348
|
-
expected_value, tolerance =
|
345
|
+
expected_value, tolerance = _array_tolerance_process_args(value.size, expected_value, tolerance, 'wait_check_tolerance')
|
349
346
|
|
350
347
|
success, value = openc3_script_wait_implementation_array_tolerance(value.size, target_name, packet_name, item_name, type, expected_value, tolerance, timeout, polling_rate, scope: scope, token: token, &block)
|
351
|
-
|
348
|
+
time_diff = Time.now.sys - start_time
|
352
349
|
|
353
350
|
message = ""
|
354
351
|
value.size.times do |i|
|
355
352
|
range = (expected_value[i] - tolerance[i]..expected_value[i] + tolerance[i])
|
356
353
|
check_str = "CHECK: #{_upcase(target_name, packet_name, item_name)}[#{i}]"
|
357
|
-
range_str = "range #{range.first} to #{range.last} with value == #{value[i]} after waiting #{
|
354
|
+
range_str = "range #{range.first} to #{range.last} with value == #{value[i]} after waiting #{time_diff} seconds"
|
358
355
|
if range.include?(value[i])
|
359
356
|
message << "#{check_str} was within #{range_str}\n"
|
360
357
|
else
|
@@ -373,10 +370,10 @@ module OpenC3
|
|
373
370
|
end
|
374
371
|
else
|
375
372
|
success, value = openc3_script_wait_implementation_tolerance(target_name, packet_name, item_name, type, expected_value, tolerance, timeout, polling_rate, scope: scope, token: token)
|
376
|
-
|
373
|
+
time_diff = Time.now.sys - start_time
|
377
374
|
range = (expected_value - tolerance)..(expected_value + tolerance)
|
378
375
|
check_str = "CHECK: #{_upcase(target_name, packet_name, item_name)}"
|
379
|
-
range_str = "range #{range.first} to #{range.last} with value == #{value} after waiting #{
|
376
|
+
range_str = "range #{range.first} to #{range.last} with value == #{value} after waiting #{time_diff} seconds"
|
380
377
|
if success
|
381
378
|
Logger.info "#{check_str} was within #{range_str}"
|
382
379
|
else
|
@@ -388,7 +385,7 @@ module OpenC3
|
|
388
385
|
end
|
389
386
|
end
|
390
387
|
end
|
391
|
-
|
388
|
+
time_diff
|
392
389
|
end
|
393
390
|
|
394
391
|
# @deprecated Use wait_check_tolerance with type: :RAW
|
@@ -407,18 +404,18 @@ module OpenC3
|
|
407
404
|
timeout,
|
408
405
|
polling_rate,
|
409
406
|
context, scope: scope, token: token, &block)
|
410
|
-
|
407
|
+
time_diff = Time.now.sys - start_time
|
411
408
|
if success
|
412
|
-
Logger.info "CHECK: #{exp_to_eval} is TRUE after waiting #{
|
409
|
+
Logger.info "CHECK: #{exp_to_eval} is TRUE after waiting #{time_diff} seconds"
|
413
410
|
else
|
414
|
-
message = "CHECK: #{exp_to_eval} is FALSE after waiting #{
|
411
|
+
message = "CHECK: #{exp_to_eval} is FALSE after waiting #{time_diff} seconds"
|
415
412
|
if $disconnect
|
416
413
|
Logger.error message
|
417
414
|
else
|
418
415
|
raise CheckError, message
|
419
416
|
end
|
420
417
|
end
|
421
|
-
|
418
|
+
time_diff
|
422
419
|
end
|
423
420
|
alias wait_expression_stop_on_timeout wait_check_expression
|
424
421
|
|
@@ -483,7 +480,7 @@ module OpenC3
|
|
483
480
|
###########################################################################
|
484
481
|
# Scripts Outside of ScriptRunner Support
|
485
482
|
# ScriptRunner overrides these methods to work in the OpenC3 cluster
|
486
|
-
# They are only here to allow for scripts to have a
|
483
|
+
# They are only here to allow for scripts to have a chance to work
|
487
484
|
# unaltered outside of the cluster
|
488
485
|
###########################################################################
|
489
486
|
|
@@ -534,17 +531,17 @@ module OpenC3
|
|
534
531
|
# caller to allow the return of the value through various telemetry calls.
|
535
532
|
# This method should not be called directly by application code.
|
536
533
|
def _check(*args, scope: $openc3_scope, token: $openc3_token)
|
537
|
-
target_name, packet_name, item_name, comparison_to_eval = _check_process_args(args, 'check'
|
534
|
+
target_name, packet_name, item_name, comparison_to_eval = _check_process_args(args, 'check')
|
538
535
|
|
539
536
|
value = yield(target_name, packet_name, item_name)
|
540
537
|
if comparison_to_eval
|
541
|
-
|
538
|
+
_check_eval(target_name, packet_name, item_name, comparison_to_eval, value)
|
542
539
|
else
|
543
540
|
Logger.info "CHECK: #{_upcase(target_name, packet_name, item_name)} == #{value}"
|
544
541
|
end
|
545
542
|
end
|
546
543
|
|
547
|
-
def _check_process_args(args, method_name
|
544
|
+
def _check_process_args(args, method_name)
|
548
545
|
case args.length
|
549
546
|
when 1
|
550
547
|
target_name, packet_name, item_name, comparison_to_eval = extract_fields_from_check_text(args[0])
|
@@ -557,10 +554,11 @@ module OpenC3
|
|
557
554
|
# Invalid number of arguments
|
558
555
|
raise "ERROR: Invalid number of arguments (#{args.length}) passed to #{method_name}()"
|
559
556
|
end
|
557
|
+
raise "Invalid comparison to non-ascii value" unless comparison_to_eval.is_printable?
|
560
558
|
return [target_name, packet_name, item_name, comparison_to_eval]
|
561
559
|
end
|
562
560
|
|
563
|
-
def _check_tolerance_process_args(args
|
561
|
+
def _check_tolerance_process_args(args)
|
564
562
|
case args.length
|
565
563
|
when 3
|
566
564
|
target_name, packet_name, item_name = extract_fields_from_tlm_text(args[0])
|
@@ -612,11 +610,11 @@ module OpenC3
|
|
612
610
|
token: token)
|
613
611
|
# If the packet has not been received the value could be nil
|
614
612
|
value = 0 unless value
|
615
|
-
|
613
|
+
time_diff = Time.now.sys - start_time
|
616
614
|
if success
|
617
|
-
Logger.info "#{type}: #{target_name.upcase} #{packet_name.upcase} received #{value - initial_count} times after waiting #{
|
615
|
+
Logger.info "#{type}: #{target_name.upcase} #{packet_name.upcase} received #{value - initial_count} times after waiting #{time_diff} seconds" unless quiet
|
618
616
|
else
|
619
|
-
message = "#{type}: #{target_name.upcase} #{packet_name.upcase} expected to be received #{num_packets} times but only received #{value - initial_count} times after waiting #{
|
617
|
+
message = "#{type}: #{target_name.upcase} #{packet_name.upcase} expected to be received #{num_packets} times but only received #{value - initial_count} times after waiting #{time_diff} seconds"
|
620
618
|
if check
|
621
619
|
if $disconnect
|
622
620
|
Logger.error message
|
@@ -627,16 +625,16 @@ module OpenC3
|
|
627
625
|
Logger.warn message unless quiet
|
628
626
|
end
|
629
627
|
end
|
630
|
-
|
628
|
+
time_diff
|
631
629
|
end
|
632
630
|
|
633
631
|
def _execute_wait(target_name, packet_name, item_name, value_type, comparison_to_eval, timeout, polling_rate, quiet: false, scope: $openc3_scope, token: $openc3_token)
|
634
632
|
start_time = Time.now.sys
|
635
633
|
success, value = openc3_script_wait_implementation(target_name, packet_name, item_name, value_type, comparison_to_eval, timeout, polling_rate, scope: scope, token: token)
|
636
634
|
value = "'#{value}'" if value.is_a? String # Show user the check against a quoted string
|
637
|
-
|
635
|
+
time_diff = Time.now.sys - start_time
|
638
636
|
wait_str = "WAIT: #{_upcase(target_name, packet_name, item_name)} #{comparison_to_eval}"
|
639
|
-
value_str = "with value == #{value} after waiting #{
|
637
|
+
value_str = "with value == #{value} after waiting #{time_diff} seconds"
|
640
638
|
if success
|
641
639
|
Logger.info "#{wait_str} success #{value_str}" unless quiet
|
642
640
|
else
|
@@ -644,7 +642,7 @@ module OpenC3
|
|
644
642
|
end
|
645
643
|
end
|
646
644
|
|
647
|
-
def _wait_tolerance_process_args(args
|
645
|
+
def _wait_tolerance_process_args(args)
|
648
646
|
case args.length
|
649
647
|
when 4, 5
|
650
648
|
target_name, packet_name, item_name = extract_fields_from_tlm_text(args[0])
|
@@ -686,7 +684,7 @@ module OpenC3
|
|
686
684
|
# When testing an array with a tolerance, the expected value and tolerance
|
687
685
|
# can both be supplied as either an array or a single value. If a single
|
688
686
|
# value is passed in, that value will be used for all array elements.
|
689
|
-
def
|
687
|
+
def _array_tolerance_process_args(array_size, expected_value, tolerance, method_name)
|
690
688
|
if expected_value.is_a?(Array)
|
691
689
|
if array_size != expected_value.size
|
692
690
|
raise "ERROR: Invalid array size for expected_value passed to #{method_name}()"
|
@@ -704,7 +702,7 @@ module OpenC3
|
|
704
702
|
return [expected_value, tolerance]
|
705
703
|
end
|
706
704
|
|
707
|
-
def _wait_check_process_args(args
|
705
|
+
def _wait_check_process_args(args)
|
708
706
|
case args.length
|
709
707
|
when 2, 3
|
710
708
|
target_name, packet_name, item_name, comparison_to_eval = extract_fields_from_check_text(args[0])
|
@@ -849,8 +847,7 @@ module OpenC3
|
|
849
847
|
end
|
850
848
|
end
|
851
849
|
|
852
|
-
def
|
853
|
-
raise "Invalid comparison to non-ascii value" unless comparison_to_eval.is_printable?
|
850
|
+
def _check_eval(target_name, packet_name, item_name, comparison_to_eval, value)
|
854
851
|
string = "value " + comparison_to_eval
|
855
852
|
check_str = "CHECK: #{_upcase(target_name, packet_name, item_name)} #{comparison_to_eval}"
|
856
853
|
# Show user the check against a quoted string
|
@@ -405,9 +405,9 @@ end
|
|
405
405
|
# # Environment variables are already set inside of our containers
|
406
406
|
# # START OUTSIDE OF DOCKER ONLY
|
407
407
|
# $openc3_scope = 'DEFAULT'
|
408
|
-
# ENV['OPENC3_API_HOSTNAME'] = '
|
408
|
+
# ENV['OPENC3_API_HOSTNAME'] = '127.0.0.1'
|
409
409
|
# ENV['OPENC3_API_PORT'] = '2900'
|
410
|
-
# ENV['OPENC3_SCRIPT_API_HOSTNAME'] = '
|
410
|
+
# ENV['OPENC3_SCRIPT_API_HOSTNAME'] = '127.0.0.1'
|
411
411
|
# ENV['OPENC3_SCRIPT_API_PORT'] = '2900'
|
412
412
|
# ENV['OPENC3_API_PASSWORD'] = 'password'
|
413
413
|
# # END OUTSIDE OF DOCKER ONLY
|
data/lib/openc3/system/target.rb
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
19
|
#
|
20
|
-
# This file may also be used under the terms of a commercial license
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
21
|
# if purchased from OpenC3, Inc.
|
22
22
|
|
23
23
|
require 'openc3/config/config_parser'
|
@@ -226,8 +226,8 @@ module OpenC3
|
|
226
226
|
# Process the target's configuration file if it exists
|
227
227
|
def process_target_config_file
|
228
228
|
@filename = File.join(@dir, 'target.txt')
|
229
|
-
if File.exist?(filename)
|
230
|
-
process_file(filename)
|
229
|
+
if File.exist?(@filename)
|
230
|
+
process_file(@filename)
|
231
231
|
else
|
232
232
|
@filename = nil
|
233
233
|
end
|
data/lib/openc3/top_level.rb
CHANGED
@@ -43,7 +43,7 @@ class HazardousError < StandardError
|
|
43
43
|
attr_accessor :formatted # formatted command for use in resending original
|
44
44
|
|
45
45
|
def to_s
|
46
|
-
string = "#{target_name} #{cmd_name} with #{cmd_params} is Hazardous"
|
46
|
+
string = "#{target_name} #{cmd_name} with #{cmd_params} is Hazardous "
|
47
47
|
string << "due to '#{hazardous_description}'" if hazardous_description
|
48
48
|
# Pass along the original formatted command so it can be resent
|
49
49
|
string << ".\n#{formatted}"
|
@@ -213,10 +213,14 @@ module OpenC3
|
|
213
213
|
|
214
214
|
def delete_object(bucket:, key:)
|
215
215
|
@client.delete_object(bucket: bucket, key: key)
|
216
|
+
rescue Exception
|
217
|
+
Logger.error("Error deleting object bucket: #{bucket}, key: #{key}")
|
216
218
|
end
|
217
219
|
|
218
220
|
def delete_objects(bucket:, keys:)
|
219
221
|
@client.delete_objects(bucket: bucket, delete: { objects: keys.map {|key| { key: key } } })
|
222
|
+
rescue Exception
|
223
|
+
Logger.error("Error deleting objects bucket: #{bucket}, keys: #{keys}")
|
220
224
|
end
|
221
225
|
|
222
226
|
def presigned_request(bucket:, key:, method:, internal: true)
|
@@ -196,12 +196,12 @@ module OpenC3
|
|
196
196
|
# store.trim_topic('MANGO__TOPIC', 1000, approximate: 'true', limit: 0)
|
197
197
|
#
|
198
198
|
# @param topic [String] the stream key
|
199
|
-
# @param minid [Integer]
|
199
|
+
# @param minid [Integer] Id to throw away data up to
|
200
200
|
# @param approximate [Boolean] whether to add `~` modifier of maxlen or not
|
201
|
-
# @param limit [Boolean]
|
201
|
+
# @param limit [Boolean] number of items to return from the call
|
202
202
|
#
|
203
203
|
# @return [Integer] the number of entries actually deleted
|
204
|
-
def trim_topic(topic, minid, approximate =
|
204
|
+
def trim_topic(topic, minid, approximate = true, limit: 0)
|
205
205
|
@redis_pool.with do |redis|
|
206
206
|
return redis.xtrim_minid(topic, minid, approximate: approximate, limit: limit)
|
207
207
|
end
|
@@ -218,8 +218,8 @@ module OpenC3
|
|
218
218
|
end
|
219
219
|
|
220
220
|
class Redis
|
221
|
-
def xtrim_minid(key, minid, approximate:
|
222
|
-
args = [:xtrim, key, :MINID, (approximate ? '~' :
|
221
|
+
def xtrim_minid(key, minid, approximate: true, limit: nil)
|
222
|
+
args = [:xtrim, key, :MINID, (approximate ? '~' : '='), minid]
|
223
223
|
args.concat([:LIMIT, limit]) if limit
|
224
224
|
send_command(args)
|
225
225
|
end
|
data/lib/openc3/version.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# encoding: ascii-8bit
|
2
2
|
|
3
|
-
OPENC3_VERSION = '5.
|
3
|
+
OPENC3_VERSION = '5.10.0'
|
4
4
|
module OpenC3
|
5
5
|
module Version
|
6
6
|
MAJOR = '5'
|
7
|
-
MINOR = '
|
8
|
-
PATCH = '
|
7
|
+
MINOR = '10'
|
8
|
+
PATCH = '0'
|
9
9
|
OTHER = ''
|
10
|
-
BUILD = '
|
10
|
+
BUILD = '926e6a3798993710a67729b9599c5a295b210152'
|
11
11
|
end
|
12
|
-
VERSION = '5.
|
13
|
-
GEM_VERSION = '5.
|
12
|
+
VERSION = '5.10.0'
|
13
|
+
GEM_VERSION = '5.10.0'
|
14
14
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "<%= tool_name %>",
|
3
|
-
"version": "5.
|
3
|
+
"version": "5.10.0",
|
4
4
|
"scripts": {
|
5
5
|
"ng": "ng",
|
6
6
|
"start": "ng serve",
|
@@ -22,7 +22,7 @@
|
|
22
22
|
"@angular/platform-browser": "^16.1.3",
|
23
23
|
"@angular/platform-browser-dynamic": "^16.1.3",
|
24
24
|
"@angular/router": "^16.1.3",
|
25
|
-
"@openc3/tool-common": "5.
|
25
|
+
"@openc3/tool-common": "5.10.0",
|
26
26
|
"rxjs": "~7.8.0",
|
27
27
|
"single-spa": ">=5.9.5",
|
28
28
|
"single-spa-angular": "^8.1.0",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "<%= tool_name %>",
|
3
|
-
"version": "5.
|
3
|
+
"version": "5.10.0",
|
4
4
|
"private": true,
|
5
5
|
"scripts": {
|
6
6
|
"serve": "vue-cli-service serve",
|
@@ -11,7 +11,7 @@
|
|
11
11
|
"test:components": "vue-cli-service test:components"
|
12
12
|
},
|
13
13
|
"dependencies": {
|
14
|
-
"@openc3/tool-common": "5.
|
14
|
+
"@openc3/tool-common": "5.10.0",
|
15
15
|
"axios": "0.27.2",
|
16
16
|
"date-fns": "2.30.0",
|
17
17
|
"portal-vue": "2.1.7",
|
@@ -1,12 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "widget",
|
3
|
-
"version": "5.
|
3
|
+
"version": "5.10.0",
|
4
4
|
"private": true,
|
5
5
|
"scripts": {
|
6
6
|
"build": "vue-cli-service build --target lib --dest tools/widgets/<%= widget_name %> --formats umd-min <%= widget_path %> --name <%= widget_name %>"
|
7
7
|
},
|
8
8
|
"dependencies": {
|
9
|
-
"@openc3/tool-common": "5.
|
9
|
+
"@openc3/tool-common": "5.10.0",
|
10
10
|
"vue": "2.7.14",
|
11
11
|
"vuetify": "2.6.14"
|
12
12
|
},
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openc3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Melton
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
12
|
+
date: 2023-08-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|