openc3 5.1.1 → 5.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|