openc3 6.4.1 → 6.4.2
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/data/config/conversions.yaml +273 -0
- data/data/config/item_modifiers.yaml +7 -70
- data/data/config/parameter_modifiers.yaml +9 -69
- data/lib/openc3/api/api.rb +1 -1
- data/lib/openc3/conversions/unix_time_conversion.rb +2 -2
- data/lib/openc3/conversions/unix_time_formatted_conversion.rb +3 -3
- data/lib/openc3/conversions/unix_time_seconds_conversion.rb +3 -3
- data/lib/openc3/core_ext/time.rb +2 -9
- data/lib/openc3/microservices/cleanup_microservice.rb +2 -2
- data/lib/openc3/microservices/decom_microservice.rb +2 -2
- data/lib/openc3/microservices/interface_microservice.rb +3 -3
- data/lib/openc3/microservices/log_microservice.rb +4 -2
- data/lib/openc3/microservices/multi_microservice.rb +2 -2
- data/lib/openc3/microservices/periodic_microservice.rb +2 -2
- data/lib/openc3/microservices/reducer_microservice.rb +2 -2
- data/lib/openc3/microservices/router_microservice.rb +2 -2
- data/lib/openc3/microservices/scope_cleanup_microservice.rb +2 -2
- data/lib/openc3/microservices/text_log_microservice.rb +19 -6
- data/lib/openc3/models/script_status_model.rb +22 -4
- data/lib/openc3/models/target_model.rb +26 -4
- data/lib/openc3/packets/packet_config.rb +1 -1
- data/lib/openc3/script/autonomic.rb +359 -0
- data/lib/openc3/script/script.rb +1 -0
- data/lib/openc3/version.rb +5 -5
- data/templates/tool_angular/package.json +2 -2
- data/templates/tool_react/package.json +1 -1
- data/templates/tool_svelte/package.json +1 -1
- data/templates/tool_vue/package.json +3 -3
- data/templates/widget/package.json +2 -2
- metadata +3 -1
@@ -43,6 +43,7 @@ module OpenC3
|
|
43
43
|
@cycle_time = 600 unless @cycle_time # 10 minutes
|
44
44
|
@cycle_size = 50_000_000 unless @cycle_size # ~50 MB
|
45
45
|
|
46
|
+
@tlws = {}
|
46
47
|
@error_count = 0
|
47
48
|
@metric.set(name: 'text_log_total', value: @count, type: 'counter')
|
48
49
|
@metric.set(name: 'text_error_total', value: @error_count, type: 'counter')
|
@@ -50,15 +51,27 @@ module OpenC3
|
|
50
51
|
|
51
52
|
def run
|
52
53
|
setup_tlws()
|
54
|
+
|
55
|
+
individual_topics = []
|
56
|
+
@topics.each do |topic|
|
57
|
+
individual_topics << [topic]
|
58
|
+
end
|
59
|
+
|
53
60
|
while true
|
54
61
|
break if @cancel_thread
|
55
62
|
|
56
|
-
|
63
|
+
# Read each topic separately to support multiple redis shards
|
64
|
+
# This is needed with Redis cluster because the topics will likely be on different shards and we don't use {} in the topic names
|
65
|
+
individual_topics.each do |individual_topic|
|
57
66
|
break if @cancel_thread
|
67
|
+
# 500ms timeout - To support completing within 1 second with two topics (DEFAULT and NOSCOPE)
|
68
|
+
Topic.read_topics(individual_topic, nil, 500) do |topic, msg_id, msg_hash, redis|
|
69
|
+
break if @cancel_thread
|
58
70
|
|
59
|
-
|
60
|
-
|
61
|
-
|
71
|
+
log_data(topic, msg_id, msg_hash, redis)
|
72
|
+
@count += 1
|
73
|
+
@metric.set(name: 'text_log_total', value: @count, type: 'counter')
|
74
|
+
end
|
62
75
|
end
|
63
76
|
end
|
64
77
|
end
|
@@ -104,6 +117,6 @@ end
|
|
104
117
|
|
105
118
|
if __FILE__ == $0
|
106
119
|
OpenC3::TextLogMicroservice.run
|
107
|
-
ThreadManager.instance.shutdown
|
108
|
-
ThreadManager.instance.join
|
120
|
+
OpenC3::ThreadManager.instance.shutdown
|
121
|
+
OpenC3::ThreadManager.instance.join
|
109
122
|
end
|
@@ -69,9 +69,18 @@ module OpenC3
|
|
69
69
|
if type == "running"
|
70
70
|
keys = self.store.zrevrange("#{RUNNING_PRIMARY_KEY}__#{scope}__LIST", offset.to_i, offset.to_i + limit.to_i - 1)
|
71
71
|
return [] if keys.empty?
|
72
|
-
result =
|
72
|
+
result = []
|
73
|
+
if $openc3_redis_cluster
|
74
|
+
# No pipelining for cluster mode
|
75
|
+
# because it requires using the same shard for all keys
|
73
76
|
keys.each do |key|
|
74
|
-
self.store.hget("#{RUNNING_PRIMARY_KEY}__#{scope}", key)
|
77
|
+
result << self.store.hget("#{RUNNING_PRIMARY_KEY}__#{scope}", key)
|
78
|
+
end
|
79
|
+
else
|
80
|
+
result = self.store.redis_pool.pipelined do
|
81
|
+
keys.each do |key|
|
82
|
+
self.store.hget("#{RUNNING_PRIMARY_KEY}__#{scope}", key)
|
83
|
+
end
|
75
84
|
end
|
76
85
|
end
|
77
86
|
result = result.map do |r|
|
@@ -85,9 +94,18 @@ module OpenC3
|
|
85
94
|
else
|
86
95
|
keys = self.store.zrevrange("#{COMPLETED_PRIMARY_KEY}__#{scope}__LIST", offset.to_i, offset.to_i + limit.to_i - 1)
|
87
96
|
return [] if keys.empty?
|
88
|
-
result =
|
97
|
+
result = []
|
98
|
+
if $openc3_redis_cluster
|
99
|
+
# No pipelining for cluster mode
|
100
|
+
# because it requires using the same shard for all keys
|
89
101
|
keys.each do |key|
|
90
|
-
self.store.hget("#{COMPLETED_PRIMARY_KEY}__#{scope}", key)
|
102
|
+
result << self.store.hget("#{COMPLETED_PRIMARY_KEY}__#{scope}", key)
|
103
|
+
end
|
104
|
+
else
|
105
|
+
result = self.store.redis_pool.pipelined do
|
106
|
+
keys.each do |key|
|
107
|
+
self.store.hget("#{COMPLETED_PRIMARY_KEY}__#{scope}", key)
|
108
|
+
end
|
91
109
|
end
|
92
110
|
end
|
93
111
|
result = result.map do |r|
|
@@ -1300,11 +1300,22 @@ module OpenC3
|
|
1300
1300
|
end
|
1301
1301
|
|
1302
1302
|
def self.get_telemetry_counts(target_packets, scope:)
|
1303
|
-
result =
|
1303
|
+
result = []
|
1304
|
+
if $openc3_redis_cluster
|
1305
|
+
# No pipelining for cluster mode
|
1306
|
+
# because it requires using the same shard for all keys
|
1304
1307
|
target_packets.each do |target_name, packet_name|
|
1305
1308
|
target_name = target_name.upcase
|
1306
1309
|
packet_name = packet_name.upcase
|
1307
|
-
Store.hget("#{scope}__TELEMETRYCNTS__{#{target_name}}", packet_name)
|
1310
|
+
result << Store.hget("#{scope}__TELEMETRYCNTS__{#{target_name}}", packet_name)
|
1311
|
+
end
|
1312
|
+
else
|
1313
|
+
result = Store.redis_pool.pipelined do
|
1314
|
+
target_packets.each do |target_name, packet_name|
|
1315
|
+
target_name = target_name.upcase
|
1316
|
+
packet_name = packet_name.upcase
|
1317
|
+
Store.hget("#{scope}__TELEMETRYCNTS__{#{target_name}}", packet_name)
|
1318
|
+
end
|
1308
1319
|
end
|
1309
1320
|
end
|
1310
1321
|
counts = []
|
@@ -1351,11 +1362,22 @@ module OpenC3
|
|
1351
1362
|
end
|
1352
1363
|
|
1353
1364
|
def self.get_command_counts(target_packets, scope:)
|
1354
|
-
result =
|
1365
|
+
result = []
|
1366
|
+
if $openc3_redis_cluster
|
1367
|
+
# No pipelining for cluster mode
|
1368
|
+
# because it requires using the same shard for all keys
|
1355
1369
|
target_packets.each do |target_name, packet_name|
|
1356
1370
|
target_name = target_name.upcase
|
1357
1371
|
packet_name = packet_name.upcase
|
1358
|
-
Store.hget("#{scope}__COMMANDCNTS__{#{target_name}}", packet_name)
|
1372
|
+
result << Store.hget("#{scope}__COMMANDCNTS__{#{target_name}}", packet_name)
|
1373
|
+
end
|
1374
|
+
else
|
1375
|
+
result = Store.redis_pool.pipelined do
|
1376
|
+
target_packets.each do |target_name, packet_name|
|
1377
|
+
target_name = target_name.upcase
|
1378
|
+
packet_name = packet_name.upcase
|
1379
|
+
Store.hget("#{scope}__COMMANDCNTS__{#{target_name}}", packet_name)
|
1380
|
+
end
|
1359
1381
|
end
|
1360
1382
|
end
|
1361
1383
|
counts = []
|
@@ -662,7 +662,7 @@ module OpenC3
|
|
662
662
|
@converted_bit_size = nil
|
663
663
|
if params[0]
|
664
664
|
@converted_type = params[0].upcase.intern
|
665
|
-
raise parser.error("Invalid converted_type: #{@converted_type}.") unless [:INT, :UINT, :FLOAT, :STRING, :BLOCK, :
|
665
|
+
raise parser.error("Invalid converted_type: #{@converted_type}.") unless [:INT, :UINT, :FLOAT, :STRING, :BLOCK, :TIME].include? @converted_type
|
666
666
|
end
|
667
667
|
@converted_bit_size = Integer(params[1]) if params[1]
|
668
668
|
if @converted_type.nil? or @converted_bit_size.nil?
|
@@ -0,0 +1,359 @@
|
|
1
|
+
# encoding: ascii-8bit
|
2
|
+
|
3
|
+
# Copyright 2025 OpenC3, Inc.
|
4
|
+
# All Rights Reserved.
|
5
|
+
#
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
7
|
+
# under the terms of the GNU Affero General Public License
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# This file may also be used under the terms of a commercial license
|
17
|
+
# if purchased from OpenC3, Inc.
|
18
|
+
|
19
|
+
module OpenC3
|
20
|
+
module Script
|
21
|
+
private
|
22
|
+
|
23
|
+
# Group Methods
|
24
|
+
def autonomic_group_list(scope: $openc3_scope)
|
25
|
+
begin
|
26
|
+
endpoint = "/openc3-api/autonomic/group"
|
27
|
+
response = $api_server.request('get', endpoint, scope: scope)
|
28
|
+
if response.nil? || response.status != 200
|
29
|
+
raise "Unexpected response to autonomic_group_list: #{response.inspect}"
|
30
|
+
end
|
31
|
+
return JSON.parse(response.body)
|
32
|
+
rescue => error
|
33
|
+
raise "autonomic_group_list failed due to #{error.formatted}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def autonomic_group_create(name, scope: $openc3_scope)
|
38
|
+
begin
|
39
|
+
endpoint = "/openc3-api/autonomic/group"
|
40
|
+
response = $api_server.request('post', endpoint, data: { name: name }, json: true, scope: scope)
|
41
|
+
if response.nil? || response.status != 201
|
42
|
+
if response
|
43
|
+
parsed = JSON.parse(response.body)
|
44
|
+
raise "autonomic_group_create error: #{parsed['message']}"
|
45
|
+
else
|
46
|
+
raise "autonomic_group_create failed"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
return JSON.parse(response.body)
|
50
|
+
rescue => error
|
51
|
+
raise "autonomic_group_create failed due to #{error.formatted}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def autonomic_group_show(name, scope: $openc3_scope)
|
56
|
+
begin
|
57
|
+
endpoint = "/openc3-api/autonomic/group/#{name}"
|
58
|
+
response = $api_server.request('get', endpoint, scope: scope)
|
59
|
+
if response.nil? || response.status != 200
|
60
|
+
raise "Unexpected response to autonomic_group_show: #{response.inspect}"
|
61
|
+
end
|
62
|
+
return JSON.parse(response.body)
|
63
|
+
rescue => error
|
64
|
+
raise "autonomic_group_show failed due to #{error.formatted}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def autonomic_group_destroy(name, scope: $openc3_scope)
|
69
|
+
begin
|
70
|
+
endpoint = "/openc3-api/autonomic/group/#{name}"
|
71
|
+
response = $api_server.request('delete', endpoint, scope: scope)
|
72
|
+
if response.nil? || response.status != 200
|
73
|
+
if response
|
74
|
+
parsed = JSON.parse(response.body)
|
75
|
+
raise "autonomic_group_destroy error: #{parsed['error']}"
|
76
|
+
else
|
77
|
+
raise "autonomic_group_destroy failed"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
return
|
81
|
+
rescue => error
|
82
|
+
raise "autonomic_group_destroy failed due to #{error.formatted}"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# Trigger Methods
|
87
|
+
def autonomic_trigger_list(group: 'DEFAULT', scope: $openc3_scope)
|
88
|
+
begin
|
89
|
+
endpoint = "/openc3-api/autonomic/#{group}/trigger"
|
90
|
+
response = $api_server.request('get', endpoint, scope: scope)
|
91
|
+
if response.nil? || response.status != 200
|
92
|
+
raise "Unexpected response to autonomic_trigger_list: #{response.inspect}"
|
93
|
+
end
|
94
|
+
return JSON.parse(response.body)
|
95
|
+
rescue => error
|
96
|
+
raise "autonomic_trigger_list failed due to #{error.formatted}"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def autonomic_trigger_create(left:, operator:, right:, group: 'DEFAULT', scope: $openc3_scope)
|
101
|
+
begin
|
102
|
+
endpoint = "/openc3-api/autonomic/#{group}/trigger"
|
103
|
+
config = {
|
104
|
+
'group' => group,
|
105
|
+
'left' => left,
|
106
|
+
'operator' => operator,
|
107
|
+
'right' => right
|
108
|
+
}
|
109
|
+
response = $api_server.request('post', endpoint, data: config, json: true, scope: scope)
|
110
|
+
if response.nil? || response.status != 201
|
111
|
+
if response
|
112
|
+
parsed = JSON.parse(response.body)
|
113
|
+
raise "autonomic_trigger_create error: #{parsed['error']}"
|
114
|
+
else
|
115
|
+
raise "autonomic_trigger_create failed"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
return JSON.parse(response.body)
|
119
|
+
rescue => error
|
120
|
+
raise "autonomic_trigger_create failed due to #{error.formatted}"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def autonomic_trigger_show(name, group: 'DEFAULT', scope: $openc3_scope)
|
125
|
+
begin
|
126
|
+
endpoint = "/openc3-api/autonomic/#{group}/trigger/#{name}"
|
127
|
+
response = $api_server.request('get', endpoint, scope: scope)
|
128
|
+
if response.nil? || response.status != 200
|
129
|
+
raise "Unexpected response to autonomic_trigger_show: #{response.inspect}"
|
130
|
+
end
|
131
|
+
return JSON.parse(response.body)
|
132
|
+
rescue => error
|
133
|
+
raise "autonomic_trigger_show failed due to #{error.formatted}"
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def autonomic_trigger_enable(name, group: 'DEFAULT', scope: $openc3_scope)
|
138
|
+
begin
|
139
|
+
endpoint = "/openc3-api/autonomic/#{group}/trigger/#{name}/enable"
|
140
|
+
response = $api_server.request('post', endpoint, json: true, scope: scope)
|
141
|
+
if response.nil? || response.status != 200
|
142
|
+
if response
|
143
|
+
parsed = JSON.parse(response.body)
|
144
|
+
raise "autonomic_trigger_enable error: #{parsed['error']}"
|
145
|
+
else
|
146
|
+
raise "autonomic_trigger_enable failed"
|
147
|
+
end
|
148
|
+
end
|
149
|
+
return
|
150
|
+
rescue => error
|
151
|
+
raise "autonomic_trigger_enable failed due to #{error.formatted}"
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def autonomic_trigger_disable(name, group: 'DEFAULT', scope: $openc3_scope)
|
156
|
+
begin
|
157
|
+
endpoint = "/openc3-api/autonomic/#{group}/trigger/#{name}/disable"
|
158
|
+
response = $api_server.request('post', endpoint, json: true, scope: scope)
|
159
|
+
if response.nil? || response.status != 200
|
160
|
+
if response
|
161
|
+
parsed = JSON.parse(response.body)
|
162
|
+
raise "autonomic_trigger_disable error: #{parsed['error']}"
|
163
|
+
else
|
164
|
+
raise "autonomic_trigger_disable failed"
|
165
|
+
end
|
166
|
+
end
|
167
|
+
return
|
168
|
+
rescue => error
|
169
|
+
raise "autonomic_trigger_disable failed due to #{error.formatted}"
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def autonomic_trigger_update(name, group: 'DEFAULT', left: nil, operator: nil, right: nil, scope: $openc3_scope)
|
174
|
+
begin
|
175
|
+
endpoint = "/openc3-api/autonomic/#{group}/trigger/#{name}"
|
176
|
+
config = {}
|
177
|
+
config['left'] = left if left
|
178
|
+
config['operator'] = operator if operator
|
179
|
+
config['right'] = right if right
|
180
|
+
response = $api_server.request('put', endpoint, data: config, json: true, scope: scope)
|
181
|
+
if response.nil? || response.status != 200
|
182
|
+
if response
|
183
|
+
parsed = JSON.parse(response.body)
|
184
|
+
raise "autonomic_trigger_update error: #{parsed['error']}"
|
185
|
+
else
|
186
|
+
raise "autonomic_trigger_update failed"
|
187
|
+
end
|
188
|
+
end
|
189
|
+
return JSON.parse(response.body)
|
190
|
+
rescue => error
|
191
|
+
raise "autonomic_trigger_update failed due to #{error.formatted}"
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def autonomic_trigger_destroy(name, group: 'DEFAULT', scope: $openc3_scope)
|
196
|
+
begin
|
197
|
+
endpoint = "/openc3-api/autonomic/#{group}/trigger/#{name}"
|
198
|
+
response = $api_server.request('delete', endpoint, scope: scope)
|
199
|
+
if response.nil? || response.status != 200
|
200
|
+
if response
|
201
|
+
parsed = JSON.parse(response.body)
|
202
|
+
raise "autonomic_trigger_destroy error: #{parsed['error']}"
|
203
|
+
else
|
204
|
+
raise "autonomic_trigger_destroy failed"
|
205
|
+
end
|
206
|
+
end
|
207
|
+
return
|
208
|
+
rescue => error
|
209
|
+
raise "autonomic_trigger_destroy failed due to #{error.formatted}"
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
# Reaction Methods
|
214
|
+
def autonomic_reaction_list(scope: $openc3_scope)
|
215
|
+
begin
|
216
|
+
endpoint = "/openc3-api/autonomic/reaction"
|
217
|
+
response = $api_server.request('get', endpoint, scope: scope)
|
218
|
+
if response.nil? || response.status != 200
|
219
|
+
raise "Unexpected response to autonomic_reaction_list: #{response.inspect}"
|
220
|
+
end
|
221
|
+
return JSON.parse(response.body)
|
222
|
+
rescue => error
|
223
|
+
raise "autonomic_reaction_list failed due to #{error.formatted}"
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
def autonomic_reaction_create(triggers:, actions:, trigger_level: 'EDGE', snooze: 0, scope: $openc3_scope)
|
228
|
+
begin
|
229
|
+
endpoint = "/openc3-api/autonomic/reaction"
|
230
|
+
config = {
|
231
|
+
'triggers' => triggers,
|
232
|
+
'actions' => actions,
|
233
|
+
'trigger_level' => trigger_level,
|
234
|
+
'snooze' => snooze,
|
235
|
+
}
|
236
|
+
response = $api_server.request('post', endpoint, data: config, json: true, scope: scope)
|
237
|
+
if response.nil? || response.status != 201
|
238
|
+
if response
|
239
|
+
parsed = JSON.parse(response.body)
|
240
|
+
raise "autonomic_reaction_create error: #{parsed['error']}"
|
241
|
+
else
|
242
|
+
raise "autonomic_reaction_create failed"
|
243
|
+
end
|
244
|
+
end
|
245
|
+
return JSON.parse(response.body)
|
246
|
+
rescue => error
|
247
|
+
raise "autonomic_reaction_create failed due to #{error.formatted}"
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
def autonomic_reaction_show(name, scope: $openc3_scope)
|
252
|
+
begin
|
253
|
+
endpoint = "/openc3-api/autonomic/reaction/#{name}"
|
254
|
+
response = $api_server.request('get', endpoint, scope: scope)
|
255
|
+
if response.nil? || response.status != 200
|
256
|
+
raise "Unexpected response to autonomic_reaction_show: #{response.inspect}"
|
257
|
+
end
|
258
|
+
return JSON.parse(response.body)
|
259
|
+
rescue => error
|
260
|
+
raise "autonomic_reaction_show failed due to #{error.formatted}"
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
def autonomic_reaction_enable(name, scope: $openc3_scope)
|
265
|
+
begin
|
266
|
+
endpoint = "/openc3-api/autonomic/reaction/#{name}/enable"
|
267
|
+
response = $api_server.request('post', endpoint, json: true, scope: scope)
|
268
|
+
if response.nil? || response.status != 200
|
269
|
+
if response
|
270
|
+
parsed = JSON.parse(response.body)
|
271
|
+
raise "autonomic_reaction_enable error: #{parsed['error']}"
|
272
|
+
else
|
273
|
+
raise "autonomic_reaction_enable failed"
|
274
|
+
end
|
275
|
+
end
|
276
|
+
return
|
277
|
+
rescue => error
|
278
|
+
raise "autonomic_reaction_enable failed due to #{error.formatted}"
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
def autonomic_reaction_disable(name, scope: $openc3_scope)
|
283
|
+
begin
|
284
|
+
endpoint = "/openc3-api/autonomic/reaction/#{name}/disable"
|
285
|
+
response = $api_server.request('post', endpoint, json: true, scope: scope)
|
286
|
+
if response.nil? || response.status != 200
|
287
|
+
if response
|
288
|
+
parsed = JSON.parse(response.body)
|
289
|
+
raise "autonomic_reaction_disable error: #{parsed['error']}"
|
290
|
+
else
|
291
|
+
raise "autonomic_reaction_disable failed"
|
292
|
+
end
|
293
|
+
end
|
294
|
+
return
|
295
|
+
rescue => error
|
296
|
+
raise "autonomic_reaction_disable failed due to #{error.formatted}"
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
300
|
+
def autonomic_reaction_execute(name, scope: $openc3_scope)
|
301
|
+
begin
|
302
|
+
endpoint = "/openc3-api/autonomic/reaction/#{name}/execute"
|
303
|
+
response = $api_server.request('post', endpoint, json: true, scope: scope)
|
304
|
+
if response.nil? || response.status != 200
|
305
|
+
if response
|
306
|
+
parsed = JSON.parse(response.body)
|
307
|
+
raise "autonomic_reaction_execute error: #{parsed['error']}"
|
308
|
+
else
|
309
|
+
raise "autonomic_reaction_execute failed"
|
310
|
+
end
|
311
|
+
end
|
312
|
+
return
|
313
|
+
rescue => error
|
314
|
+
raise "autonomic_reaction_execute failed due to #{error.formatted}"
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
def autonomic_reaction_update(name, triggers: nil, actions: nil, trigger_level: nil, snooze: nil, scope: $openc3_scope)
|
319
|
+
begin
|
320
|
+
endpoint = "/openc3-api/autonomic/reaction/#{name}"
|
321
|
+
config = {}
|
322
|
+
config['triggers'] = triggers if triggers
|
323
|
+
config['actions'] = actions if actions
|
324
|
+
config['trigger_level'] = trigger_level if trigger_level
|
325
|
+
config['snooze'] = snooze if snooze
|
326
|
+
response = $api_server.request('put', endpoint, data: config, json: true, scope: scope)
|
327
|
+
if response.nil? || response.status != 200
|
328
|
+
if response
|
329
|
+
parsed = JSON.parse(response.body)
|
330
|
+
raise "autonomic_reaction_update error: #{parsed['error']}"
|
331
|
+
else
|
332
|
+
raise "autonomic_reaction_update failed"
|
333
|
+
end
|
334
|
+
end
|
335
|
+
return JSON.parse(response.body)
|
336
|
+
rescue => error
|
337
|
+
raise "autonomic_reaction_update failed due to #{error.formatted}"
|
338
|
+
end
|
339
|
+
end
|
340
|
+
|
341
|
+
def autonomic_reaction_destroy(name, scope: $openc3_scope)
|
342
|
+
begin
|
343
|
+
endpoint = "/openc3-api/autonomic/reaction/#{name}"
|
344
|
+
response = $api_server.request('delete', endpoint, scope: scope)
|
345
|
+
if response.nil? || response.status != 200
|
346
|
+
if response
|
347
|
+
parsed = JSON.parse(response.body)
|
348
|
+
raise "autonomic_reaction_destroy error: #{parsed['error']}"
|
349
|
+
else
|
350
|
+
raise "autonomic_reaction_destroy failed"
|
351
|
+
end
|
352
|
+
end
|
353
|
+
return
|
354
|
+
rescue => error
|
355
|
+
raise "autonomic_reaction_destroy failed due to #{error.formatted}"
|
356
|
+
end
|
357
|
+
end
|
358
|
+
end
|
359
|
+
end
|
data/lib/openc3/script/script.rb
CHANGED
@@ -24,6 +24,7 @@ require 'openc3'
|
|
24
24
|
require 'openc3/api/api'
|
25
25
|
require 'openc3/io/json_drb_object'
|
26
26
|
require 'openc3/script/api_shared'
|
27
|
+
require 'openc3/script/autonomic'
|
27
28
|
require 'openc3/script/calendar'
|
28
29
|
require 'openc3/script/commands'
|
29
30
|
require 'openc3/script/critical_cmd'
|
data/lib/openc3/version.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# encoding: ascii-8bit
|
2
2
|
|
3
|
-
OPENC3_VERSION = '6.4.
|
3
|
+
OPENC3_VERSION = '6.4.2'
|
4
4
|
module OpenC3
|
5
5
|
module Version
|
6
6
|
MAJOR = '6'
|
7
7
|
MINOR = '4'
|
8
|
-
PATCH = '
|
8
|
+
PATCH = '2'
|
9
9
|
OTHER = ''
|
10
|
-
BUILD = '
|
10
|
+
BUILD = '8b7b7389663bce219219fe1b42679119a63331f1'
|
11
11
|
end
|
12
|
-
VERSION = '6.4.
|
13
|
-
GEM_VERSION = '6.4.
|
12
|
+
VERSION = '6.4.2'
|
13
|
+
GEM_VERSION = '6.4.2'
|
14
14
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "<%= tool_name %>",
|
3
|
-
"version": "6.4.
|
3
|
+
"version": "6.4.2",
|
4
4
|
"scripts": {
|
5
5
|
"ng": "ng",
|
6
6
|
"start": "ng serve",
|
@@ -23,7 +23,7 @@
|
|
23
23
|
"@angular/platform-browser-dynamic": "^18.2.6",
|
24
24
|
"@angular/router": "^18.2.6",
|
25
25
|
"@astrouxds/astro-web-components": "^7.24.0",
|
26
|
-
"@openc3/js-common": "6.4.
|
26
|
+
"@openc3/js-common": "6.4.2",
|
27
27
|
"rxjs": "~7.8.0",
|
28
28
|
"single-spa": "^5.9.5",
|
29
29
|
"single-spa-angular": "^9.2.0",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "<%= tool_name %>",
|
3
|
-
"version": "6.4.
|
3
|
+
"version": "6.4.2",
|
4
4
|
"private": true,
|
5
5
|
"type": "module",
|
6
6
|
"scripts": {
|
@@ -11,8 +11,8 @@
|
|
11
11
|
},
|
12
12
|
"dependencies": {
|
13
13
|
"@astrouxds/astro-web-components": "^7.24.0",
|
14
|
-
"@openc3/js-common": "6.4.
|
15
|
-
"@openc3/vue-common": "6.4.
|
14
|
+
"@openc3/js-common": "6.4.2",
|
15
|
+
"@openc3/vue-common": "6.4.2",
|
16
16
|
"axios": "^1.7.7",
|
17
17
|
"date-fns": "^4.1.0",
|
18
18
|
"lodash": "^4.17.21",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "<%= widget_name %>",
|
3
|
-
"version": "6.4.
|
3
|
+
"version": "6.4.2",
|
4
4
|
"private": true,
|
5
5
|
"type": "module",
|
6
6
|
"scripts": {
|
@@ -8,7 +8,7 @@
|
|
8
8
|
},
|
9
9
|
"dependencies": {
|
10
10
|
"@astrouxds/astro-web-components": "^7.24.0",
|
11
|
-
"@openc3/vue-common": "6.4.
|
11
|
+
"@openc3/vue-common": "6.4.2",
|
12
12
|
"vuetify": "^3.7.1"
|
13
13
|
},
|
14
14
|
"devDependencies": {
|
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: 6.4.
|
4
|
+
version: 6.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Melton
|
@@ -816,6 +816,7 @@ files:
|
|
816
816
|
- data/config/command.yaml
|
817
817
|
- data/config/command_modifiers.yaml
|
818
818
|
- data/config/command_telemetry.yaml
|
819
|
+
- data/config/conversions.yaml
|
819
820
|
- data/config/graph_settings.yaml
|
820
821
|
- data/config/interface_modifiers.yaml
|
821
822
|
- data/config/item_modifiers.yaml
|
@@ -1075,6 +1076,7 @@ files:
|
|
1075
1076
|
- lib/openc3/processors/watermark_processor.rb
|
1076
1077
|
- lib/openc3/script.rb
|
1077
1078
|
- lib/openc3/script/api_shared.rb
|
1079
|
+
- lib/openc3/script/autonomic.rb
|
1078
1080
|
- lib/openc3/script/calendar.rb
|
1079
1081
|
- lib/openc3/script/commands.rb
|
1080
1082
|
- lib/openc3/script/critical_cmd.rb
|