openc3 5.9.1 → 5.10.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- 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/microservices/trigger_group_microservice.rb +6 -2
- 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/packet.rb +7 -13
- data/lib/openc3/packets/structure.rb +2 -2
- data/lib/openc3/packets/structure_item.rb +7 -27
- 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/topics/command_decom_topic.rb +0 -4
- data/lib/openc3/topics/telemetry_decom_topic.rb +0 -4
- data/lib/openc3/topics/telemetry_reduced_topics.rb +1 -13
- data/lib/openc3/topics/topic.rb +0 -8
- data/lib/openc3/utilities/authentication.rb +0 -1
- data/lib/openc3/utilities/aws_bucket.rb +44 -38
- data/lib/openc3/utilities/store_autoload.rb +5 -5
- data/lib/openc3/version.rb +5 -5
- data/templates/tool_angular/package.json +17 -17
- data/templates/tool_angular/yarn.lock +1798 -998
- data/templates/tool_react/package.json +20 -20
- data/templates/tool_react/yarn.lock +754 -700
- data/templates/tool_svelte/package.json +21 -21
- data/templates/tool_svelte/yarn.lock +622 -478
- data/templates/tool_vue/package.json +7 -7
- data/templates/tool_vue/yarn.lock +152 -118
- data/templates/widget/package.json +8 -8
- data/templates/widget/yarn.lock +157 -66
- 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: e462e9d0a5d73e46212ec61b784b432827b0588b64308449309196e1257ad5b0
|
4
|
+
data.tar.gz: 4811700be9aeab28edc867d11e26481d7cbf63abe8bb3ca9ef956823d8adb17d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e01b50dc62e075afe78f66101e176ec20118f017122a8f76a1eb3d1b302250e55717897c2302c6bf812cece5bedf0d9e6a0b1fdc2dc43f68998a693d7b04b4d
|
7
|
+
data.tar.gz: 5a93a1b914e84e5555cc88e4c74da80a8283ae621c958c6d9535848c1ff384dd7aa3a6ba59dff7e148b91eb3370ef563ec0a8c94f1ecafc517bd65665f8f8e2a
|
data/Gemfile
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
|
# 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
|
@@ -355,9 +355,13 @@ module OpenC3
|
|
355
355
|
end
|
356
356
|
# This shouldn't happen because the frontend provides valid items but good to check
|
357
357
|
# The raise is ultimately rescued inside evaluate_trigger when operand_value is called
|
358
|
-
|
358
|
+
if packet.nil?
|
359
|
+
raise "Packet #{operand[ITEM_TARGET]} #{operand[ITEM_PACKET]} not found"
|
360
|
+
end
|
359
361
|
value = packet.read(operand[ITEM_TYPE], operand[ITEM_VALUE_TYPE].intern)
|
360
|
-
|
362
|
+
if value.nil?
|
363
|
+
raise "Item #{operand[ITEM_TARGET]} #{operand[ITEM_PACKET]} #{operand[ITEM_TYPE]} not found"
|
364
|
+
end
|
361
365
|
value
|
362
366
|
end
|
363
367
|
|
@@ -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
|
@@ -540,7 +540,7 @@ module OpenC3
|
|
540
540
|
|
541
541
|
# (see Structure#get_item)
|
542
542
|
def get_item(name)
|
543
|
-
super(name)
|
543
|
+
return super(name)
|
544
544
|
rescue ArgumentError
|
545
545
|
raise "Packet item '#{@target_name} #{@packet_name} #{name.upcase}' does not exist"
|
546
546
|
end
|
@@ -1056,10 +1056,10 @@ module OpenC3
|
|
1056
1056
|
|
1057
1057
|
if @processors
|
1058
1058
|
processors = []
|
1059
|
-
config['processors'] = processors
|
1060
1059
|
@processors.each do |processor_name, processor|
|
1061
1060
|
processors << processor.as_json(*a)
|
1062
1061
|
end
|
1062
|
+
config['processors'] = processors
|
1063
1063
|
end
|
1064
1064
|
|
1065
1065
|
config['meta'] = @meta if @meta
|
@@ -1144,17 +1144,11 @@ module OpenC3
|
|
1144
1144
|
# Update to new limits state
|
1145
1145
|
item.limits.state = limits_state
|
1146
1146
|
|
1147
|
-
if
|
1148
|
-
if
|
1149
|
-
@limits_change_callback.call(self, item, old_limits_state, value,
|
1150
|
-
|
1151
|
-
|
1152
|
-
if @limits_change_callback
|
1153
|
-
if item.limits.state.nil?
|
1154
|
-
@limits_change_callback.call(self, item, old_limits_state, value, false)
|
1155
|
-
else
|
1156
|
-
@limits_change_callback.call(self, item, old_limits_state, value, true)
|
1157
|
-
end
|
1147
|
+
if @limits_change_callback
|
1148
|
+
if item.limits.state.nil?
|
1149
|
+
@limits_change_callback.call(self, item, old_limits_state, value, false)
|
1150
|
+
else
|
1151
|
+
@limits_change_callback.call(self, item, old_limits_state, value, true)
|
1158
1152
|
end
|
1159
1153
|
end
|
1160
1154
|
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']
|
@@ -76,9 +76,6 @@ module OpenC3
|
|
76
76
|
# @return [Boolean] Whether this structure item can overlap another item in the same packet
|
77
77
|
attr_accessor :overlap
|
78
78
|
|
79
|
-
# A large buffer size in bits (1 Megabyte)
|
80
|
-
LARGE_BUFFER_SIZE_BITS = 1024 * 1024 * 8
|
81
|
-
|
82
79
|
# Create a StructureItem by setting all the attributes. It
|
83
80
|
# calls all the setter routines to do the attribute verification and then
|
84
81
|
# verifies the overall integrity.
|
@@ -135,14 +132,7 @@ module OpenC3
|
|
135
132
|
end
|
136
133
|
|
137
134
|
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
|
-
|
135
|
+
raise ArgumentError, "#{@name}: bit_offset must be an Integer" unless Integer === bit_offset
|
146
136
|
byte_aligned = ((bit_offset % 8) == 0)
|
147
137
|
if (@data_type == :FLOAT or @data_type == :STRING or @data_type == :BLOCK) and !byte_aligned
|
148
138
|
raise ArgumentError, "#{@name}: bit_offset for :FLOAT, :STRING, and :BLOCK items must be byte aligned"
|
@@ -156,18 +146,14 @@ module OpenC3
|
|
156
146
|
end
|
157
147
|
|
158
148
|
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
|
149
|
+
raise ArgumentError, "#{@name}: bit_size must be an Integer" unless Integer === bit_size
|
166
150
|
byte_multiple = ((bit_size % 8) == 0)
|
167
151
|
if bit_size <= 0 and (@data_type == :INT or @data_type == :UINT or @data_type == :FLOAT)
|
168
152
|
raise ArgumentError, "#{@name}: bit_size cannot be negative or zero for :INT, :UINT, and :FLOAT items: #{bit_size}"
|
169
153
|
end
|
170
|
-
|
154
|
+
if (@data_type == :STRING or @data_type == :BLOCK) and !byte_multiple
|
155
|
+
raise ArgumentError, "#{@name}: bit_size for STRING and BLOCK items must be byte multiples"
|
156
|
+
end
|
171
157
|
if @data_type == :FLOAT and bit_size != 32 and bit_size != 64
|
172
158
|
raise ArgumentError, "#{@name}: bit_size for FLOAT items must be 32 or 64. Given: #{bit_size}"
|
173
159
|
end
|
@@ -195,13 +181,7 @@ module OpenC3
|
|
195
181
|
|
196
182
|
def array_size=(array_size)
|
197
183
|
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
|
184
|
+
raise ArgumentError, "#{@name}: array_size must be an Integer" unless Integer === array_size
|
205
185
|
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
186
|
raise ArgumentError, "#{@name}: bit_size cannot be negative or zero for array items" if @bit_size <= 0
|
207
187
|
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}"
|