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
|
@@ -54,12 +54,14 @@ module OpenC3
|
|
|
54
54
|
attr_accessor :cmd_unique_id_mode
|
|
55
55
|
attr_accessor :tlm_unique_id_mode
|
|
56
56
|
attr_accessor :id
|
|
57
|
+
attr_accessor :cmd_buffer_depth
|
|
57
58
|
attr_accessor :cmd_log_cycle_time
|
|
58
59
|
attr_accessor :cmd_log_cycle_size
|
|
59
60
|
attr_accessor :cmd_log_retain_time
|
|
60
61
|
attr_accessor :cmd_decom_log_cycle_time
|
|
61
62
|
attr_accessor :cmd_decom_log_cycle_size
|
|
62
63
|
attr_accessor :cmd_decom_log_retain_time
|
|
64
|
+
attr_accessor :tlm_buffer_depth
|
|
63
65
|
attr_accessor :tlm_log_cycle_time
|
|
64
66
|
attr_accessor :tlm_log_cycle_size
|
|
65
67
|
attr_accessor :tlm_log_retain_time
|
|
@@ -71,6 +73,8 @@ module OpenC3
|
|
|
71
73
|
attr_accessor :reduced_day_log_retain_time
|
|
72
74
|
attr_accessor :cleanup_poll_time
|
|
73
75
|
attr_accessor :needs_dependencies
|
|
76
|
+
attr_accessor :target_microservices
|
|
77
|
+
attr_accessor :children
|
|
74
78
|
|
|
75
79
|
# NOTE: The following three class methods are used by the ModelController
|
|
76
80
|
# and are reimplemented to enable various Model class methods to work
|
|
@@ -290,12 +294,14 @@ module OpenC3
|
|
|
290
294
|
id: nil,
|
|
291
295
|
updated_at: nil,
|
|
292
296
|
plugin: nil,
|
|
297
|
+
cmd_buffer_depth: 5,
|
|
293
298
|
cmd_log_cycle_time: 600,
|
|
294
299
|
cmd_log_cycle_size: 50_000_000,
|
|
295
300
|
cmd_log_retain_time: nil,
|
|
296
301
|
cmd_decom_log_cycle_time: 600,
|
|
297
302
|
cmd_decom_log_cycle_size: 50_000_000,
|
|
298
303
|
cmd_decom_log_retain_time: nil,
|
|
304
|
+
tlm_buffer_depth: 60,
|
|
299
305
|
tlm_log_cycle_time: 600,
|
|
300
306
|
tlm_log_cycle_size: 50_000_000,
|
|
301
307
|
tlm_log_retain_time: nil,
|
|
@@ -307,20 +313,21 @@ module OpenC3
|
|
|
307
313
|
reduced_day_log_retain_time: nil,
|
|
308
314
|
cleanup_poll_time: 900,
|
|
309
315
|
needs_dependencies: false,
|
|
316
|
+
target_microservices: {},
|
|
310
317
|
scope:
|
|
311
318
|
)
|
|
312
319
|
super("#{scope}__#{PRIMARY_KEY}", name: name, plugin: plugin, updated_at: updated_at,
|
|
313
|
-
cmd_log_cycle_time: cmd_log_cycle_time, cmd_log_cycle_size: cmd_log_cycle_size,
|
|
320
|
+
cmd_buffer_depth: cmd_buffer_depth, cmd_log_cycle_time: cmd_log_cycle_time, cmd_log_cycle_size: cmd_log_cycle_size,
|
|
314
321
|
cmd_log_retain_time: cmd_log_retain_time,
|
|
315
322
|
cmd_decom_log_cycle_time: cmd_decom_log_cycle_time, cmd_decom_log_cycle_size: cmd_decom_log_cycle_size,
|
|
316
323
|
cmd_decom_log_retain_time: cmd_decom_log_retain_time,
|
|
317
|
-
tlm_log_cycle_time: tlm_log_cycle_time, tlm_log_cycle_size: tlm_log_cycle_size,
|
|
324
|
+
tlm_buffer_depth: tlm_buffer_depth, tlm_log_cycle_time: tlm_log_cycle_time, tlm_log_cycle_size: tlm_log_cycle_size,
|
|
318
325
|
tlm_log_retain_time: tlm_log_retain_time,
|
|
319
326
|
tlm_decom_log_cycle_time: tlm_decom_log_cycle_time, tlm_decom_log_cycle_size: tlm_decom_log_cycle_size,
|
|
320
327
|
tlm_decom_log_retain_time: tlm_decom_log_retain_time,
|
|
321
328
|
reduced_minute_log_retain_time: reduced_minute_log_retain_time,
|
|
322
329
|
reduced_hour_log_retain_time: reduced_hour_log_retain_time, reduced_day_log_retain_time: reduced_day_log_retain_time,
|
|
323
|
-
cleanup_poll_time: cleanup_poll_time, needs_dependencies: needs_dependencies,
|
|
330
|
+
cleanup_poll_time: cleanup_poll_time, needs_dependencies: needs_dependencies, target_microservices: target_microservices,
|
|
324
331
|
scope: scope)
|
|
325
332
|
@folder_name = folder_name
|
|
326
333
|
@requires = requires
|
|
@@ -331,12 +338,14 @@ module OpenC3
|
|
|
331
338
|
@cmd_unique_id_mode = cmd_unique_id_mode
|
|
332
339
|
@tlm_unique_id_mode = tlm_unique_id_mode
|
|
333
340
|
@id = id
|
|
341
|
+
@cmd_buffer_depth = cmd_buffer_depth
|
|
334
342
|
@cmd_log_cycle_time = cmd_log_cycle_time
|
|
335
343
|
@cmd_log_cycle_size = cmd_log_cycle_size
|
|
336
344
|
@cmd_log_retain_time = cmd_log_retain_time
|
|
337
345
|
@cmd_decom_log_cycle_time = cmd_decom_log_cycle_time
|
|
338
346
|
@cmd_decom_log_cycle_size = cmd_decom_log_cycle_size
|
|
339
347
|
@cmd_decom_log_retain_time = cmd_decom_log_retain_time
|
|
348
|
+
@tlm_buffer_depth = tlm_buffer_depth
|
|
340
349
|
@tlm_log_cycle_time = tlm_log_cycle_time
|
|
341
350
|
@tlm_log_cycle_size = tlm_log_cycle_size
|
|
342
351
|
@tlm_log_retain_time = tlm_log_retain_time
|
|
@@ -348,7 +357,9 @@ module OpenC3
|
|
|
348
357
|
@reduced_day_log_retain_time = reduced_day_log_retain_time
|
|
349
358
|
@cleanup_poll_time = cleanup_poll_time
|
|
350
359
|
@needs_dependencies = needs_dependencies
|
|
360
|
+
@target_microservices = target_microservices
|
|
351
361
|
@bucket = Bucket.getClient()
|
|
362
|
+
@children = []
|
|
352
363
|
end
|
|
353
364
|
|
|
354
365
|
def as_json(*a)
|
|
@@ -365,12 +376,14 @@ module OpenC3
|
|
|
365
376
|
'id' => @id,
|
|
366
377
|
'updated_at' => @updated_at,
|
|
367
378
|
'plugin' => @plugin,
|
|
379
|
+
'cmd_buffer_depth' => @cmd_buffer_depth,
|
|
368
380
|
'cmd_log_cycle_time' => @cmd_log_cycle_time,
|
|
369
381
|
'cmd_log_cycle_size' => @cmd_log_cycle_size,
|
|
370
382
|
'cmd_log_retain_time' => @cmd_log_retain_time,
|
|
371
383
|
'cmd_decom_log_cycle_time' => @cmd_decom_log_cycle_time,
|
|
372
384
|
'cmd_decom_log_cycle_size' => @cmd_decom_log_cycle_size,
|
|
373
385
|
'cmd_decom_log_retain_time' => @cmd_decom_log_retain_time,
|
|
386
|
+
'tlm_buffer_depth' => @tlm_buffer_depth,
|
|
374
387
|
'tlm_log_cycle_time' => @tlm_log_cycle_time,
|
|
375
388
|
'tlm_log_cycle_size' => @tlm_log_cycle_size,
|
|
376
389
|
'tlm_log_retain_time' => @tlm_log_retain_time,
|
|
@@ -382,16 +395,16 @@ module OpenC3
|
|
|
382
395
|
'reduced_day_log_retain_time' => @reduced_day_log_retain_time,
|
|
383
396
|
'cleanup_poll_time' => @cleanup_poll_time,
|
|
384
397
|
'needs_dependencies' => @needs_dependencies,
|
|
398
|
+
'target_microservices' => @target_microservices.as_json(:allow_nan => true)
|
|
385
399
|
}
|
|
386
400
|
end
|
|
387
401
|
|
|
388
|
-
def as_config
|
|
389
|
-
"TARGET #{@folder_name} #{@name}\n"
|
|
390
|
-
end
|
|
391
|
-
|
|
392
402
|
# Handles Target specific configuration keywords
|
|
393
403
|
def handle_config(parser, keyword, parameters)
|
|
394
404
|
case keyword
|
|
405
|
+
when 'CMD_BUFFER_DEPTH'
|
|
406
|
+
parser.verify_num_parameters(1, 1, "#{keyword} <Number of commands to buffer to ensure logged in order>")
|
|
407
|
+
@cmd_buffer_depth = parameters[0].to_i
|
|
395
408
|
when 'CMD_LOG_CYCLE_TIME'
|
|
396
409
|
parser.verify_num_parameters(1, 1, "#{keyword} <Maximum time between files in seconds>")
|
|
397
410
|
@cmd_log_cycle_time = parameters[0].to_i
|
|
@@ -412,6 +425,9 @@ module OpenC3
|
|
|
412
425
|
parser.verify_num_parameters(1, 1, "#{keyword} <Retention time for cmd decom log files in seconds - nil = Forever>")
|
|
413
426
|
@cmd_decom_log_retain_time = ConfigParser.handle_nil(parameters[0])
|
|
414
427
|
@cmd_decom_log_retain_time = @cmd_decom_log_retain_time.to_i if @cmd_decom_log_retain_time
|
|
428
|
+
when 'TLM_BUFFER_DEPTH'
|
|
429
|
+
parser.verify_num_parameters(1, 1, "#{keyword} <Number of telemetry packets to buffer to ensure logged in order>")
|
|
430
|
+
@tlm_buffer_depth = parameters[0].to_i
|
|
415
431
|
when 'TLM_LOG_CYCLE_TIME'
|
|
416
432
|
parser.verify_num_parameters(1, 1, "#{keyword} <Maximum time between files in seconds>")
|
|
417
433
|
@tlm_log_cycle_time = parameters[0].to_i
|
|
@@ -464,6 +480,25 @@ module OpenC3
|
|
|
464
480
|
when 'CLEANUP_POLL_TIME'
|
|
465
481
|
parser.verify_num_parameters(1, 1, "#{keyword} <Cleanup polling period in seconds>")
|
|
466
482
|
@cleanup_poll_time = parameters[0].to_i
|
|
483
|
+
when 'TARGET_MICROSERVICE'
|
|
484
|
+
parser.verify_num_parameters(1, 1, "#{keyword} <Type: DECOM COMMANDLOG DECOMCMDLOG PACKETLOG DECOMLOG REDUCER CLEANUP>")
|
|
485
|
+
type = parameters[0].to_s.upcase
|
|
486
|
+
unless %w(DECOM COMMANDLOG DECOMCMDLOG PACKETLOG DECOMLOG REDUCER CLEANUP).include?(type)
|
|
487
|
+
raise "Unknown TARGET_MICROSERVICE #{type}"
|
|
488
|
+
end
|
|
489
|
+
@target_microservices[type] ||= []
|
|
490
|
+
@target_microservices[type] << []
|
|
491
|
+
@current_target_microservice = type
|
|
492
|
+
when 'PACKET'
|
|
493
|
+
if @current_target_microservice
|
|
494
|
+
parser.verify_num_parameters(1, 1, "#{keyword} <Packet Name>")
|
|
495
|
+
if @current_target_microservice == 'REDUCER' or @current_target_microservice == 'CLEANUP'
|
|
496
|
+
raise ConfigParser::Error.new(parser, "PACKET cannot be used with target microservice #{@current_target_microservice}")
|
|
497
|
+
end
|
|
498
|
+
@target_microservices[@current_target_microservice][-1] << parameters[0].to_s.upcase
|
|
499
|
+
else
|
|
500
|
+
raise ConfigParser::Error.new(parser, "PACKET cannot be used without a TARGET_MICROSERVICE")
|
|
501
|
+
end
|
|
467
502
|
else
|
|
468
503
|
raise ConfigParser::Error.new(parser, "Unknown keyword and parameters for Target: #{keyword} #{parameters.join(" ")}")
|
|
469
504
|
end
|
|
@@ -546,9 +581,19 @@ module OpenC3
|
|
|
546
581
|
Store.del("#{@scope}__openc3cmd__#{@name}")
|
|
547
582
|
|
|
548
583
|
# Note: these match the names of the services in deploy_microservices
|
|
549
|
-
%w(DECOM COMMANDLOG DECOMCMDLOG PACKETLOG DECOMLOG REDUCER CLEANUP).each do |type|
|
|
550
|
-
|
|
551
|
-
|
|
584
|
+
%w(MULTI DECOM COMMANDLOG DECOMCMDLOG PACKETLOG DECOMLOG REDUCER CLEANUP).each do |type|
|
|
585
|
+
target_microservices = @target_microservices[type]
|
|
586
|
+
if target_microservices
|
|
587
|
+
max_instances = target_microservices.length + 1
|
|
588
|
+
else
|
|
589
|
+
max_instances = 1
|
|
590
|
+
end
|
|
591
|
+
max_instances.times do |index|
|
|
592
|
+
instance = nil
|
|
593
|
+
instance = index unless index == 0
|
|
594
|
+
model = MicroserviceModel.get_model(name: "#{@scope}__#{type}#{instance}__#{@name}", scope: @scope)
|
|
595
|
+
model.destroy if model
|
|
596
|
+
end
|
|
552
597
|
end
|
|
553
598
|
|
|
554
599
|
ConfigTopic.write({ kind: 'deleted', type: 'target', name: @name, plugin: @plugin }, scope: @scope)
|
|
@@ -683,6 +728,218 @@ module OpenC3
|
|
|
683
728
|
return system
|
|
684
729
|
end
|
|
685
730
|
|
|
731
|
+
def deploy_commmandlog_microservice(gem_path, variables, topics, instance = nil, parent = nil)
|
|
732
|
+
microservice_name = "#{@scope}__COMMANDLOG#{instance}__#{@name}"
|
|
733
|
+
microservice = MicroserviceModel.new(
|
|
734
|
+
name: microservice_name,
|
|
735
|
+
folder_name: @folder_name,
|
|
736
|
+
cmd: ["ruby", "log_microservice.rb", microservice_name],
|
|
737
|
+
work_dir: '/openc3/lib/openc3/microservices',
|
|
738
|
+
options: [
|
|
739
|
+
["RAW_OR_DECOM", "RAW"],
|
|
740
|
+
["CMD_OR_TLM", "CMD"],
|
|
741
|
+
["CYCLE_TIME", @cmd_log_cycle_time],
|
|
742
|
+
["CYCLE_SIZE", @cmd_log_cycle_size],
|
|
743
|
+
["BUFFER_DEPTH", @cmd_buffer_depth]
|
|
744
|
+
],
|
|
745
|
+
topics: topics,
|
|
746
|
+
plugin: @plugin,
|
|
747
|
+
parent: parent,
|
|
748
|
+
needs_dependencies: @needs_dependencies,
|
|
749
|
+
scope: @scope
|
|
750
|
+
)
|
|
751
|
+
microservice.create
|
|
752
|
+
microservice.deploy(gem_path, variables)
|
|
753
|
+
@children << microservice_name if parent
|
|
754
|
+
Logger.info "Configured microservice #{microservice_name}"
|
|
755
|
+
end
|
|
756
|
+
|
|
757
|
+
def deploy_decomcmdlog_microservice(gem_path, variables, topics, instance = nil, parent = nil)
|
|
758
|
+
microservice_name = "#{@scope}__DECOMCMDLOG#{instance}__#{@name}"
|
|
759
|
+
microservice = MicroserviceModel.new(
|
|
760
|
+
name: microservice_name,
|
|
761
|
+
folder_name: @folder_name,
|
|
762
|
+
cmd: ["ruby", "log_microservice.rb", microservice_name],
|
|
763
|
+
work_dir: '/openc3/lib/openc3/microservices',
|
|
764
|
+
options: [
|
|
765
|
+
["RAW_OR_DECOM", "DECOM"],
|
|
766
|
+
["CMD_OR_TLM", "CMD"],
|
|
767
|
+
["CYCLE_TIME", @cmd_decom_log_cycle_time],
|
|
768
|
+
["CYCLE_SIZE", @cmd_decom_log_cycle_size],
|
|
769
|
+
["BUFFER_DEPTH", @cmd_buffer_depth]
|
|
770
|
+
],
|
|
771
|
+
topics: topics,
|
|
772
|
+
plugin: @plugin,
|
|
773
|
+
parent: parent,
|
|
774
|
+
needs_dependencies: @needs_dependencies,
|
|
775
|
+
scope: @scope
|
|
776
|
+
)
|
|
777
|
+
microservice.create
|
|
778
|
+
microservice.deploy(gem_path, variables)
|
|
779
|
+
@children << microservice_name if parent
|
|
780
|
+
Logger.info "Configured microservice #{microservice_name}"
|
|
781
|
+
end
|
|
782
|
+
|
|
783
|
+
def deploy_packetlog_microservice(gem_path, variables, topics, instance = nil, parent = nil)
|
|
784
|
+
microservice_name = "#{@scope}__PACKETLOG#{instance}__#{@name}"
|
|
785
|
+
microservice = MicroserviceModel.new(
|
|
786
|
+
name: microservice_name,
|
|
787
|
+
folder_name: @folder_name,
|
|
788
|
+
cmd: ["ruby", "log_microservice.rb", microservice_name],
|
|
789
|
+
work_dir: '/openc3/lib/openc3/microservices',
|
|
790
|
+
options: [
|
|
791
|
+
["RAW_OR_DECOM", "RAW"],
|
|
792
|
+
["CMD_OR_TLM", "TLM"],
|
|
793
|
+
["CYCLE_TIME", @tlm_log_cycle_time],
|
|
794
|
+
["CYCLE_SIZE", @tlm_log_cycle_size],
|
|
795
|
+
["BUFFER_DEPTH", @tlm_buffer_depth]
|
|
796
|
+
],
|
|
797
|
+
topics: topics,
|
|
798
|
+
plugin: @plugin,
|
|
799
|
+
parent: parent,
|
|
800
|
+
needs_dependencies: @needs_dependencies,
|
|
801
|
+
scope: @scope
|
|
802
|
+
)
|
|
803
|
+
microservice.create
|
|
804
|
+
microservice.deploy(gem_path, variables)
|
|
805
|
+
@children << microservice_name if parent
|
|
806
|
+
Logger.info "Configured microservice #{microservice_name}"
|
|
807
|
+
end
|
|
808
|
+
|
|
809
|
+
def deploy_decomlog_microservice(gem_path, variables, topics, instance = nil, parent = nil)
|
|
810
|
+
microservice_name = "#{@scope}__DECOMLOG#{instance}__#{@name}"
|
|
811
|
+
microservice = MicroserviceModel.new(
|
|
812
|
+
name: microservice_name,
|
|
813
|
+
folder_name: @folder_name,
|
|
814
|
+
cmd: ["ruby", "log_microservice.rb", microservice_name],
|
|
815
|
+
work_dir: '/openc3/lib/openc3/microservices',
|
|
816
|
+
options: [
|
|
817
|
+
["RAW_OR_DECOM", "DECOM"],
|
|
818
|
+
["CMD_OR_TLM", "TLM"],
|
|
819
|
+
["CYCLE_TIME", @tlm_decom_log_cycle_time],
|
|
820
|
+
["CYCLE_SIZE", @tlm_decom_log_cycle_size],
|
|
821
|
+
["BUFFER_DEPTH", @tlm_buffer_depth]
|
|
822
|
+
],
|
|
823
|
+
topics: topics,
|
|
824
|
+
plugin: @plugin,
|
|
825
|
+
parent: parent,
|
|
826
|
+
needs_dependencies: @needs_dependencies,
|
|
827
|
+
scope: @scope
|
|
828
|
+
)
|
|
829
|
+
microservice.create
|
|
830
|
+
microservice.deploy(gem_path, variables)
|
|
831
|
+
@children << microservice_name if parent
|
|
832
|
+
Logger.info "Configured microservice #{microservice_name}"
|
|
833
|
+
end
|
|
834
|
+
|
|
835
|
+
def deploy_decom_microservice(gem_path, variables, topics, instance = nil, parent = nil)
|
|
836
|
+
microservice_name = "#{@scope}__DECOM#{instance}__#{@name}"
|
|
837
|
+
microservice = MicroserviceModel.new(
|
|
838
|
+
name: microservice_name,
|
|
839
|
+
folder_name: @folder_name,
|
|
840
|
+
cmd: ["ruby", "decom_microservice.rb", microservice_name],
|
|
841
|
+
work_dir: '/openc3/lib/openc3/microservices',
|
|
842
|
+
topics: topics,
|
|
843
|
+
target_names: [@name],
|
|
844
|
+
plugin: @plugin,
|
|
845
|
+
parent: parent,
|
|
846
|
+
needs_dependencies: @needs_dependencies,
|
|
847
|
+
scope: @scope
|
|
848
|
+
)
|
|
849
|
+
microservice.create
|
|
850
|
+
microservice.deploy(gem_path, variables)
|
|
851
|
+
@children << microservice_name if parent
|
|
852
|
+
Logger.info "Configured microservice #{microservice_name}"
|
|
853
|
+
end
|
|
854
|
+
|
|
855
|
+
def deploy_reducer_microservice(gem_path, variables, topics, instance = nil, parent = nil)
|
|
856
|
+
microservice_name = "#{@scope}__REDUCER#{instance}__#{@name}"
|
|
857
|
+
microservice = MicroserviceModel.new(
|
|
858
|
+
name: microservice_name,
|
|
859
|
+
folder_name: @folder_name,
|
|
860
|
+
cmd: ["ruby", "reducer_microservice.rb", microservice_name],
|
|
861
|
+
work_dir: '/openc3/lib/openc3/microservices',
|
|
862
|
+
topics: topics,
|
|
863
|
+
plugin: @plugin,
|
|
864
|
+
parent: parent,
|
|
865
|
+
needs_dependencies: @needs_dependencies,
|
|
866
|
+
scope: @scope
|
|
867
|
+
)
|
|
868
|
+
microservice.create
|
|
869
|
+
microservice.deploy(gem_path, variables)
|
|
870
|
+
@children << microservice_name if parent
|
|
871
|
+
Logger.info "Configured microservice #{microservice_name}"
|
|
872
|
+
end
|
|
873
|
+
|
|
874
|
+
def deploy_cleanup_microservice(gem_path, variables, instance = nil, parent = nil)
|
|
875
|
+
microservice_name = "#{@scope}__CLEANUP#{instance}__#{@name}"
|
|
876
|
+
microservice = MicroserviceModel.new(
|
|
877
|
+
name: microservice_name,
|
|
878
|
+
cmd: ["ruby", "cleanup_microservice.rb", microservice_name],
|
|
879
|
+
work_dir: '/openc3/lib/openc3/microservices',
|
|
880
|
+
plugin: @plugin,
|
|
881
|
+
parent: parent,
|
|
882
|
+
scope: @scope
|
|
883
|
+
)
|
|
884
|
+
microservice.create
|
|
885
|
+
microservice.deploy(gem_path, variables)
|
|
886
|
+
@children << microservice_name if parent
|
|
887
|
+
Logger.info "Configured microservice #{microservice_name}"
|
|
888
|
+
end
|
|
889
|
+
|
|
890
|
+
def deploy_multi_microservice(gem_path, variables, instance = nil)
|
|
891
|
+
if @children.length > 0
|
|
892
|
+
microservice_name = "#{@scope}__MULTI#{instance}__#{@name}"
|
|
893
|
+
microservice = MicroserviceModel.new(
|
|
894
|
+
name: microservice_name,
|
|
895
|
+
cmd: ["ruby", "multi_microservice.rb", *@children],
|
|
896
|
+
work_dir: '/openc3/lib/openc3/microservices',
|
|
897
|
+
target_names: [@name],
|
|
898
|
+
plugin: @plugin,
|
|
899
|
+
scope: @scope
|
|
900
|
+
)
|
|
901
|
+
microservice.create
|
|
902
|
+
microservice.deploy(gem_path, variables)
|
|
903
|
+
Logger.info "Configured microservice #{microservice_name}"
|
|
904
|
+
end
|
|
905
|
+
end
|
|
906
|
+
|
|
907
|
+
def deploy_target_microservices(type, base_topic_list, topic_prefix)
|
|
908
|
+
target_microservices = @target_microservices[type]
|
|
909
|
+
if target_microservices
|
|
910
|
+
if base_topic_list
|
|
911
|
+
deploy_count = 0
|
|
912
|
+
all_topics = base_topic_list.dup
|
|
913
|
+
target_microservices.sort! {|a, b| a.length <=> b.length}
|
|
914
|
+
target_microservices.each_with_index do |packet_names, index|
|
|
915
|
+
topics = []
|
|
916
|
+
packet_names.each do |packet_name|
|
|
917
|
+
topics << "#{topic_prefix}__#{packet_name}"
|
|
918
|
+
end
|
|
919
|
+
topics = all_topics.dup if topics.length <= 0
|
|
920
|
+
if topics.length > 0
|
|
921
|
+
instance = nil
|
|
922
|
+
instance = deploy_count unless deploy_count == 0
|
|
923
|
+
yield topics, instance, nil
|
|
924
|
+
deploy_count += 1
|
|
925
|
+
topics.each do |topic|
|
|
926
|
+
all_topics.delete(topic)
|
|
927
|
+
end
|
|
928
|
+
end
|
|
929
|
+
end
|
|
930
|
+
if all_topics.length > 0
|
|
931
|
+
instance = nil
|
|
932
|
+
instance = deploy_count unless deploy_count == 0
|
|
933
|
+
yield all_topics, instance, nil
|
|
934
|
+
end
|
|
935
|
+
else
|
|
936
|
+
yield nil, nil, nil
|
|
937
|
+
end
|
|
938
|
+
else
|
|
939
|
+
yield base_topic_list, nil, @parent if not base_topic_list or base_topic_list.length > 0
|
|
940
|
+
end
|
|
941
|
+
end
|
|
942
|
+
|
|
686
943
|
def deploy_microservices(gem_path, variables, system)
|
|
687
944
|
command_topic_list = []
|
|
688
945
|
decom_command_topic_list = []
|
|
@@ -715,145 +972,59 @@ module OpenC3
|
|
|
715
972
|
Topic.initialize_streams(decom_topic_list)
|
|
716
973
|
Topic.initialize_streams(reduced_topic_list)
|
|
717
974
|
|
|
975
|
+
@parent = nil
|
|
976
|
+
%w(DECOM COMMANDLOG DECOMCMDLOG PACKETLOG DECOMLOG REDUCER CLEANUP).each do |type|
|
|
977
|
+
unless @target_microservices[type]
|
|
978
|
+
@parent = "#{@scope}__MULTI__#{@name}"
|
|
979
|
+
break
|
|
980
|
+
end
|
|
981
|
+
end
|
|
982
|
+
|
|
718
983
|
unless command_topic_list.empty?
|
|
719
984
|
# CommandLog Microservice
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
folder_name: @folder_name,
|
|
724
|
-
cmd: ["ruby", "log_microservice.rb", microservice_name],
|
|
725
|
-
work_dir: '/openc3/lib/openc3/microservices',
|
|
726
|
-
options: [
|
|
727
|
-
["RAW_OR_DECOM", "RAW"],
|
|
728
|
-
["CMD_OR_TLM", "CMD"],
|
|
729
|
-
["CYCLE_TIME", @cmd_log_cycle_time],
|
|
730
|
-
["CYCLE_SIZE", @cmd_log_cycle_size]
|
|
731
|
-
],
|
|
732
|
-
topics: command_topic_list,
|
|
733
|
-
plugin: @plugin,
|
|
734
|
-
needs_dependencies: @needs_dependencies,
|
|
735
|
-
scope: @scope
|
|
736
|
-
)
|
|
737
|
-
microservice.create
|
|
738
|
-
microservice.deploy(gem_path, variables)
|
|
739
|
-
Logger.info "Configured microservice #{microservice_name}"
|
|
985
|
+
deploy_target_microservices('COMMANDLOG', command_topic_list, "#{@scope}__COMMAND__{#{@name}}") do |topics, instance, parent|
|
|
986
|
+
deploy_commmandlog_microservice(gem_path, variables, topics, instance, parent)
|
|
987
|
+
end
|
|
740
988
|
|
|
741
989
|
# DecomCmdLog Microservice
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
folder_name: @folder_name,
|
|
746
|
-
cmd: ["ruby", "log_microservice.rb", microservice_name],
|
|
747
|
-
work_dir: '/openc3/lib/openc3/microservices',
|
|
748
|
-
options: [
|
|
749
|
-
["RAW_OR_DECOM", "DECOM"],
|
|
750
|
-
["CMD_OR_TLM", "CMD"],
|
|
751
|
-
["CYCLE_TIME", @cmd_decom_log_cycle_time],
|
|
752
|
-
["CYCLE_SIZE", @cmd_decom_log_cycle_size]
|
|
753
|
-
],
|
|
754
|
-
topics: decom_command_topic_list,
|
|
755
|
-
plugin: @plugin,
|
|
756
|
-
needs_dependencies: @needs_dependencies,
|
|
757
|
-
scope: @scope
|
|
758
|
-
)
|
|
759
|
-
microservice.create
|
|
760
|
-
microservice.deploy(gem_path, variables)
|
|
761
|
-
Logger.info "Configured microservice #{microservice_name}"
|
|
990
|
+
deploy_target_microservices('DECOMCMDLOG', decom_command_topic_list, "#{@scope}__DECOMCMD__{#{@name}}") do |topics, instance, parent|
|
|
991
|
+
deploy_decomcmdlog_microservice(gem_path, variables, topics, instance, parent)
|
|
992
|
+
end
|
|
762
993
|
end
|
|
763
994
|
|
|
764
995
|
unless packet_topic_list.empty?
|
|
765
996
|
# PacketLog Microservice
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
folder_name: @folder_name,
|
|
770
|
-
cmd: ["ruby", "log_microservice.rb", microservice_name],
|
|
771
|
-
work_dir: '/openc3/lib/openc3/microservices',
|
|
772
|
-
options: [
|
|
773
|
-
["RAW_OR_DECOM", "RAW"],
|
|
774
|
-
["CMD_OR_TLM", "TLM"],
|
|
775
|
-
["CYCLE_TIME", @tlm_log_cycle_time],
|
|
776
|
-
["CYCLE_SIZE", @tlm_log_cycle_size]
|
|
777
|
-
],
|
|
778
|
-
topics: packet_topic_list,
|
|
779
|
-
plugin: @plugin,
|
|
780
|
-
needs_dependencies: @needs_dependencies,
|
|
781
|
-
scope: @scope
|
|
782
|
-
)
|
|
783
|
-
microservice.create
|
|
784
|
-
microservice.deploy(gem_path, variables)
|
|
785
|
-
Logger.info "Configured microservice #{microservice_name}"
|
|
997
|
+
deploy_target_microservices('PACKETLOG', packet_topic_list, "#{@scope}__TELEMETRY__{#{@name}}") do |topics, instance, parent|
|
|
998
|
+
deploy_packetlog_microservice(gem_path, variables, topics, instance, parent)
|
|
999
|
+
end
|
|
786
1000
|
|
|
787
1001
|
# DecomLog Microservice
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
folder_name: @folder_name,
|
|
792
|
-
cmd: ["ruby", "log_microservice.rb", microservice_name],
|
|
793
|
-
work_dir: '/openc3/lib/openc3/microservices',
|
|
794
|
-
options: [
|
|
795
|
-
["RAW_OR_DECOM", "DECOM"],
|
|
796
|
-
["CMD_OR_TLM", "TLM"],
|
|
797
|
-
["CYCLE_TIME", @tlm_decom_log_cycle_time],
|
|
798
|
-
["CYCLE_SIZE", @tlm_decom_log_cycle_size]
|
|
799
|
-
],
|
|
800
|
-
topics: decom_topic_list,
|
|
801
|
-
plugin: @plugin,
|
|
802
|
-
needs_dependencies: @needs_dependencies,
|
|
803
|
-
scope: @scope
|
|
804
|
-
)
|
|
805
|
-
microservice.create
|
|
806
|
-
microservice.deploy(gem_path, variables)
|
|
807
|
-
Logger.info "Configured microservice #{microservice_name}"
|
|
1002
|
+
deploy_target_microservices('DECOMLOG', decom_topic_list, "#{@scope}__DECOM__{#{@name}}") do |topics, instance, parent|
|
|
1003
|
+
deploy_decomlog_microservice(gem_path, variables, topics, instance, parent)
|
|
1004
|
+
end
|
|
808
1005
|
|
|
809
1006
|
# Decommutation Microservice
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
folder_name: @folder_name,
|
|
814
|
-
cmd: ["ruby", "decom_microservice.rb", microservice_name],
|
|
815
|
-
work_dir: '/openc3/lib/openc3/microservices',
|
|
816
|
-
topics: packet_topic_list,
|
|
817
|
-
target_names: [@name],
|
|
818
|
-
plugin: @plugin,
|
|
819
|
-
needs_dependencies: @needs_dependencies,
|
|
820
|
-
scope: @scope
|
|
821
|
-
)
|
|
822
|
-
microservice.create
|
|
823
|
-
microservice.deploy(gem_path, variables)
|
|
824
|
-
Logger.info "Configured microservice #{microservice_name}"
|
|
1007
|
+
deploy_target_microservices('DECOM', packet_topic_list, "#{@scope}__TELEMETRY__{#{@name}}") do |topics, instance, parent|
|
|
1008
|
+
deploy_decom_microservice(gem_path, variables, topics, instance, parent)
|
|
1009
|
+
end
|
|
825
1010
|
|
|
826
1011
|
# Reducer Microservice
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
folder_name: @folder_name,
|
|
831
|
-
cmd: ["ruby", "reducer_microservice.rb", microservice_name],
|
|
832
|
-
work_dir: '/openc3/lib/openc3/microservices',
|
|
833
|
-
topics: decom_topic_list,
|
|
834
|
-
plugin: @plugin,
|
|
835
|
-
needs_dependencies: @needs_dependencies,
|
|
836
|
-
scope: @scope
|
|
837
|
-
)
|
|
838
|
-
microservice.create
|
|
839
|
-
microservice.deploy(gem_path, variables)
|
|
840
|
-
Logger.info "Configured microservice #{microservice_name}"
|
|
1012
|
+
deploy_target_microservices('REDUCER', decom_topic_list, "#{@scope}__DECOM__{#{@name}}") do |topics, instance, parent|
|
|
1013
|
+
deploy_reducer_microservice(gem_path, variables, topics, instance, parent)
|
|
1014
|
+
end
|
|
841
1015
|
end
|
|
842
1016
|
|
|
843
1017
|
if @cmd_log_retain_time or @cmd_decom_log_retain_time or @tlm_log_retain_time or @tlm_decom_log_retain_time or
|
|
844
1018
|
@reduced_minute_log_retain_time or @reduced_hour_log_retain_time or @reduced_day_log_retain_time
|
|
845
1019
|
# Cleanup Microservice
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
)
|
|
854
|
-
microservice.create
|
|
855
|
-
microservice.deploy(gem_path, variables)
|
|
856
|
-
Logger.info "Configured microservice #{microservice_name}"
|
|
1020
|
+
deploy_target_microservices('CLEANUP', nil, nil) do |_, instance, parent|
|
|
1021
|
+
deploy_cleanup_microservice(gem_path, variables, instance, parent)
|
|
1022
|
+
end
|
|
1023
|
+
end
|
|
1024
|
+
|
|
1025
|
+
if @parent
|
|
1026
|
+
# Multi Microservice to parent other target microservices
|
|
1027
|
+
deploy_multi_microservice(gem_path, variables)
|
|
857
1028
|
end
|
|
858
1029
|
end
|
|
859
1030
|
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'
|
|
@@ -175,17 +175,6 @@ module OpenC3
|
|
|
175
175
|
}
|
|
176
176
|
end
|
|
177
177
|
|
|
178
|
-
def as_config
|
|
179
|
-
result = "TOOL #{@folder_name ? @folder_name : 'nil'} \"#{@name}\"\n"
|
|
180
|
-
result << " URL #{@url}\n" if @url
|
|
181
|
-
result << " INLINE_URL #{@inline_url}\n" if @inline_url
|
|
182
|
-
result << " ICON #{@icon}\n" if @icon
|
|
183
|
-
result << " WINDOW #{@window}\n" unless @window == 'INLINE'
|
|
184
|
-
result << " CATEGORY #{@category}\n" if @category
|
|
185
|
-
result << " SHOWN false\n" unless @shown
|
|
186
|
-
result
|
|
187
|
-
end
|
|
188
|
-
|
|
189
178
|
def handle_config(parser, keyword, parameters)
|
|
190
179
|
case keyword
|
|
191
180
|
when 'URL'
|
|
@@ -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/top_level'
|
|
@@ -103,11 +103,6 @@ module OpenC3
|
|
|
103
103
|
}
|
|
104
104
|
end
|
|
105
105
|
|
|
106
|
-
def as_config
|
|
107
|
-
result = "WIDGET \"#{@name}\"\n"
|
|
108
|
-
result
|
|
109
|
-
end
|
|
110
|
-
|
|
111
106
|
def handle_config(parser, keyword, parameters)
|
|
112
107
|
raise ConfigParser::Error.new(parser, "Unknown keyword and parameters for Widget: #{keyword} #{parameters.join(" ")}")
|
|
113
108
|
end
|