openc3 5.1.1 → 5.2.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.
- checksums.yaml +4 -4
- data/bin/openc3cli +48 -9
- data/data/config/interface_modifiers.yaml +14 -0
- data/data/config/parameter_modifiers.yaml +5 -3
- data/data/config/screen.yaml +12 -8
- data/data/config/target.yaml +33 -0
- data/ext/openc3/ext/config_parser/config_parser.c +66 -63
- data/ext/openc3/ext/packet/packet.c +1 -4
- data/lib/openc3/api/README.md +5 -0
- data/lib/openc3/api/api.rb +3 -1
- data/lib/openc3/api/cmd_api.rb +43 -112
- data/lib/openc3/api/interface_api.rb +3 -3
- data/lib/openc3/api/offline_access_api.rb +78 -0
- data/lib/openc3/api/settings_api.rb +3 -1
- data/lib/openc3/api/stash_api.rb +63 -0
- data/lib/openc3/api/target_api.rb +4 -5
- data/lib/openc3/config/config_parser.rb +47 -47
- data/lib/openc3/interfaces/interface.rb +11 -1
- data/lib/openc3/interfaces/protocols/burst_protocol.rb +30 -16
- data/lib/openc3/interfaces/protocols/fixed_protocol.rb +8 -2
- data/lib/openc3/interfaces/protocols/ignore_packet_protocol.rb +2 -2
- data/lib/openc3/interfaces/protocols/override_protocol.rb +2 -2
- data/lib/openc3/interfaces/tcpip_server_interface.rb +3 -1
- data/lib/openc3/io/json_api_object.rb +30 -9
- data/lib/openc3/io/json_drb.rb +6 -1
- data/lib/openc3/io/json_drb_object.rb +18 -9
- data/lib/openc3/io/json_rpc.rb +5 -3
- data/lib/openc3/logs/buffered_packet_log_writer.rb +1 -1
- data/lib/openc3/logs/log_writer.rb +8 -2
- data/lib/openc3/microservices/cleanup_microservice.rb +3 -3
- data/lib/openc3/microservices/decom_microservice.rb +8 -8
- data/lib/openc3/microservices/interface_microservice.rb +86 -71
- data/lib/openc3/microservices/log_microservice.rb +5 -3
- data/lib/openc3/microservices/microservice.rb +18 -14
- data/lib/openc3/microservices/multi_microservice.rb +62 -0
- data/lib/openc3/microservices/periodic_microservice.rb +58 -0
- data/lib/openc3/microservices/reaction_microservice.rb +61 -47
- data/lib/openc3/microservices/reducer_microservice.rb +64 -40
- data/lib/openc3/microservices/router_microservice.rb +4 -4
- data/lib/openc3/microservices/text_log_microservice.rb +2 -2
- data/lib/openc3/microservices/timeline_microservice.rb +44 -30
- data/lib/openc3/microservices/trigger_group_microservice.rb +39 -36
- data/lib/openc3/migrations/20221202214600_add_target_names.rb +30 -0
- data/lib/openc3/migrations/20221210174900_convert_to_multi.rb +65 -0
- data/lib/openc3/models/cvt_model.rb +1 -1
- data/lib/openc3/models/gem_model.rb +24 -20
- data/lib/openc3/models/interface_model.rb +69 -35
- data/lib/openc3/models/metadata_model.rb +1 -1
- data/lib/openc3/models/microservice_model.rb +7 -24
- data/lib/openc3/models/migration_model.rb +52 -0
- data/lib/openc3/models/model.rb +2 -7
- data/lib/openc3/models/note_model.rb +1 -1
- data/lib/openc3/models/offline_access_model.rb +55 -0
- data/lib/openc3/models/plugin_model.rb +12 -3
- data/lib/openc3/models/reaction_model.rb +6 -2
- data/lib/openc3/models/scope_model.rb +89 -13
- data/lib/openc3/models/settings_model.rb +1 -1
- data/lib/openc3/models/stash_model.rb +53 -0
- data/lib/openc3/models/target_model.rb +301 -130
- data/lib/openc3/models/tool_model.rb +1 -12
- data/lib/openc3/models/widget_model.rb +1 -6
- data/lib/openc3/operators/microservice_operator.rb +45 -6
- data/lib/openc3/operators/operator.rb +27 -5
- data/lib/openc3/packets/commands.rb +1 -25
- data/lib/openc3/packets/limits.rb +0 -75
- data/lib/openc3/packets/packet.rb +0 -28
- data/lib/openc3/packets/packet_item.rb +23 -0
- data/lib/openc3/packets/packet_item_limits.rb +2 -2
- data/lib/openc3/packets/parsers/state_parser.rb +10 -6
- data/lib/openc3/packets/telemetry.rb +1 -45
- data/lib/openc3/script/commands.rb +41 -71
- data/lib/openc3/script/extract.rb +15 -1
- data/lib/openc3/script/{calendar.rb → metadata.rb} +42 -17
- data/lib/openc3/script/script.rb +13 -5
- data/lib/openc3/script/storage.rb +3 -1
- data/lib/openc3/system/system.rb +19 -17
- data/lib/openc3/tools/cmd_tlm_server/interface_thread.rb +4 -4
- data/lib/openc3/top_level.rb +3 -3
- data/lib/openc3/topics/command_decom_topic.rb +2 -2
- data/lib/openc3/topics/command_topic.rb +7 -6
- data/lib/openc3/topics/interface_topic.rb +2 -2
- data/lib/openc3/topics/router_topic.rb +1 -1
- data/lib/openc3/topics/telemetry_topic.rb +2 -1
- data/lib/openc3/utilities/authentication.rb +35 -14
- data/lib/openc3/utilities/aws_bucket.rb +4 -3
- data/lib/openc3/utilities/bucket.rb +4 -2
- data/lib/openc3/utilities/bucket_file_cache.rb +3 -8
- data/lib/openc3/utilities/bucket_utilities.rb +77 -15
- data/lib/openc3/utilities/local_mode.rb +12 -9
- data/lib/openc3/utilities/logger.rb +17 -9
- data/lib/openc3/utilities/message_log.rb +6 -5
- data/lib/openc3/utilities/migration.rb +22 -0
- data/lib/openc3/utilities/store_autoload.rb +7 -5
- data/lib/openc3/utilities/target_file.rb +9 -7
- data/lib/openc3/version.rb +6 -6
- data/lib/openc3.rb +2 -1
- metadata +14 -3
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
require 'openc3/version'
|
|
24
24
|
require 'openc3/models/model'
|
|
25
|
+
require 'openc3/models/plugin_model'
|
|
25
26
|
require 'openc3/models/microservice_model'
|
|
26
27
|
require 'openc3/models/settings_model'
|
|
27
28
|
|
|
@@ -29,6 +30,8 @@ module OpenC3
|
|
|
29
30
|
class ScopeModel < Model
|
|
30
31
|
PRIMARY_KEY = 'openc3_scopes'
|
|
31
32
|
|
|
33
|
+
attr_accessor :children
|
|
34
|
+
|
|
32
35
|
# NOTE: The following three class methods are used by the ModelController
|
|
33
36
|
# and are reimplemented to enable various Model class methods to work
|
|
34
37
|
def self.get(name:, scope: nil)
|
|
@@ -62,6 +65,7 @@ module OpenC3
|
|
|
62
65
|
|
|
63
66
|
def initialize(name:, updated_at: nil, scope: nil)
|
|
64
67
|
super(PRIMARY_KEY, name: name, scope: name, updated_at: updated_at)
|
|
68
|
+
@children = []
|
|
65
69
|
end
|
|
66
70
|
|
|
67
71
|
def create(update: false, force: false)
|
|
@@ -89,15 +93,7 @@ module OpenC3
|
|
|
89
93
|
'updated_at' => @updated_at }
|
|
90
94
|
end
|
|
91
95
|
|
|
92
|
-
def
|
|
93
|
-
seed_database()
|
|
94
|
-
ConfigTopic.initialize_stream(@scope)
|
|
95
|
-
|
|
96
|
-
# Create UNKNOWN target for display of unknown data
|
|
97
|
-
model = TargetModel.new(name: "UNKNOWN", scope: @scope)
|
|
98
|
-
model.create
|
|
99
|
-
|
|
100
|
-
# OpenC3 Log Microservice
|
|
96
|
+
def deploy_openc3_log_messages_microservice(gem_path, variables, parent)
|
|
101
97
|
microservice_name = "#{@scope}__OPENC3__LOG"
|
|
102
98
|
microservice = MicroserviceModel.new(
|
|
103
99
|
name: microservice_name,
|
|
@@ -109,13 +105,16 @@ module OpenC3
|
|
|
109
105
|
# ["CYCLE_SIZE", "50_000_000"] # Keep at most ~50MB per log
|
|
110
106
|
],
|
|
111
107
|
topics: ["#{@scope}__openc3_log_messages"],
|
|
108
|
+
parent: parent,
|
|
112
109
|
scope: @scope
|
|
113
110
|
)
|
|
114
111
|
microservice.create
|
|
115
112
|
microservice.deploy(gem_path, variables)
|
|
113
|
+
@children << microservice_name if parent
|
|
116
114
|
Logger.info "Configured microservice #{microservice_name}"
|
|
115
|
+
end
|
|
117
116
|
|
|
118
|
-
|
|
117
|
+
def deploy_openc3_notifications_microservice(gem_path, variables, parent)
|
|
119
118
|
microservice_name = "#{@scope}__NOTIFICATION__LOG"
|
|
120
119
|
microservice = MicroserviceModel.new(
|
|
121
120
|
name: microservice_name,
|
|
@@ -126,13 +125,16 @@ module OpenC3
|
|
|
126
125
|
["CYCLE_TIME", "3600"], # Keep at most 1 hour per log
|
|
127
126
|
],
|
|
128
127
|
topics: ["#{@scope}__openc3_notifications"],
|
|
128
|
+
parent: parent,
|
|
129
129
|
scope: @scope
|
|
130
130
|
)
|
|
131
131
|
microservice.create
|
|
132
132
|
microservice.deploy(gem_path, variables)
|
|
133
|
+
@children << microservice_name if parent
|
|
133
134
|
Logger.info "Configured microservice #{microservice_name}"
|
|
135
|
+
end
|
|
134
136
|
|
|
135
|
-
|
|
137
|
+
def deploy_unknown_commandlog_microservice(gem_path, variables, parent)
|
|
136
138
|
Topic.initialize_streams(["#{@scope}__COMMAND__{UNKNOWN}__UNKNOWN"])
|
|
137
139
|
microservice_name = "#{@scope}__COMMANDLOG__UNKNOWN"
|
|
138
140
|
microservice = MicroserviceModel.new(
|
|
@@ -146,13 +148,16 @@ module OpenC3
|
|
|
146
148
|
],
|
|
147
149
|
topics: ["#{@scope}__COMMAND__{UNKNOWN}__UNKNOWN"],
|
|
148
150
|
target_names: [],
|
|
151
|
+
parent: parent,
|
|
149
152
|
scope: @scope
|
|
150
153
|
)
|
|
151
154
|
microservice.create
|
|
152
155
|
microservice.deploy(gem_path, variables)
|
|
156
|
+
@children << microservice_name if parent
|
|
153
157
|
Logger.info "Configured microservice #{microservice_name}"
|
|
158
|
+
end
|
|
154
159
|
|
|
155
|
-
|
|
160
|
+
def deploy_unknown_packetlog_microservice(gem_path, variables, parent)
|
|
156
161
|
Topic.initialize_streams(["#{@scope}__TELEMETRY__{UNKNOWN}__UNKNOWN"])
|
|
157
162
|
microservice_name = "#{@scope}__PACKETLOG__UNKNOWN"
|
|
158
163
|
microservice = MicroserviceModel.new(
|
|
@@ -166,14 +171,78 @@ module OpenC3
|
|
|
166
171
|
],
|
|
167
172
|
topics: ["#{@scope}__TELEMETRY__{UNKNOWN}__UNKNOWN"],
|
|
168
173
|
target_names: [],
|
|
174
|
+
parent: parent,
|
|
169
175
|
scope: @scope
|
|
170
176
|
)
|
|
171
177
|
microservice.create
|
|
172
178
|
microservice.deploy(gem_path, variables)
|
|
179
|
+
@children << microservice_name if parent
|
|
173
180
|
Logger.info "Configured microservice #{microservice_name}"
|
|
174
181
|
end
|
|
175
182
|
|
|
183
|
+
def deploy_periodic_microservice(gem_path, variables, parent)
|
|
184
|
+
microservice_name = "#{@scope}__PERIODIC__#{@scope}"
|
|
185
|
+
microservice = MicroserviceModel.new(
|
|
186
|
+
name: microservice_name,
|
|
187
|
+
cmd: ["ruby", "periodic_microservice.rb", microservice_name],
|
|
188
|
+
work_dir: '/openc3/lib/openc3/microservices',
|
|
189
|
+
parent: parent,
|
|
190
|
+
scope: @scope
|
|
191
|
+
)
|
|
192
|
+
microservice.create
|
|
193
|
+
microservice.deploy(gem_path, variables)
|
|
194
|
+
@children << microservice_name if parent
|
|
195
|
+
Logger.info "Configured microservice #{microservice_name}"
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def deploy_scopemulti_microservice(gem_path, variables)
|
|
199
|
+
microservice_name = "#{@scope}__SCOPEMULTI__#{@scope}"
|
|
200
|
+
microservice = MicroserviceModel.new(
|
|
201
|
+
name: microservice_name,
|
|
202
|
+
cmd: ["ruby", "multi_microservice.rb", *@children],
|
|
203
|
+
work_dir: '/openc3/lib/openc3/microservices',
|
|
204
|
+
target_names: [],
|
|
205
|
+
scope: @scope
|
|
206
|
+
)
|
|
207
|
+
microservice.create
|
|
208
|
+
microservice.deploy(gem_path, variables)
|
|
209
|
+
Logger.info "Configured microservice #{microservice_name}"
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def deploy(gem_path, variables)
|
|
213
|
+
seed_database()
|
|
214
|
+
ConfigTopic.initialize_stream(@scope)
|
|
215
|
+
|
|
216
|
+
# Create UNKNOWN target for display of unknown data
|
|
217
|
+
model = TargetModel.new(name: "UNKNOWN", scope: @scope)
|
|
218
|
+
model.create
|
|
219
|
+
# Not deployed - we only want raw packet logging for UNKNOWN
|
|
220
|
+
# TODO: Cleanup support
|
|
221
|
+
|
|
222
|
+
@parent = "#{@scope}__SCOPEMULTI__#{@scope}"
|
|
223
|
+
|
|
224
|
+
# OpenC3 Log Microservice
|
|
225
|
+
deploy_openc3_log_messages_microservice(gem_path, variables, @parent)
|
|
226
|
+
|
|
227
|
+
# Notification Log Microservice
|
|
228
|
+
deploy_openc3_notifications_microservice(gem_path, variables, @parent)
|
|
229
|
+
|
|
230
|
+
# UNKNOWN CommandLog Microservice
|
|
231
|
+
deploy_unknown_commandlog_microservice(gem_path, variables, @parent)
|
|
232
|
+
|
|
233
|
+
# UNKNOWN PacketLog Microservice
|
|
234
|
+
deploy_unknown_packetlog_microservice(gem_path, variables, @parent)
|
|
235
|
+
|
|
236
|
+
# Periodic Microservice
|
|
237
|
+
deploy_periodic_microservice(gem_path, variables, @parent)
|
|
238
|
+
|
|
239
|
+
# Multi Microservice to parent other scope microservices
|
|
240
|
+
deploy_scopemulti_microservice(gem_path, variables)
|
|
241
|
+
end
|
|
242
|
+
|
|
176
243
|
def undeploy
|
|
244
|
+
model = MicroserviceModel.get_model(name: "#{@scope}__SCOPEMULTI__#{@scope}", scope: @scope)
|
|
245
|
+
model.destroy if model
|
|
177
246
|
model = MicroserviceModel.get_model(name: "#{@scope}__OPENC3__LOG", scope: @scope)
|
|
178
247
|
model.destroy if model
|
|
179
248
|
model = MicroserviceModel.get_model(name: "#{@scope}__NOTIFICATION__LOG", scope: @scope)
|
|
@@ -182,11 +251,18 @@ module OpenC3
|
|
|
182
251
|
model.destroy if model
|
|
183
252
|
model = MicroserviceModel.get_model(name: "#{@scope}__PACKETLOG__UNKNOWN", scope: @scope)
|
|
184
253
|
model.destroy if model
|
|
254
|
+
model = MicroserviceModel.get_model(name: "#{@scope}__PERIODIC__#{@scope}", scope: @scope)
|
|
255
|
+
model.destroy if model
|
|
256
|
+
# Delete the topics we created for the scope
|
|
257
|
+
Topic.del("#{@scope}__COMMAND__{UNKNOWN}__UNKNOWN")
|
|
258
|
+
Topic.del("#{@scope}__TELEMETRY__{UNKNOWN}__UNKNOWN")
|
|
259
|
+
Topic.del("#{@scope}__openc3_targets")
|
|
260
|
+
Topic.del("#{@scope}__CONFIG")
|
|
185
261
|
end
|
|
186
262
|
|
|
187
263
|
def seed_database
|
|
188
264
|
setting = SettingsModel.get(name: 'source_url')
|
|
189
|
-
SettingsModel.set({ name: 'source_url', data: 'https://github.com/OpenC3/
|
|
265
|
+
SettingsModel.set({ name: 'source_url', data: 'https://github.com/OpenC3/cosmos' }, scope: @scope) unless setting
|
|
190
266
|
end
|
|
191
267
|
end
|
|
192
268
|
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/models/model'
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2022 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
|
+
require 'openc3/models/model'
|
|
20
|
+
|
|
21
|
+
module OpenC3
|
|
22
|
+
class StashModel < Model
|
|
23
|
+
PRIMARY_KEY = 'openc3__stash'
|
|
24
|
+
|
|
25
|
+
# NOTE: The following three class methods are used by the ModelController
|
|
26
|
+
# and are reimplemented to enable various Model class methods to work
|
|
27
|
+
def self.get(name:, scope:)
|
|
28
|
+
super("#{scope}__#{PRIMARY_KEY}", name: name)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.names(scope:)
|
|
32
|
+
super("#{scope}__#{PRIMARY_KEY}")
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.all(scope:)
|
|
36
|
+
super("#{scope}__#{PRIMARY_KEY}")
|
|
37
|
+
end
|
|
38
|
+
# END NOTE
|
|
39
|
+
|
|
40
|
+
def initialize(name:, value:, scope:)
|
|
41
|
+
super("#{scope}__#{PRIMARY_KEY}", name: name, scope: scope)
|
|
42
|
+
@value = value
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# @return [Hash] JSON encoding of this model
|
|
46
|
+
def as_json(*a)
|
|
47
|
+
{
|
|
48
|
+
'name' => @name,
|
|
49
|
+
'value' => @value.as_json(*a),
|
|
50
|
+
}
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|